【问题标题】:CSV file contents to two dimensional array [duplicate]CSV文件内容到二维数组[重复]
【发布时间】:2014-06-11 02:34:22
【问题描述】:

这个问题已经用不同的输入问了好几次了,所以我想根据我的要求重新发布它。

我有一个 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 文件处理一无所知,所以请不要问你尝试了什么,至少如果你能给我一个代码示例来读取一个变量的一个字符串,那将是一个很大的帮助。 请不要要求寻求其他解决方案。 谢谢。

【问题讨论】:

  • 尝试过什么?什么有效?什么没有?
  • 如果我是你,我会把每条记录读入一个结构体,多维数组会让审查你的代码的人感到困惑。
  • @Piskvor 不,先生,我没有尝试任何方法,因为我对此一无所知。你能给我一个代码示例,至少可以将单个字符串从 csv 文件读取到字符串变量..
  • @Ashigore 不,目前我还没有想到。

标签: c# csv multidimensional-array


【解决方案1】:

您可以使用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 fiddle: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);
}

【讨论】:

  • 谢谢,但我想稍微解释一下,那个 csv 字符串是干什么用的?是这条线吗? //这一行 //const string Csv = @"s001,sahil,payap,gid0 s002,Amir,Khan,gid02 d003,hrithik,roshan,gid03";我想打开文件并逐行读取,这是定位文件的行吗?也对这条线感到困惑? var rows = new List();为什么在 中使用数组?我计划以不同的方式进行输出,因此我不需要输出数组内容的方法,但我想要清楚地解释如何读入数组。有什么网站可以作为教程参考吗?在 CSV 文件读取中?
  • @user3572467 SO 不是来教你如何编码的。您提出特定问题并获得特定答案。
  • @Ashigore 是的,先生,但是是这样,我想稍微解释一下。
  • 好吧,Csv 变量仅用于说明目的。我更新了示例以显示如何直接从文件中读取。
【解决方案2】:

按照您建议的方式读取 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

【讨论】:

    【解决方案3】:

    文件必须按行读取。每行必须使用String.Split 分隔。然后必须使用Trim 修剪生成的字符串,最后必须将其写入当前行的相应列。但是,我完全支持上面的 cmets;更方便的是使用一些名为Person 的类或结构,然后解析为List&lt;Person&gt;

    阅读可以如下进行:

    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
    
    }
    

    【讨论】:

    • 你能告诉我至少为一行做的方法吗?或者只是将 csv 文件中的单个字符串行读取到变量中..
    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 2012-12-27
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 2014-09-13
    • 1970-01-01
    相关资源
    最近更新 更多