bugfix> c# > 投稿

私はC#、Visual Studio 2017、winforms、 テキストファイルからテキストを読み込んでいるコンボボックスに問題があり、コンボボックスからテキストの別の行を選択すると、そこに改行(\ r)が追加されます、改行(\ n)のように見えます。

これは、問題のコンボボックスと非表示のラインフィード(\ r)です。 https://i.stack.imgur.com/Xhymg.png

アプリケーションをデバッグすると、そのテキスト行の後に\ rが追加されます。 https://i.stack.imgur.com/km4F3.png

テキストを保存するときにEncoding.Unicodeを使用しようとしましたが、役に立ちませんでした。

//This is how I save text to a file
private void SaveVarNameToFile()
{
    using (var writer = File.AppendText("savedVarName.txt"))
    {
        writer.Write(comboBox1.Text, Encoding.Unicode);
    }
}
//This is how I load the text to combobox
private void LoadStrTextFromFile(string fileName, ComboBox cb)
{
   if (!File.Exists(fileName))
            return;
   using (StreamReader reader = new StreamReader(fileName))
   {
      string x = reader.ReadToEnd();
      string[] y = x.Split('\n');
      foreach (string s in y)
      {
         cb.Items.Add(s);
      }
      reader.Close();
    }
}

テキストファイルの内容:

BOOST_ROOT
NUMBER_OF_PROCESSORS
OS
PROCESSOR_LEVEL

その厄介な小さなものを削除する方法を考え出すのに苦労しています。おそらく簡単な修正方法があります。 誰かが私に方法を見つけたり、それを削除したり、\ rをロードしないようにコードを変更したりするのを手伝ってもらえたら、とても感謝しています。ありがとう。

回答 2 件
  • Windowsは、\ r \ nを使用してテキスト行の終わりをマークします。 * NIXとMacは異なるマーカーを使用します。ここで、さまざまなシステムがこれをどのように処理するかを見ることができます。

    行の分割を手動で処理する代わりに、これを行うための組み込み機能(つまりFile.ReadLines())を使用することをお勧めします。

    private void LoadStrTextFromFile(string fileName, ComboBox cb)
    {
        if (!File.Exists(fileName))
            return;
        foreach (string line in File.ReadLines(fileName))
            cb.Items.Add(line);
    }
    
    

  • 私のアプローチ

       // remember to use double back slash on the path
        string[] text  = System.IO.File.ReadAllLines("C:\\test.txt").Where(line => !string.IsNullOrWhiteSpace(line)).Distinct().ToArray(); // read the file into a string array with removing the duplicates and empty lines
        comboBox1.Items.AddRange(text); // finally fill in the combobox with the array
    
    

あなたの答え