我正在为我爸爸制作一个.CSV解析器,因为他正在从他购买商品的地方收到一个几乎无法读取的文件。
看,我的问题是这样的:
直到现在我一直在使用StreamReader来读取我的文件,并显示它我正在使用DataGridView。我的代码如下:http://dumptext.com/E9GcAfyW
编辑:问题是这样的:当我尝试用我当前的代码解析文件时,我得到一个错误,说明数组对于指定的列太长,从而崩溃。这是因为.CSV文件使用“,”作为分隔符,并且仍然使用逗号作为十进制值的分隔符(例如25,3)。另一个问题是因为当我解析文件的一块时,它运行良好,但所有元素都用引号括起来,我希望从DataGridView中删除它。 这是我的窗口,当我删除额外的逗号,以便解析器工作: http://puu.sh/fbXlt/35aaf37e33.png答案 0 :(得分:0)
我有一个类似的CSV文件,最后我使用TextFieldParser来提取数据。您仍然需要解析CSV列数据:
private void GetCSVData(string CsvFileFullPath)
{
// Make sure that you add the Microsoft.VisualBasic.FileIO Namespace
using (var lines = new TextFieldParser(CsvFileFullPath))
{
lines.HasFieldsEnclosedInQuotes = true;
lines.SetDelimiters(",");
lines.TrimWhiteSpace = true;
try
{
while (!lines.EndOfData)
{
string[] csvLineCols = lines.ReadFields();
for (int i = 0; i < csvLineCols.Count(); i++)
{
Console.WriteLine(csvLineCols[i].ToString());
}
}
}
catch
{ }
}
}
答案 1 :(得分:0)
如果您需要将其绑定到DataGrid,最好将其解析为List。如果您需要数据类型安全,则由您决定如何相应地解析数据。
此示例使用NuGet包CsvHelper。
WebClient webClient = new WebClient();
TextReader textReader = new StreamReader(new MemoryStream(
webClient.DownloadData("http://selfservice.diges.dk:9080/selfservice/download/prisbog/VARPOST.CSV")));
var csvReader = new CsvParser(textReader);
List<Record> records = new List<Record>();
while (true)
{
var row = csvReader.Read();
if (row == null)
{
break;
}
records.Add(new Record()
{
Column1 = row[0],
Column2 = row[1],
Column3 = row[2],
Column4 = row[3],
Column5 = row[4],
Column6 = row[5],
Column7 = row[6]
});
}
public class Record
{
public string Column1 { get; set; }
public string Column2 { get; set; }
public string Column3 { get; set; }
public string Column4 { get; set; }
public string Column5 { get; set; }
public string Column6 { get; set; }
public string Column7 { get; set; }
}