2016-08-17 4 views
0

CSVファイルを読み込み、データをデータベースにインポートするオブジェクトに保存しようとしています。 CSVファイルには、以下の情報を保持している:CSVを分割してオブジェクトに保存する

Gas Sensor,GS-NO-001,2 
Gas Sensor,GS-O2-002,2 
Vig,VG-LR-001-FG-003,1 

私はこれでファイルを読み込む:

public static void CSVReader() 
{ 
    var reader = new StreamReader(File.OpenRead("C:\\PO-02.csv")); 
    reader.ReadLine(); 
    int counter = 0; 
    string line; 
    System.IO.StreamReader file = new System.IO.StreamReader("C:\\PO-02.csv"); 
    while ((line = file.ReadLine()) != null) 
    { 
     Console.WriteLine(line); 
     counter++; 
    } 
    file.Close(); 
} 

をしかし、私は.Split(',')は、実際にデータを分割するために、この読み出し方法で動作させることはできません。私はstring[]にデータを保存するように試みただけでなく、ReadLine().Split(',')を使用しました。

私も

public class files 
    { 
     public string product_name { get; set; } 
     public string part_number { get; set; } 
     public string quantity { get; set; } 
    } 

オブジェクトに情報を入力したいと思います私の質問は、私は、データを分割し、オブジェクトに保存することができますどのようにでしょうか?

+0

Split()を使用するとどうなりますか? –

+0

@BenjaminDroletは 'System.String []'の出力を取得します。しかし、出力を駄目にして正しく分割しているかどうかわかりません。 – Evan

+0

.Split( '、') 'は動作できません(http:// www .secretgeek.net/csv_trouble)。 CSVは引用符とエスケープ文字を許可し、 'Split'はそれを行いません。テスト済みで、デバッグされたパーサーは、すでにプロジェクトにドロップできます。それらを使用してください。 –

答えて

3

私は、CsvHelperまたはこれに類するプロジェクトを使用することをお勧めします。引用符をエスケープしたり、さまざまな種類のデリミタを扱うなど、CSVファイルを読み込むために必要なことはたくさんあります。

0

は、たぶん私は何かが欠けていますが、これはあなたのために動作しませんなぜ私はわからない:

public static List<string[]> CSVReader() 
{ 
    using (var reader = new StreamReader(File.OpenRead("C:\\PO-02.csv")) 
    { 
     var csv = new List<string[]>(); 
     reader.ReadLine(); 
     int counter = 0; 
     string line; 
     using (StreamReader file = new StreamReader("C:\\PO-02.csv")) 
     { 
      while ((line = file.ReadLine()) != null) 
      { 
       list.Add(line.Split(',')) 
       counter++; 
      } 
     } 
     return list; 
    } 
} 

P.S. CSVファイルの解析は、単純にコンマで区切るよりも少し複雑です。あなた自身のパーサーのすべてのルールを読みたいなら、Wikipediaはpretty good listを持っています。あなたはまた、あなたに「ファイル」オブジェクトのリストを返します次の操作を行うことができ

0

public static List<files> CSVReader() 
    { 
     var reader = new StreamReader(File.OpenRead("C:\\PO-02.csv")); 
     reader.ReadLine(); 
     int counter = 0; 
     string line; 
     System.IO.StreamReader file = new System.IO.StreamReader("C:\\PO-02.csv"); 

     // Create a list to hold your 'files' objects 
     List<files> items = new List<files>(); 
     while ((line = file.ReadLine()) != null) 
     { 
      Console.WriteLine(line); 
      // Add a new 'files' object to your list by passing it the split csv line 
      string[] data = line.split(","); 
      items.Add(new files(data)); 
      counter++; 
     } 
     file.Close(); 
     return items; 
    } 

をもちろんこれは、あなたがこのようになりますあなたの「ファイル」クラスのコンストラクタを持っている前提としています

public files(string[] data) 
{ 
    product_name = data[0]; 
    part_number = data[1]; 
    quantity = data[2]; 
} 
0

これは、Linqを使用してのみ実行できます。

var result = File.ReadLines("C:\\PO-02.csv") 
       .Select(line => { 
        var chunk = line.Split(','); 
        return new files 
        { 
         product_name = chunk[0], 
         part_number = chunk[1], 
         quantity = chunk[2] 
        }; 
       }).ToList(); 
+0

すべてのテキストを読み込み、 '\ n'で分割するのではなく、' File.ReadLines'を使うことができます。 .NET 4.0以降。 – Koopakiller

+0

@Koopakiller:そうです。私は不要なオーバーヘッドを加えました。私はコードを変更しました。 –

関連する問題