CSV文件分为两个数组

时间:2015-05-13 03:59:39

标签: c# arrays csv split

有点难过。试图将CSV文件中的数字解析为两个int变量数组。但是,它只将第一个数字解析为两个而不是第二个。

Example of CSV file:

10000,46

10001,76

10002,100

string[] studentID = new string[STUDENT_TOTAL];
string[] studentMarks = new string[STUDENT_TOTAL];
studentID = line.Trim().Split(',');
studentMarks = line.Trim().Split(',');
int id = int.Parse(studentID[counter]);
int mark = int.Parse(studentMarks[counter]);

id应为10000,第一行的标记应为46。任何提示或完整修复。我们只使用数组。没有名单。

3 个答案:

答案 0 :(得分:4)

问题是你只是解析第一个值。

您的代码有效地称之为:

int id = int.Parse(line.Trim().Split(',')[counter]);
int mark = int.Parse(line.Trim().Split(',')[counter]);

我认为counter总是0

你可以让它像这样工作:

int id = int.Parse(line.Trim().Split(',')[0]);
int mark = int.Parse(line.Trim().Split(',')[1]);

但我建议你做一些重构,并这样做:

var results =
    File
        .ReadAllLines(@"path")
        .Select(x => x.Trim().Split(','))
        .Select(x => new { id = x[0], mark = x[1] })
        .ToArray();

string[] studentID = results.Select(x => x.id).ToArray();
string[] studentMarks = results.Select(x => x.mark).ToArray();

甚至更好,制作一本字典,让你查找学生的标记:

Dictionary<int, int> lookup  =
    File
        .ReadAllLines(@"path")
        .Select(x => x.Trim().Split(','))
        .Select(x => new { id = x[0], mark = x[1] })
        .ToDictionary(x => x.id, x => x.mark);

答案 1 :(得分:1)

line.Trim()。Split(&#39;,&#39;)返回一个字符串数组。因此首先拆分该行,然后将每个索引分配给相关变量。

var lineValues = line.Trim().Split(',');
studentID = lineValues[0];
studentMarks = lineValues[1];

您需要为每一行执行此操作。您是否有理由不使用列表?这样可以更容易,因为您只需为文件的每次迭代添加每个值。

答案 2 :(得分:1)

除了Steve的回答,你可以尝试将整个文件拆分成一个行数组。例如:

string[] Lines = CSVText.Split( Enviroment.Newline );

然后使用for循环读取每个行/列值 或者 foreach 块。

for ( int line = 0; line < Lines.Length; line++ ) {
   string[] linedata = line.Trim().Split(',');
   studentID = linedata[0];
   studentMarks = linedata[1]; }

他是对的,名单非常好。