2017-05-05 98 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你可以标记我的答案,如果它帮助你?谢谢。 –