我有约。包含我需要插入MS SQL表的数据的150个文本文件。当我读到这些行时,我读了前4个字符来确定该行中的数据。当前行之后的行可能是也可能不是与当前行有关的数据(由于没有链接标识符,我只能在读取该行时知道这一点)。告诉下一行的唯一方法是新记录是读取行代码。这是一个数据示例(它是从收银机读取的数据)。我已经评论了每一行来解释它是什么。
0001,00,111008,05,0909,000702,0003,0000,0001,0000,0000,0000,0000,2 //0001 = Sales header**
1C00 //1C00 = No Sale (and relates to the Sales Header above)
0001,00,111008,05,0934,000702,0004,0000,0001,0000,0000,0000,0000,2 //0001 = Sales header
1C00 //1C00 = No Sale (and relates to the Sales Header above)
0001,00,111008,05,0945,000702,0005,0000,0001,0000,8000,0000,0000,4 //0001 = Sales header
0200,1,19781849813891,1.000,5.99,5.99,000000,00,00,01,10,10 //0200 = Sales Detail line
1401,5.99,0000,000000,00 //1401 = Card Sale (operator press wrong button as its followed by change given record)
1501,0.00,02,01,0000,000000,00 //1501 - Change Given
0001,00,111008,00,1327,000802,0103,0000,0003,0000,8000,0000,1000,7 //0001 = Sales header
0200,1,19780857223968,1.000,7.99,7.99,000000,00,00,01,10,10 //0200 = Sales Detail line
0200,1,19781847708427,1.000,7.99,7.99,000000,00,00,01,10,10 //0200 = Sales Detail line
0502,-10.00,-1.60,00,FF //0502 - Discount applied to complete sale
5101,14.38,2.40,11.98 //5101 - Sub Total after discount applied
1201,15.00,0000,000000,00 //1201 - Cash Sale
1501,0.62,00,01,0000,000000,00 //1501 - Change Given
我的计划是创建一个架构并使用EF来插入数据,因为它会为我排序链接ID。或者我可以创建自己的类并自己分配ID。为我创造问题的一个要求是SaleHeader记录必须有一个" No Sale"国旗,似乎很简单,可能是......
然而,无论哪种方式,我的问题出现在阅读文本文件....
foreach (string file in Directory.GetFiles(@"C:\Temp2\Tills\"))
{
foreach (string line in File.ReadLines(@file))
{
string[] linearr = line.Split(',');
此时我需要知道下一行的数据。
if(linearr[0] == "0001")
{
//New sale
}
else if (linearr[0] == "0200")
{
//Sale details line
}
else if (linearr[0] == "0502")
{
//Sale discount line
}
}
}
我可以使用File.ReadAllLines
将所有行读入字符串数组,这样可以轻松访问下一行。其中一些文件相当大,因此逐行处理它们而不必先读取整个文件。
问题是:无论如何都要提前" Peek Ahead"在逐行读取文件时在下一行?
如果有人能够看到更简单的将数据存入数据库,我将有兴趣听到!
答案 0 :(得分:0)
如果是从Google搜索中找到的话......
我改变了方法并使用了ReadAllLines
。我将整个文件读入一个字符串数组,然后拆分每一行以获取值。我自己设置了Id,如果我找到了我想要的价值,我就会设置上一个标题" no sale"值。然后,我将所有数据加载到数据表中,并使用SqlBulkCopy
将数据插入数据库。我将现有应用程序的时间从18小时减少到处理38个文件到18分钟处理170个文件。很高兴。