我正在尝试读取一个文本文件,并在多行上导入每行上用逗号分隔的每个值。我已经在VB.Net中完成了它,但我似乎无法想象如何在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)
在上面的示例中,Input每个逗号导入,然后我将每个值设置为数组内的值。我怎么能在C#中做到这一点? 谢谢你的帮助
答案 0 :(得分: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爱好者会把大部分内容打包成一行。
答案 1 :(得分: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; }
}
以下是我得到的结果。
如果有帮助,请告诉我。