У меня есть простой CSV-файл, который мне нужно проанализировать с переменной длиной столбца. CSV-файл для справки.
Я пытаюсь написать некоторые условия для анализа каждой строки и сохранения в дискретную строку, основываясь на том, какое значение содержит первый столбец в каждой строке.
Первая проблема, с которой я сталкиваюсь, заключается в том, что мой l oop начинает читать со строки 2. Это потому, что TextFieldParser предполагает наличие заголовка?
Вторая проблема заключается в том, что мои операторы if, кажется, оцениваются неправильно. Если я изменяю порядок строк в файле, мой первый, если в порядке, должен анализировать строки «Освещение» (независимо от того, какие строки в файле содержат «Освещение»).
Как примечание, я работаю в среде net 3,5
Вот что я получил до сих пор:
namespace CSV_Handler_Console
{
public class Program
{
public static void Main(string[] args)
{
//Console.WriteLine("Press Enter");
string filePath = "C:\\Users\\chris\\Desktop\\ConfigFile.csv";
string subLight = "Lighting";
string subPin = "PIN";
string subProc = "Processor";
string subFab = "Fabuloso";
string subQuirky = "Quirky";
//string[] fields = csvParser.ReadFields();
string category = string.Empty;
string index = string.Empty;
string load1 = string.Empty;
string load2 = string.Empty;
string load3 = string.Empty;
string load4 = string.Empty;
string value = string.Empty;
string light1 = string.Empty;
string light2 = string.Empty;
string light3 = string.Empty;
string pin = string.Empty;
string processor1 = string.Empty;
string processor2 = string.Empty;
string processor3 = string.Empty;
string processor4 = string.Empty;
string processor5 = string.Empty;
string processor6 = string.Empty;
string processor7 = string.Empty;
string processor8 = string.Empty;
string display1 = string.Empty;
string display2 = string.Empty;
string display3 = string.Empty;
string display4 = string.Empty;
string display5 = string.Empty;
string display6 = string.Empty;
string display7 = string.Empty;
string display8 = string.Empty;
var path = String.Format("{0}", filePath);
using (TextFieldParser csvParser = new TextFieldParser(path))
{
csvParser.SetDelimiters(new string[] { "," });
//csvParser.HasFieldsEnclosedInQuotes = false;
string row = csvParser.ReadLine();
while (!csvParser.EndOfData)
{
if (row.Contains(subLight))
{
string[] fields = csvParser.ReadFields();
category = fields[0];
index = fields[1];
load1 = fields[2];
load2 = fields[3];
load3 = fields[4];
load4 = fields[5];
if(index.Contains("1"))
{
light1 = row;
}
else if (index.Contains("2"))
{
light2 = row;
}
else if (index.Contains("3"))
{
light3 = row;
}
string rowData = string.Format("{0},{1},{2},{3},{4},{5}", category, index, load1, load2, load3, load4);
Console.WriteLine(rowData);
//Console.ReadLine();
}
else if (row.Contains(subPin))
{
string[] fields = csvParser.ReadFields();
category = fields[0];
index = fields[1];
value = fields[2];
string rowData = string.Format("{0},{1},{2}", category, index, value);
Console.WriteLine(rowData);
}
else if (row.Contains(subProc))
{
string[] fields = csvParser.ReadFields();
category = fields[0];
index = fields[1];
value = fields[2];
if (index.Contains("A"))
{
processor1 = row;
}
else if (index.Contains("B"))
{
processor2 = row;
}
else if (index.Contains("C"))
{
processor3 = row;
}
else if (index.Contains("D"))
{
processor4 = row;
}
else if (index.Contains("E"))
{
processor5 = row;
}
else if (index.Contains("F"))
{
processor6 = row;
}
else if (index.Contains("G"))
{
processor7 = row;
}
else if (index.Contains("H"))
{
processor8 = row;
}
string rowData = string.Format("{0},{1},{2}", category, index, value);
Console.WriteLine(rowData);
}
else if (row.Contains(subQuirky) || row.Contains(subFab))
{
string[] fields = csvParser.ReadFields();
category = fields[0];
index = fields[1];
value = fields[2];
if (index.Contains("A"))
{
display1 = row;
}
else if (index.Contains("B"))
{
display2 = row;
}
else if (index.Contains("C"))
{
display3 = row;
}
else if (index.Contains("D"))
{
display4 = row;
}
else if (index.Contains("E"))
{
display5 = row;
}
else if (index.Contains("F"))
{
display6 = row;
}
else if (index.Contains("G"))
{
display7 = row;
}
else if (index.Contains("H"))
{
display8 = row;
}
string rowData = string.Format("{0},{1},{2}", category, index, value);
Console.WriteLine(rowData);
}
else
{
Console.WriteLine("No Match Found");
}
}
Console.ReadLine();
}
}
}
Будем признательны за любые рекомендации.