Combobox загрузка текста с невидимым переводом строки (\ r) или переводом строки (\ n) - PullRequest
0 голосов
/ 25 мая 2018

Я использую 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 ]

0 голосов
/ 25 мая 2018

Мой подход

    // 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
0 голосов
/ 25 мая 2018

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...