1

this.label1.Text = "Code Smart";Designer.cs ファイルに

.Designer.cs現在、ソリューション フォルダーに保存されているすべてのファイルを読み込んでいます。

今、私はこれらの条件に一致させたい:

  1. 文字列内.Text=または.Text =一致するかどうか。
  2. その文字列からテキストを取得したいのですが、"" (Double Quotes)それは次のことを意味します:Code Smart

背後にあるアイデアは.Text、ファイル内のすべてのデータを収集することです。そのため、データが一致し、そのテキストの値が得られたらCSV、翻訳用にエクスポートします。

誰かが私にこれを手伝ってもらえますか。お願いします

ADD1

私は ADD1 にいくつかの変更を加え、ADD2 に改訂しました。親切にチェックしてコメントしてください。ありがとう

ADD2:

最後に、これに到達して、二重引用符で囲まれた文字列を取得する方法を教えてください。

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

これが役立つかどうかを確認してください。

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 に答える
1

次に、翻訳用に CSV にエクスポートします。

目標が多言語 GUI を持つことである場合、この方法はお勧めしません。Zeta Resource EditorまたはResx Resource Translatorを使用してみてください。

このリソースも確認してください:ウォークスルー: ローカライズ Windows フォーム。Zeta または Resx で編集できる複数の言語リソース ファイルを作成する方法について説明します。

これがあなたが達成しようとしたものであることを願っています。そうでない場合は、この回答を無視してください。

于 2013-09-16T10:49:16.597 に答える
1

二重引用符のネストがないと仮定すると、次の正規表現を使用できます。

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

イデオンデモ

于 2013-09-16T10:51:42.120 に答える
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 に答える