разбить строку из текстового файла в другой список - PullRequest
0 голосов
/ 09 марта 2012

Привет, я знаю, что название может показаться немного запутанным, но я читаю в текстовом файле с большим количеством строк данных

Example
12345 Test 
34567 Test2

Я читаю по тексту по 1 строке за раз и добавляю в список

using (StreamReader reader = new StreamReader("Test.txt"))
                    {

                        string line;
                        while ((line = reader.ReadLine()) != null)
                        {
                            list.Add(line);

                    }

                }

как мне тогда отделить 1234 от теста, чтобы я мог получить только первый столбец данных, если мне нужно, например, list (1) .pars [1] будет 12345 и list (2).pars [2] будет test2

я знаю, это звучит туманно, но я надеюсь, что кто-то там понимает

Ответы [ 5 ]

2 голосов
/ 09 марта 2012

Может быть что-то вроде этого:

string test="12345 Test";
var ls= test.Split(' ');

Это даст вам массив строк.Вы можете получить их с помощью ls[0] и ls[1].

Если вы просто выберете 12345, то ls[0] - тот, который вы выберете.

1 голос
/ 09 марта 2012

Если у вас есть список строк [], вы можете просто сделать это:

        var list = new List<string[]>();
        using (StreamReader reader = new StreamReader("Test.txt"))
        {
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                list.Add(line.Split(' '));
            }
        }

        string firstWord = list[0][0]; //12345 
        string secondWord = list[0][1]; //Test
1 голос
/ 09 марта 2012

Если у вас есть текстовая строка, вы можете использовать метод Split(), чтобы разбить ее на несколько частей. Если вы уверены, что каждое слово (разделенное одним или несколькими пробелами) является столбцом, вы можете просто написать:

string[] columns = line.Split(' ');

Существует несколько перегрузок этой функции, вы можете указать, пропускаются ли пустые поля (например, вы можете иметь, например, columns[1] пустым в строке, состоящей из 2 слов, но разделенных двумя пробелами). Если вы уверены в количестве столбцов, вы также можете установить это ограничение (поэтому, если какой-либо текст после последнего столбца будет рассматриваться как одно поле).

В вашем случае (добавить в список только первый столбец) вы можете написать:

if (String.IsNullOrWhiteSpace(line))
 continue;

string[] columns = line.TrimLeft().Split(new char[] { ' ' }, 2);
list.Add(columns[0]);

Первая проверка - пропустить пустые строки или строки, состоящие только из пробелов. TrimLeft() - удалить пробелы из начала строки (если есть). Первый столбец не может быть пустым (потому что TrimLeft(), поэтому вам даже не нужно использовать StringSplitOptions.RemoveEmptyEntries с дополнительным if (columns.Length > 1). Наконец, если файл достаточно мал, вы можете прочитать его в памяти одним вызовом File.ReadAllLines() и упростить все с небольшим количеством LINQ:

list.Add(
 File.ReadAllLines("test.txt")
 .Where(x => !String.IsNullOrWhiteSpace(x))
 .Select(x => x.TrimLeft().Split(new char[] { ' ' }, 2)[0]));

Обратите внимание, что с первым параметром вы можете указать более одного допустимого разделителя.

0 голосов
/ 09 марта 2012
  var splitted = System.IO.File.ReadAllLines("Test.txt")
      .Select(line => line.Split(' ')).ToArray();
  var list1 = splitted.Select(split_line => split_line[0]).ToArray();
  var list2 = splitted.Select(split_line => split_line[1]).ToArray();
0 голосов
/ 09 марта 2012

Если у вас несколько пробелов

Regex r = new Regex(" +");
string [] splitString = r.Split(stringWithMultipleSpaces);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...