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);
这里有点难过。尝试将 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);