2016-10-09 19 views
0

車、その呼び出しのcar.txtに関するデータを格納するテキストファイルがあります。私はこのテキストファイルを読んで、それぞれの車のセクションをそれぞれ分類したいと思っています。最終的には、この情報を二重にリンクされたリストに追加したいと考えています。これまで私が試したことは、フォーマット例外または範囲外例外のいずれかを与えています。 は、これは私が構造体にデータを読み込むしようと場所です私の公共の構造テキストファイルから異なるデータ型を持つ構造体にデータを読み込むC#

public struct cars 
    { 
     public int id; 
     public string Make; 
     public string Model; 
     public double Year; 
     public double Mileage; 
     public double Price; 
    } 

で、これはあるDLL

static void Main() 
     { 
      int Key; 
      cars item = new cars(); 
      int preKey; 
      /* create an empty double linked list */ 
      DoubleLinkedList DLL = new DoubleLinkedList(); 
      string line; 
      StreamReader file = new StreamReader(@"C:\Users\Esther\Desktop\cars.txt"); 
      while ((line = file.ReadLine()) != null) 
      { 
       Console.WriteLine(line); 
       var array = line.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None); 
       item.Make =array[0]; 
       item.Model = array[1]; 
       item.Year = Double.Parse(array[2]); 
       item.Mileage = Double.Parse(array[2]); 
       item.Price = Double.Parse(array[2]); 
       // Using newline to seprate each line of the file. 
       Console.WriteLine(line); 
      DLL.AppendToHead(item); 

      } 

にそれを追加し、フォーマット例外範囲例外のうちをスローします。このコードをテキストファイルを構造体に読み込み、それをDLLに追加するにはどうすればよいですか?これは、あなたがReadLineと行毎にファイルを読み込むと、行末を持つ単一の行を分割しようとしているcar.txtファイル

BMW 
228i 
2008 
122510 
7800 

Honda 
Accord 
2011 
93200 
9850 

Toyota 
Camry 
2010 
85300 
9500 
+1

なぜあなたは '\ r \ n"、 "\ n" 'で1行全体を分割しますか?なぜ 'array [2]'を3回読むのですか? – haindl

答えて

0

簡素化のため、ダブルリンクリストを平文List<cars>に変更しました。レコードごとに新しいcarsアイテムを作成する必要があります。そうしないと、リスト内のすべての要素が同じレコード(最後に処理されたもの)を参照することになります。各行には車の属性が異なるため、カウンタ(idx)を使用して保存する属性を決定する必要があります。

using System.Collections.Generic; // for List<cars> 
    ... ... ... 
    public static void ReadMultiline() 
    { 
     // http://stackoverflow.com/questions/39945520/reading-data-from-a-text-file-into-a-struct-with-different-data-types-c-sharp 
     var DLL = new List<cars>(); 
     string line; 
     StreamReader file = new StreamReader(@"cars.txt"); 
     var item = new cars(); 
     int idx = 0; 
     while ((line = file.ReadLine()) != null) 
     { 
      idx++; 
      switch (idx) { 
       case 1: item.Make = line; break; 
       case 2: item.Model = line; break; 
       case 3: item.Year = Double.Parse(line); break; 
       case 4: item.Mileage = Double.Parse(line); break; 
       case 5: item.Price = Double.Parse(line); break; 
      } 
      if (line == "" && idx > 0) 
      { 
       DLL.Add(item); 
       idx = 0; 
       item = new cars(); // create new cars item 
      } 
     } 
     // pick up the last one if not saved 
     if (idx > 0) 
      DLL.Add(item); 

     foreach(var x in DLL) 
     { 
      Console.WriteLine(String.Format("Make={0} Model={1} Year={2} Mileage={3} Price={4}", x.Make, x.Model, x.Year, x.Mileage, x.Price)); 
     } 
    } 
+0

ありがとう、これは私が探していたものです – Es87

0

です。これにより、要素が1つの配列(E.G. "BMW")になります。

ファイル全体を読み込んだ後、行単位で分割するか、各行に何らかのデータが含まれていると仮定します。

array[0] = "BMW"の場合はarray[1]と表示されます。OutOfRangeExceptionarray[1]です。

関連する問題