CSV文件内容为二维数组

时间:2014-04-25 11:42:31

标签: c# csv multidimensional-array

这个问题已被多次提出不同的输入,所以我想把它与我的要求一起重新发布。

我有一个CSV文件,其中包含以下给出的方式的字符串字段。

idnum,name1, name2,groupid

idnum,name1, name2,groupid

idnum,name1, name2,groupid

示例

s001,sahil,payap,gid0

s002,Amir,Khan,gid02

d003,hrithik,roshan,gid03

我有二维字符串数组。我想逐行读到我的二维数组。 阅读时应该是这样的

arr[0][0]=s001

arr[0][1]=name1

arr[0][2]=name2

arr[0][3]=gid01

arr[1][0]=s002

arr[1][1]=Amir

arr[1][2]=Khan

arr[1][3]=gid04

文件中有40条记录,应该读到文件末尾。 我需要在C#

中实现这一点

任何代码示例或任何解释都会有很大的帮助。

我对csv文件处理一无所知所以请不要问你尝试了什么,至少如果你能给我一个代码样本只读一个变量的字符串那将是一个很好的帮助。 请不要再寻求其他解决方案。 感谢。

3 个答案:

答案 0 :(得分:3)

必须按行读取文件。必须使用String.Split分隔每一行。然后必须使用Trim修剪生成的字符串,最后必须写入当前行的相应列。但是我完全赞同上述评论;更方便的是使用一些名为Person的类或结构,然后解析为List<Person>

阅读可按如下方式进行:

String line = String.Empty;
System.IO.StreamReader file =  new System.IO.StreamReader("c:\\file.txt");
while((line = file.ReadLine()) != null)
{
    String[] parts_of_line = line.Split(',')
    for ( int i = 0; i < parts_of_line.Length; i++ )
        parts_of_line[i] = parts_of_line[i].Trim();

    // do with the parts of the line whatever you like

}

答案 1 :(得分:3)

以您建议的方式阅读csv文件的最简单方法可能是:

var rows = File.ReadAllLines("myfile.csv").Select(l => l.Split(',').ToArray()).ToArray();

然后:

Console.WriteLine(rows[0][0]); // Will output s001
Console.WriteLine(rows[0][1]); // Will output sahil
Console.WriteLine(rows[0][2]); // Will output payap
Console.WriteLine(rows[0][3]); // Will output gid0
Console.WriteLine(rows[1][0]); // Will output s002
Console.WriteLine(rows[2][0]); // Will output d003

答案 2 :(得分:0)

您可以使用CsvHelper library

执行此操作
const string Csv = @"s001,sahil,payap,gid0
s002,Amir,Khan,gid02
d003,hrithik,roshan,gid03";

var rows = new List<string[]>();
string[] row;

using (var stringReader = new StringReader(Csv))
using (var parser = new CsvParser(stringReader))
while ((row = parser.Read()) != null)
{
    rows.Add(row);
}

Console.WriteLine(rows[0][0]); // Will output s001
Console.WriteLine(rows[0][1]); // Will output sahil
Console.WriteLine(rows[0][2]); // Will output payap
Console.WriteLine(rows[0][3]); // Will output gid0
Console.WriteLine(rows[1][0]); // Will output s002
Console.WriteLine(rows[2][0]); // Will output d003

有关一个工作示例,请查看此.NET小提琴:http://dotnetfiddle.net/PLPXo8

如果您想直接从文件中阅读,可以这样做:

var rows = new List<string[]>();
string[] row;

using (var parser = new CsvParser(File.OpenText(@"c:\test.csv")))
while ((row = parser.Read()) != null)
{
      rows.Add(row);
}