Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to skip first line while reading csv using streamreader

I have my following code to read values from CSV file and do some processing. I would like to skip the first row of the input CSV file as it contains header text but I'd want to add it back after the processing is done.

List<string> values = new List<string>(); using (StreamReader sr = new StreamReader(filePath)) {     while (sr.Peek() != -1)     {         string line = sr.ReadLine();         List<string> lineValues = line.Split(',').ToList();         var tempMinInt = 1;         var tempValue = 1;         var tempValInt = Convert.ToInt32(lineValues[4]);         if (lineValues[3] == "1876")         {             if (tempValInt % 60 != 0)             {                 tempMinInt = (tempValInt / 60) + 1;                 tempValue = tempMinInt * 30;             }             else             {                 tempMinInt = tempValInt / 60;                 tempValue = tempMinInt * 30;             }         }         else if (lineValues[3] == "1875")         {             if (tempValInt != 0)             {                 tempValue = 500;             }             else                 tempValue = 0;         }          if (lineValues[3] == "1876")         {             values.Add(string.Join(",", lineValues) + "," + "0" + "," + "30" + "," + tempValue.ToString());         }         else if (lineValues[3] == "1875")         {             values.Add(string.Join(",", lineValues) + "," + "1" + "," + "500" + "," + tempValue.ToString());         }      } } 

Sample input csv looks like this:

id, datetime, msisdn, num, duration 33083,2011-12-19 05:17:57+06:30,98590149,1875,258 33084,2011-12-19 05:22:28+06:30,98590149,1875,69 33085,2011-12-19 05:23:45+06:30,98590149,1875,151 33086,2011-12-19 05:30:21+06:30,98590149,1875,58 33087,2011-12-19 06:44:19+06:30,949826259,1875,66 

And I'd like to have my output like this:

id, datetime, msisdn, num, duration, type, ammount, total 33083,2011-12-19 05:17:57+06:30,98590149,1875,258,1,500,500 33084,2011-12-19 05:22:28+06:30,98590149,1875,69,1,500,500 33085,2011-12-19 05:23:45+06:30,98590149,1875,151,1,500,500 33086,2011-12-19 05:30:21+06:30,98590149,1875,58,1,500,500 
like image 610
Ye Myat Aung Avatar asked Feb 01 '12 09:02

Ye Myat Aung


People also ask

How do I not read the first line of a csv file in Python?

In Python, while reading a CSV using the CSV module you can skip the first line using next() method.

How do I skip the first line of a file in C#?

File. ReadAllLines(file); lines = lines. Skip(1).


2 Answers

Just read it first before you get into the loop. I'd do this:

using (StreamReader sr = new StreamReader(filePath)) {     string headerLine = sr.ReadLine();     string line;     while ((line = sr.ReadLine()) != null)     {          ...     } } 

(I don't like using Peek, personally.)

Then when you write out the output, start with headerLine.

like image 66
Jon Skeet Avatar answered Sep 18 '22 18:09

Jon Skeet


Just read the first line and do nothing with it...

List<string> values = new List<string>(); using (StreamReader sr = new StreamReader(filePath)) {     sr.ReadLine();     while (sr.Peek() != -1)     {         string line = sr.ReadLine();         List<string> lineValues = line.Split(',').ToList();          //***//     } } 
like image 38
gdoron is supporting Monica Avatar answered Sep 19 '22 18:09

gdoron is supporting Monica