我正在读取.csv文件中的数据到Visual Studio,我希望程序跳过预告片行(因为它包含来自文件其余部分的不同数据,并抛出“输入不正确”格式异常“)。
我能够在while循环前使用此代码跳过Header行:
//Skip first line in file
string headerLine = sr.ReadLine();
但显然我不能在我的Trailer系列中使用相同的技术,因为这需要我通过循环。我怎么能做到这一点?
编辑:这是来自csv文件的数据(标题和预告行分别以H& T开头,所有其他行以“行动代码”A,C或D开头):
H UpdateFile 4/1/2017
C 10006 4846482 106 Lyle Landley 432 Ferrari Spider 1000 5 30000 2/4/2017 2/28/2017
A 10010 2323232 110 Jerry Seinfeld 555 Porsche 911 Targa 345 5 10532 3/1/2017 3/8/2017
D 10012 4689292 112 Michael Dukakis 865 AM General Humvee 150 4 20000 3/3/2017 3/5/2017
A 10013 6661313 113 Jason Vorhees 123 Jeep Wrangler 500 3 605 3/4/2017 3/10/2017
C 10018 6482648 117 Stephen Curry 555 Mercedes AMG 321 5 4566 3/14/2017 3/17/2017
D 10019 1111111 104 Robert Knight 865 Ford Boss 302 764 5 12004 3/15/2017 3/21/2017
C 10020 1112222 118 Allen Iverson 669 Tesla Model S 3333 4 3533 4/1/2017 4/9/2017
T UpdateFile 4/1/2017 7 31
此外,以下是上述代码段的方法:
public static void ReadUpdateFile(ref Car[] updates, ref int updateCount)
{
string path = "UpdateFile.csv";
FileStream fs = new FileStream(path, FileMode.Open);
//Figure this out
StreamReader sr = new StreamReader(fs);
//Skip first line in file
string headerLine = sr.ReadLine();
//How to skip last line in file?
while (sr.Peek() > -1)
{
string line = sr.ReadLine();
string[] updateArray = line.Split(',');
DateTime rentInDate = DateTime.Parse("01/01/9999");
DateTime rentOutDate = DateTime.Parse("01/01/0001");
bool isValid = DateTime.TryParse(updateArray[12], out rentInDate);
bool isValidToo = DateTime.TryParse(updateArray[11], out rentOutDate);
//I'm using these new/temporary DateTime variables to read in the DateTime data from the excel sheet, for some reason VS had a problem doing this
//It threw an exception relating to the data not being in the correct format
if (isValid)
{
updates[updateCount] = new Car(char.Parse(updateArray[0]), int.Parse(updateArray[1]),
updateArray[2], new Customer(int.Parse(updateArray[3]), updateArray[4]), int.Parse(updateArray[5]),
updateArray[6], updateArray[7], int.Parse(updateArray[8]), int.Parse(updateArray[9]),
decimal.Parse(updateArray[10]), rentOutDate, rentInDate);
WriteLine(updates);
ReadKey();
}
else
{
rentInDate = DateTime.MinValue;
updates[updateCount] = new Car(char.Parse(updateArray[0]), int.Parse(updateArray[1]),
updateArray[2], new Customer(int.Parse(updateArray[3]), updateArray[4]), int.Parse(updateArray[5]),
updateArray[6], updateArray[7], int.Parse(updateArray[8]), int.Parse(updateArray[9]),
decimal.Parse(updateArray[10]), rentOutDate, rentInDate);
}
updateCount++;
}
}
为了澄清,我将csv数据存储在我创建的Car类下的数组中。 谢谢!