我正在尝试为学校项目编写一个程序,该程序将读取每行包含名称的csv文件,并输出每个名称及其在列表框中出现的次数。我希望它不是为特定名称预先设置,但我想这也可以。到目前为止,我有这个,但现在我被卡住了。
这是我到目前为止所做的:
string[] csvArray;
string line;
StreamReader reader;
OpenFileDialog openFileDialog = new OpenFileDialog();
//set filter for dialog control
const string FILTER = "CSV Files|*.csv|All Files|*.*";
openFileDialog.Filter = FILTER;
//if user opens file and clicks ok
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
//open input file
reader = File.OpenText(openFileDialog.FileName);
//while not end of stream
while (!reader.EndOfStream)
{
//read line from file
line = reader.ReadLine().ToLower();
//split values
csvArray = line.Split(',');
答案 0 :(得分:1)
不知道你的完整CSV结构,我会做类似的事情:
//outside of loop
var nameCounterDict = new Dictionary<string, int>();
//in loop
//csvName is the name of the current csv token you're parsing
int itemCount = 0;
if(!nameCounterDict.TryGetValue(csvName, out itemCount))
nameCounterDict.Add(csvName, 0)
nameCounterDict[csvName]++;
这会在每次出现唯一名称时填充字典,如果名称已存在,则会增加一个int计数。
解析完文件后,您可以循环字典以获取每个名称和计数器以供显示。