1

改行文字 '\n' に基づいて文字列を分割しようとしています

この区切り文字を resx ファイルに次のように保存しています。

Name: RecordDelimiter
Value: \n

この値を .resx ファイルから取得すると、常に '\n' として返され、分割関数は正確な結果を返しません。
ただし、文字列「\n」を試してみると、正常に動作しています

ここに私のコードがあります -

private static void GetRecords()
{
    string recordDelimiter = @"\n";
    string recordDelimiter1 = "\n"; // only this returns correct result
    string recordDelimiter2 = ResourceFile.RecordDelimiter; //from resx file, returns \\n :-(
    string recordDelimiter3 = ResourceFile.RecordDelimiter.Replace("\\", @"\"); //try replacing \\n with \n

    string fileOutput = "aaa, bbb, ccc\naaa1, bbb1, ccc1\naaa2, bbb2, ccc2";

    string[] records = fileOutput.Split(new string[] { recordDelimiter }, StringSplitOptions.None);
    string[] records1 = fileOutput.Split(new string[] { recordDelimiter1 }, StringSplitOptions.None);
    string[] records2 = fileOutput.Split(new string[] { recordDelimiter2 }, StringSplitOptions.None);
    string[] records3 = fileOutput.Split(new string[] { recordDelimiter3 }, StringSplitOptions.None);

    int recordCount = records.Count();  //returns 1
    int recordCount1 = records1.Count();  //returns 3 -- only this returns correct result
    int recordCount2 = records2.Count();  //returns 1
    int recordCount3 = records3.Count();  //returns 1
}

区切り文字を resx ファイルに保持したい。
何か不足している場合は、誰でもご案内できますか?

ありがとうございました!

4

1 に答える 1

1

2番目の方法が正しい結果を返す唯一の方法である理由は、区切り文字が改行文字である唯一の方法であるためです。"\n" は C# の改行文字の単なる表現であり、@"\n" は文字 n が後に続くスラッシュのリテラル文字列です。つまり、@"\n" != "\n" です。

したがって、区切り文字を resx に保存する場合は、そこに保存する方法のコードを示す必要があります。現在、実際の制御文字ではなく、リテラル文字列として保存されているようです。

1 つの (非常に大まかな) 修正方法は、リソースから文字列を取得し、ファイルに格納されている内容に応じて .Replace(@"\n", "\n") を呼び出すことです。より良い解決策を見つけた場合、または質問を更新した場合は、回答を更新します。

編集:

わかりました、ややギミックな解決策を見つけました。中心的な問題は、\n だけをどのように書くかということですよね? さて、テキスト ボックスと次のコードを使用して、テスト プロジェクトを作成しました。

this.textBox1.Text = "1\n2";

このプロジェクトを起動し、テキスト ボックス内のすべてのテキストを選択して、クリップボードにコピーします。次に、実際のプロジェクトのリソースに移動し、クリップボードから値を貼り付けます。次に、制御文字の周囲の数字を慎重に削除します。そして、リソース文字列内の \n 制御文字です。(数字の理由は、テキスト ボックスから制御文字だけを選択することができなかったためです。)

于 2012-08-09T12:18:11.610 に答える