从C#中的csv文件读取数据时,如何跳过预告片中的数据?

时间:2017-11-26 03:49:27

标签: c# csv

我正在读取.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类下的数组中。 谢谢!

0 个答案:

没有答案