0

尝试用一些结构化数据来实现读取 csv 文件(这个文件用于我的程序提醒 - 文件中的数据以下一种方式结构化:日期、名称、时间从、时间到、描述)。目前我想从文件中读取所有数据并将其放入某个字符串数组中,其中每个元素 - 文件中的 1 行。做了什么

编写一些代码,创建用于读取和打开文件的流。但目前我只能读一行。或所有文件在一行中。如何知道文件中有多少行?或如何读取数组中文件中的所有行,其中每个元素 - 文件中的一行。

代码

    FileStream fs = new FileStream(FilePath, FileMode.Open,
               FileAccess.Read, FileShare.None);
        StreamReader sr = new StreamReader(fs);

        string lines = sr.ReadLine();
       //temp veiw result
        viewTextBox.Text = lines; //read only one first line in file
        sr.Close();

或尝试阅读所有行

        string []line = File.ReadAllLines(FilePath); //read all lines in File
       //temp check
        for (int i=0; i<line.Length;i++){
            viewTextBox.Text += line[i]; // in this case all data stored in one lines
        }

我需要这个带有数据的数组,因为下一步行动 - 在这个数组中搜索一些数据并以表格形式显示。

4

2 回答 2

2

与其重新发明轮子,我宁愿使用一个众所周知且经过测试的库:

“用于读取和写入 CSV 文件的 CSV 文件解析器 C# 类。支持多行字段、自定义分隔符和引号字符,以及如何处理空行的选项。 - 设计的行为方式与 Excel 处理 CSV 文件的方式非常相似。 - 支持多行字段。-能够自定义处理空行的方式。-能够自定义分隔符和引号字符。”

http://csvfile.codeplex.com/

于 2013-08-24T10:37:15.877 回答
0

如果您只想查看如何执行此操作的简单解决方案:

IEnumerable<string[]> lineFields = File.ReadAllLines(FilePath).Select(line => line.Split(','));

因此,您可以按索引访问列:

string cellValue = lineFields[lineIndex][columnIndex];

这不会处理使用引号来允许在数据中使用逗号的 csv 文件,因为您需要编写一个例程来分割带引号的字符串。

于 2013-08-24T12:13:14.343 回答