Как прочитать и разобрать определенное целое значение из текстового файла и добавить его в список в c #? - PullRequest
0 голосов
/ 19 мая 2011

Я хотел бы знать, как прочитать и проанализировать конкретное целочисленное значение из текстового файла и добавить его в список в c #.Например, у меня есть текстовый файл MyText.txt, например:

<>
101
192
-
399
~
99
128
-
366
~
101
192
-
403
~

И я хочу проанализировать целочисленное значение между '-' и '~' и добавить каждый из них в элементы списка впример:

#listBox1
399
366
403

Обратите внимание, что каждая строка значения разделена символом возврата каретки и перевода строки.И, кстати, это данные, передаваемые через последовательный порт RS-232 с микроконтроллера.Извините, я просто новичок в программировании на c #.Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 19 мая 2011

Вот способ сделать это с помощью LINQ:

        bool keep = false;
        listBox1.Items.AddRange(
            File.ReadLines("MyText.txt")
            .Where(l =>
            {
                if (l == "-") keep = true;
                else if (l == "~") keep = false;
                else return keep;
                return false;
            })
            .ToArray());
1 голос
/ 19 мая 2011

Вы можете использовать регулярные выражения, например, так:

var s = System.Text.RegularExpressions.Regex.Matches(stringtomatch,@"(?<=-\s*)[0-9]+\b(?=\s*~)");

Регулярное выражение в основном ищет число. Затем он проверяет символы позади, ищет дополнительные пробелы и тире (-). затем он сопоставляет все числа, пока не встретит другой несловарный символ. он проверяет наличие необязательного пробела и затем требуемый ~ (не знаю, как это называется). Кроме того, он возвращает только номер (без пробелов и символов).

Так что в основном этот метод возвращает список совпадений. затем вы можете использовать его так:

for (int i = 0; i < s.Count; i++)
{
    listBox1.Items.Add(s[i]);
}

EDIT:

опечатка в регулярном выражении и обновление цикла (по какой-то причине foreach не работает с MatchCollection).

вы можете попробовать запустить этот тестовый скрипт:

var stringtomatch = " asdjasdk jh kjh asd\n-\n123123\n~\nasdasd";
var s = System.Text.RegularExpressions.Regex.Matches(stringtomatch,@"(?<=-\s*)[0-9]+\b(?=\s*~)");
Console.WriteLine(stringtomatch);
for (int i = 0; i < s.Count; i++)
{
    listBox1.Items.Add(s[i]);
}
0 голосов
/ 19 мая 2011

Попробуйте

List<Int32> values = new List<Int32>();
bool open = false;
String[] lines = File.ReadAllLines(fileName);
foreach(String line in lines)
{
  if( (!open) && (line == "-") )
  {
    open = true;
  }
  else if( (open) && (line == "~") )
  {
    open = false;
  }
  else if(open)
  {
    Int32 v;
    if(Int32.TryParse(line, out v)) 
    {
      values.Add(v);
    }
  }
}
Listbox.Items.AddRange(values);

Это простой фрагмент кода с чтением файла, преобразованием в целое число (хотя вы можете остаться со строками) и обработкой списков. Вам следует начать с некоторых базовых учебников по .NET / C #.

Редактировать : Чтобы добавить значения в список, вы можете переключиться на values.ForEach(v => listbox.Items.Add(v.ToString()), если вы используете .NET 3.5. В противном случае сделайте foreach самостоятельно.

...