readtoend c# asp.net streamreader

c# - readtoend - Cómo saltar la primera línea al leer CSV usando streamreader



streamreader readtoend (4)

Algo como esto:

bool isFirst=true; using (StreamReader sr = new StreamReader(filePath)) { while (sr.Peek() != -1) { if(isFirst) { isFirst=false; continue; } } }

Tengo mi siguiente código para leer los valores del archivo csv y hacer algún procesamiento. Me gustaría omitir la primera fila del archivo csv de entrada, ya que contiene el texto del encabezado, pero me gustaría volver a agregarlo una vez que el procesamiento haya terminado.

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()); } } }

Ejemplo de entrada csv se ve así:

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

Y me gustaría tener mi salida como esta:

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


Puede leer la primera línea antes de su bucle while y almacenarla, o puede usar un campo de contador / booleano para verificar en qué parte del archivo se encuentra.


Solo léelo primero antes de entrar en el bucle. Yo haría esto:

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

(No me gusta usar Peek, personalmente).

Luego, cuando escriba la salida, comience con headerLine .


Solo lee la primera línea y no hagas nada con ella ...

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(); //***// } }