C # чтение в текстовом файле в Dataatable - PullRequest
1 голос
/ 20 декабря 2010

Мне нужно прочитать файлы, которые выглядят так, в виде данных:

A02   BLANK031  
B02   F357442   
C02   F264977   
D02   BLANK037  
E02   F272521   
F02   E121562   
G02   F264972   
H02   F332321   
A03   E208240   
B03   F313854   
C03   E229786   
D03   E229787   
E03   F307584   
F03   F357478   

У меня есть странный разделитель и некоторые пробелы. как бы мне прочитать это в таблицу данных таким образом, чтобы первый столбец содержал «A02», «B02» ... а второй столбец содержал «BLANK031», «F357442» и т. д.

В настоящее время я делаю:

DataTable dt = new DataTable();
                using (TextReader tr = File.OpenText(batchesAddresses[index]))
                {
                    string line;
                    while ((line = tr.ReadLine()) != null)
                    {

                    string[] items = Regex.Split(line, ' ');
                    if (dt.Columns.Count == 0)
                    {
                        // Create the data columns for the data table based on the number of items
                        // on the first line of the file
                        for (int i = 0; i < items.Length; i++)
                            dt.Columns.Add(new DataColumn("Column" + i, typeof(string)));
                    }
                        dt.Rows.Add(items);

                    }
                }

но это не работает, потому что у меня есть конечные пробелы и несколько пробелов между столбцами

Ответы [ 3 ]

1 голос
/ 20 декабря 2010

Измените свое регулярное выражение на что-то вроде: (\w{3})\s+(\w{5,10}). Это означает, что необходимо собрать 3 слова (включая цифры) в группу 1, найти один или несколько пробельных символов, а затем записать 5-10 слов в группу 2.

Затем выполните:

Regex r = new Regex("(\w{3})\s+(\w{5,10})");
Match m = r.Match(line);
string col1 = m.Groups[1].Value;
string col2 = m.Groups[2].Value;
1 голос
/ 20 апреля 2011

Ошибка, связанная с System.StringSplitOptions, является ошибкой приведения в компиляторе. Добавьте строку перед оператором split, которая определяет требуемые StringSplitOptions, а затем используйте переменную в операторе split.

static readonly char[] space = { ' ' };
static readonly StringSplitOptions options =  StringSplitOptions.RemoveEmptyEntries;
...
string[] items = line.Split(space, options);

Это должно работать для всех перегрузок.

1 голос
/ 20 декабря 2010

Если вы используете:

static readonly char[] space = { ' ' };
...
string[] items = line.Split(space, StringSplitOptions.RemoveEmptyEntries);

вы должны получить 2 ожидаемых значения, хотя может быть желательным что-то более избирательное, особенно если в правой части может быть пробел в середине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...