2017-08-07 71 views
0

我试图从csv文件中获取数据到C#中的数组。 问题是,行不像所有其他值一样用分号隔开。 这意味着只是将它们全部分开,一行的最后一行和下一行的第一个值合并成一个位置。 我怎样才能以相同的方式拆分它,但在csv文件中解释我猜的新行(\ n)?c#csv数据到数组

我的想法至今会像

String[] xyz; 
    For Loop to iterate over the data 
     If semicolon, split to the array 
     else if \n(?) split into the array. 

我很新的节目,所以我只是鸵鸟政策知道如何正确地做到这一点,希望你能帮助我。

+0

Hi @danielus。您可以发布您的代码和数据样本,以便我们可以帮助您。 –

+0

阅读[RFC 4180](https://tools.ietf.org/html/rfc4180)获取CSV上的整个图片,然后搜索能够根据RFC 4180 –

回答

0

解析CSV没有比Lumenworks框架更好的选择。它不仅易于使用,而且重量轻,性能世界一流。您可以从的NuGet https://www.nuget.org/packages/LumenWorksCsvReader/

获得库和解析像

using (CsvReader csv = new CsvReader(new StreamReader(fileStream, Encoding.Default), true)) 
    { 
    foreach (var record in csv) 
    { 
      //PARSE ROWS ONE BY ONE AND GET COLUMN VALUE BY INDEX 
    } 
    } 
+0

处理CSV数据的库。这听起来像是一个很好的解决方案。虽然如果我尝试在Visual Studio的Nuget包管理器中安装LumenWorks CSV Reader软件包,它会给我一个错误并回滚安装。不知道如何解决这个问题... –

+0

http://api.256file.com/lumenworks.framework.io.dll/en-download-5182.html你可以从这里下载 –

+0

这似乎是框架问题,你可能会发现下面的链接有用,因为它有不同版本的工作项目和DLL https://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader –

0

您的CSV如果文件不是太大,你可以调用File.ReadAllLines()第一个拿到的文本行的阵列。然后,您可以拆分该数组中的行。可以使用。

using (StreamReader sr = File.OpenText("MyFile.txt")) 
{ 
    string line; 
    string[] splitted; 

    while ((line = sr.ReadLine()) != null) 
    { 
    splitted = line.Split(';'); 
    ... 
    } 
} 
0

您可以使用开源库来加载csv文件。它们中有多个FileHelpers,CSVReader和Cinchoo ETL。

Cinchoo ETL有CSVReader。一个简单,快速和基于流的CSV解析器。

foreach (dynamic rec in new ChoCSVReader("test.csv").WithFirstLineHeader()) 
{ 
    Console.WriteLine(rec.COMPANY_NAME); 
    Console.WriteLine(rec.COMPANY_TYPE); 
}