我需要将看起来像这样的文件读入数据表:
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);
}
}
但这不起作用,因为我有尾随空格和列之间的多个空格
答案 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);
这适用于所有重载。