CSV文件分成两个数组

CSV file into two arrays

这里有点难过。尝试将 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,mark 应为第一行的 46。任何提示或完整修复。我们只使用数组。没有列表。

line.Trim().Split(',') returns 一个字符串数组。所以先拆分行,然后将每个索引分配给相关变量。

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

您需要为每一行执行此操作。您有没有使用列表的原因?这将使它变得更容易,因为您只需为文件的每次迭代添加每个值。

除了 Steve 的回答之外,您还可以尝试将整个文件拆分为一个线阵列。例如:

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

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

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

他是对的,列表对此非常有用。

问题是您只解析了第一个值。

您的代码有效地调用了这个:

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);