2017-08-07 10 views
0

私はcsvファイルからC#の配列にデータを取得しようとします。 問題は、行が他のすべての値と同様にセミコロンで区切られていないことです。 これはすべてを分割するだけで、1行の最後の行と次の行の最初の値が1つの位置にマージされることを意味します。 どうやって同じ方法で分割しても構いませんが、csvファイルの改行(\ n)を考慮してください。c#csv data into array

私の考えでは、これまで私はちょうど適切にこれを行う方法を知っているドント、あなたは私を助けることができると思いますので、私はプログラミングに非常に新しいです

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

ようなものになるだろう。

+0

こんにちは@ダニエル。私たちがあなたを助けるために、あなたのコードとデータのサンプルを投稿できますか? –

+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()が最初に呼び出すことができます。次に、その配列の行を分割することができます。

string[] lines = File.ReadAllLines("MyFile.txt"); 
string[] splitted; 

foreach(string line in lines) 
{ 
    splitted = line.Split(';'); 
    ... 
} 

それとも、StreamReaderを使用することができます。

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