c#将文本文件读入datatable

时间:2010-12-20 18:15:19

标签: c# delimiter

我需要将看起来像这样的文件读入数据表:

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 个答案:

答案 0 :(得分:1)

如果您使用:

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

你应该得到你期望的2个值,尽管可能需要更具选择性的值,特别是如果右侧可能包含中间的空格。

答案 1 :(得分:1)

将正则表达式更改为:(\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;

答案 2 :(得分:1)

有关System.StringSplitOptions的错误似乎是编译器中的转换错误。在split语句之前添加一行,用于定义所需的StringSplitOptions,然后在split语句中使用该变量。

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

这适用于所有重载。