1

我们this.label1.Text = "Code Smart";在 Designer.cs 文件中有

现在我正在阅读.Designer.cs保存在我的解决方案文件夹中的所有文件。

现在我想匹配这些条件:

  1. 如果在字符串内.Text=.Text =匹配或不匹配。
  2. 我想从该字符串中获取文本,"" (Double Quotes)这意味着:Code Smart

背后的想法是收集.Text文件中的所有数据,所以如果我得到匹配的数据和该文本的值,那么我会将其导出到 aCSV进行翻译。

有人可以帮我这样做。请

添加1

我在 ADD1 中做了一些更改,并已修改为 ADD2,请检查和评论。谢谢

添加2:

好的,最后我达到了这个让我知道如何在双引号内获取字符串:

FolderBrowserDialog fbd = new FolderBrowserDialog();

foreach (string file in Directory.EnumerateFiles(fbd.SelectedPath, "*.Designer.cs"))
{
    int counter = 0;
    string line;

    // Read the file and display it line by line.
    StreamReader CurrentFile = new StreamReader(file);
    while ((line = CurrentFile.ReadLine()) != null)
    {
        bool typeOne = line.Contains(".Text=");
        bool typeTwo = line.Contains(".Text =");
        if ((typeOne == true) || (typeTwo == true))
        {
            // Get the data which is enclosed in double quotes
        }
        counter++;
    }
    CurrentFile.Close();
}
4

4 回答 4

1

Assuming there's no nesting of double quotes, you might use this regex:

\.Text\s*=\s*"([^"]+)"

ideone demo

于 2013-09-16T10:51:42.120 回答
1

然后我会将其导出为 CSV 进行翻译。

如果目标是拥有多语言 GUI,我不建议这样做。尝试使用 etither Zeta Resource Editor或Resx Resource Translator

还要检查此资源:演练:本地化 Windows 窗体。它描述了如何创建可以使用 Zeta 或 Resx 编辑的多语言资源文件。

希望这是您试图实现的目标。如果没有,请忽略此答案。

于 2013-09-16T10:49:16.597 回答
1

看看这是否有帮助;

foreach (string file in Directory.EnumerateFiles(fbd.SelectedPath, "*.Designer.cs"))
{
    int counter = 0;
    string line;
    Regex r = new Regex(@"this.label1.Text[ ]*[\=]{1}[ ]*[\""]{1}(?<StringValue>[a-zA-Z0-9 ]*)[\""]{1}[ ]*[\;]{1}");
    // Read the file and display it line by line.
    StreamReader CurrentFile = new StreamReader(file);
    while ((line = CurrentFile.ReadLine()) != null)
    {
        bool typeOne = line.Contains(".Text=");
        bool typeTwo = line.Contains(".Text =");
        if ((typeOne == true) || (typeTwo == true))
        {
          Match m=r.Match(line);
          string thevalueyouneed=m.Groups[1].Value;//This is what you need.
          //Do other things with this value.  
        }
        counter++;
    }
    CurrentFile.Close();
}

第一组是您需要的字符串。

于 2013-09-16T11:01:13.973 回答
0
    if ((typeOne == true) || (typeTwo == true))
    {
        int indexOfTheStartOfText = line.IndexOf(".Text", StringComparison.CurrentCulture);

        if (indexOfTheStartOfText != -1)
        {
            int textLength = (typeOne == true) ? ".Text=".Length : ".Text =".Length;
            int StartIndexOfActualText = indexOfTheStartOfText + textLength + "\"".Length;
            int EndIndexOfActualText = line.IndexOf('"', StartIndexOfActualText);

            string myText = line.Substring(StartIndexOfActualText, EndIndexOfActualText - StartIndexOfActualText);

        }
    }

计算StartIndexOfActualText需要更改为typeOnetypeTwo

于 2013-09-16T10:49:58.097 回答