2017-05-05 99 views
0

我正在嘗試讀取文本文件,並在多行中的每行上導入用逗號分隔的每個值。我已經在VB.Net中完成了它,但我似乎無法確定如何在C#中完成它。讀取每行用逗號分隔的單獨值c#

我的文本文件看起來像這樣:

12345678,你聞聞,1,0.50

73432433,聽,5,9

正如你可以在每行看到,有4個值用逗號分隔。 如何在程序中將每個值設置爲數組?並且能夠導入下一行。 我試過這個,看看我能否看到每個值。

 string[] lines = File.ReadAllLines("stock.txt"); 
     foreach (string line in lines) 
     { 
      string[] col = line.Split(','); 
      Console.WriteLine(col[0]); 
      Console.WriteLine(col[1]); 
      Console.WriteLine(col[2]); 
      Console.WriteLine(col[3]); 
     } 

但是,這隻給我一行的值。 這是我試圖複製VB.Net代碼:

 FileOpen(1, "stockfile.txt", OpenMode.Input) 

    Do While Not EOF(1) 

     Input(1, GTIN) 
     Input(1, GTIN_INFO) 
     Input(1, PRICE) 

     stock(No).GTIN = GTIN 
     stock(No).GTIN_INFO = GTIN_INFO 
     stock(No).PRICE = PRICE 

     No = No + 1 

    Loop 

    FileClose(1) 

在上述例子中,每逗號輸入進口,然後i各自值設置爲一個陣列內的值。我怎麼能在C#中做到這一點? 感謝您的幫助

+1

首先要檢查的是爲什麼C#程序只返回第一行的數據。 「記錄」之間是否有換行符?因爲你使用'ReadAllLines'的代碼應該做到這一點。 – dlatikay

+0

您可以使用File.ReadAllLines方法。 –

+0

但他們有,不是嗎?第一個代碼段的第一行。 @james,文件名是不同的 - 確定內容是相同的? – dlatikay

回答

0

這就是我會複製你的VB代碼做什麼:

namespace so43807152 
{ 
    struct Record 
    { 
     public string GTIN; 
     public string GTIN_INFO; 
     public string WHATEVER; 
     public decimal PRICE; 
    } 

    class Program 
    { 
     static void Main() 
     { 
      var stock = new List<Record>(); 

      string[] lines = File.ReadAllLines("stock.txt"); 
      foreach (var line in lines) 
      { 
       var col = line.Split(','); 
       for (int i = 0; i < col.Length; i += 4) 
       { 
        var record = new Record 
        { 
         GTIN = col[i], 
         GTIN_INFO = col[i + 1], 
         WHATEVER = col[i + 2], 
         PRICE = decimal.Parse(col[i + 3]) 
        }; 
        stock.Add(record); 
       } 
      } 
     } 
    } 
} 

這樣,如果逗號和換行,用於記錄分離沒關係。當GTIN_INFO可以包含逗號時(在VB版本中也是如此),它將不起作用。

(我把你的明顯變化,從三個領域的項目,以四場項目考慮進去,現在知道什麼是第三列實際上是。)

LINQ愛好者將包裝大部分是成一條線。

+0

他的代碼是好的,問題是與文本文件。 –

+0

d'oh。那麼他仍然可以vfc作爲「一個不能再生產的問題」 – dlatikay

+0

完美的謝謝! – james

0

我使用你的示例文件做了一個小小的LINQPad查詢,所以你可以看到另一個選項。

void Main() 
{ 
    var filename = @"C:\Documents\SampleText.txt"; 

    var stocks = new List<Record>();  
    using (TextReader reader = File.OpenText(filename)) 
    { 
     while (reader.Peek() > -1) 
     {   
      var values = reader.ReadLine().Split(','); 
      stocks.Add(new Record 
      { 
       GTIN = values[0], 
       GTIN_INFO = values[1], 
       WHATEVER = values[2], 
       PRICE = values[3] 
      }); 
     } 
    } 
    stocks.Dump(); 
} 

// Define other methods and classes here 
class Record 
{ 
    public string GTIN { get; set; } 
    public string GTIN_INFO { get; set; } 
    public string WHATEVER { get; set; } 
    public string PRICE { get; set; } 
} 

下面是我得到的結果。

enter image description here

請讓我知道,如果這有助於。

+0

是有幫助的,但有很多東西我還沒學習,道歉,我是新來的C# – james

+0

沒有道歉要求@詹姆斯。我們都必須從某個地方開始,我很樂意幫助未來的開發人員。 –

+0

@james你可以標記我的答案,如果它幫助你?謝謝。 –