有点难过。试图将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。任何提示或完整修复。我们只使用数组。没有名单。
答案 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]; }
他是对的,名单非常好。