Jeg ville personligt håndkode CSV læseren med en StreamReader og derefter gemme instanser af et objekt, der repræsenterer en række, i en Liste.
Her er et eksempel, hvor din CSV indeholder 3 kolonner, der er adskilt med ";" og har 3 forskellige typer(int, double, string).
// Klasse, der indeholder felter svarende til kolonne
// opbygningen i CSV filen. I dette tilfælde har CSV filen 3
// kolonner
public class MyRow
{
public int MyInteger { get; private set; }
public int MyDouble { get; private set; }
public int MyString { get; private set; }
public MyRow(int myInteger, double myDouble, string myString)
{
MyInteger = myInteger;
MyDouble = myDouble;
MyString = myString;
}
}
public class DataReader
{
private static List<MyRow> ReadInput(string csvFilePath)
{
// reads the Batch Shortest Path input from CSV
List<MyRow> data = new List<MyRow>();
StreamReader reader = new StreamReader(csvFilePath);
// Uncomment this line if you have a header
// reader.ReadLine(); // skip header line.
string line;
while ((line = reader.ReadLine()) != null)
{
string[] splitLine = line.Split(new string[1] { ";" }, StringSplitOptions.None);
int firstColumn = string.IsNullOrEmpty(splitLine[0]) ? 0 : Int32.Parse(splitLine[0]);
double secondColumn = string.IsNullOrEmpty(splitLine[1]) ? 0 : Double.Parse(splitLine[1]);
string thirdColumn = string.IsNullOrEmpty(splitLine[3]) ? 0 : splitLine[2].ToString();
data.Add(new MyRow(firstColumn, secondColumn, thirdColumn));
}
reader.Close();
return data;
}
}
Så kan du løbe alle dine rækker igennem ved at sige
foreach(MyRow row in ReadInput(@"
C://data.csv"))
{
// Validate the row
if(row.MyInteger > 0)
...
}