У меня есть ок. 150 текстовых файлов, содержащих данные, которые мне нужно вставить в таблицы MS SQL. Когда я прочитал строки, я прочитал первые 4 символа, чтобы определить данные в этой строке. Строка, следующая за текущей строкой, может быть или не быть данными, относящимися к текущей строке (я могу знать это только после того, как прочитал строку, поскольку нет идентификаторов связывания). Единственный способ рассказать о следующей строке - это новая запись, чтобы прочитать код строки. Вот пример данных (это данные, считываемые из кассового аппарата). Я прокомментировал каждую строку, чтобы объяснить, что это такое.File.ReadLines с линией Peek Ahead
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 для вставки данных, как он будет сортировать, связывающие идентификаторы для меня. Или я мог бы создать свои собственные классы и самостоятельно назначить идентификаторы. Единственное требование, которое создает для меня проблему, заключается в том, что у записи SaleHeader должен быть флаг «Нет продажи», кажется достаточно простым и, вероятно, является ...
Однако в любом случае моя проблема возникает при чтении текстовых файлов ....
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» на следующей строке при чтении файлов в строках?
Если кто-нибудь может видеть, что проще было получить эти данные в базу данных, мне было бы интересно услышать!
взгляните на [этот ответ] (http://stackoverflow.com/questions/842465/reading-a-line-from-a-streamreader-without-consuming) или [этот ответ] (http: // stackoverflow.com/questions/13548443/textreader-and-peek-next-line) – Jonesopolis
В качестве альтернативы вы могли бы вспомнить предыдущую строку. – juharr