还在学习并寻找一些指导 - 我有一个CSV文件,我正在使用带有两个foreach循环的方法读入我的程序:
int i = 0;
int j = 0;
string File = File.ReadAllText("c:\\employees.txt");
string[,] filesArray = new string[File.ReadLines("c:\\employees.txt").Count(), 4];
foreach (string row in rawFile.Split('\n'))
{
foreach (string col in row.Trim().Split(','))
{
filesArray[i, j] = col;
j++;
}
j = 0;
i++;
}
return filesArray;
一切都很好,我可以愚蠢地显示文本,但CSV文件的格式是
Z0003, EmployeeNameHere, 00001
我想根据filesArray [2,0]等中的值进行一些数学和其他计算,但我正在尝试找到这种情况的最佳实践。
我可以想到一些似乎并不优雅和诚实的方法,试图通过谷歌找到这个问题的确切答案有点乱。我不想在这么早的阶段养成坏习惯!
答案 0 :(得分:0)
你现在的问题是你有数据(即使它很难看),但它都在string
中。无论你做什么,你都必须转换为decimal
或其他数字格式来对其进行数学运算。
我建议使用像FileHelpers这样的库来将您的CSV数据读入"员工"先上课。这将为您提供强类型对象。请参阅'快速入门分隔'进入左侧。你的班级看起来像这样:
[DelimitedRecord(",")]
public class Employee {
// fields in same order as in the file
public string EmployeeId { get; set; }
public string EmployeeName { get; set; }
public int MyNumber { get; set; }
}
对当前代码的建议:
rawFile
?你使用ReadAllLines()var file = ...
不是var File =
fileLines
等new string[fileLines.Count, 4]
[,]
多维数组,则可以使用LINQ和分割更轻松。int.Parse
或int.TryParse
一些示例代码:
var data = fileLines.Select(line => line.Split(','))
.Where(arr => arr.Length == 4) // should have 4 fields
.ToArray();
var xxxx = data[0][1]; // should be "EmployeeNameHere"
// this assumes your data is ALL valid
var numbers = data.Select(x => int.Parse(x[2])).ToList();
var sum = numbers.Sum();
// there is no "pretty" way to do TryParse
var numbers = new List<int>();
foreach(var arr in data) {
int temp = 0;
if (int.TryParse(arr[2], out temp)) {
numbers.Add(temp);
}
}