C#-逐字符读取外部CSV文件

本文关键字:CSV 文件 外部 读取 字符 C#- | 更新日期: 2023-09-27 18:27:03

在C#中逐字符读取文件的最简单方法是什么?

目前,我正在通过调用System.io.file.ReadLine()逐行读取。我看到有一个Read()函数,但它没有;t返回字符。。。

我也想知道如何使用这种方法来检测线的末端。。。有问题的输入文件是CSV文件。。。。

C#-逐字符读取外部CSV文件

打开一个TextReader(例如通过File.OpenText-请注意,File是一个静态类,因此您不能创建它的实例)并重复调用Read。它返回int而不是char,因此它可以指示文件结尾:

int readResult = reader.Read();
if (readResult != -1)
{
    char nextChar = (char) readResult;
    // ...
}

或循环:

int readResult;
while ((readResult = reader.Read()) != -1)
{
    char nextChar = (char) readResult;
    // ...
}

或者更时髦的优点:

public static IEnumerable<char> ReadCharacters(string filename)
{
    using (var reader = File.OpenText(filename))
    {
        int readResult;
        while ((readResult = reader.Read()) != -1)
        {
            yield return (char) readResult;
        }
    }
}
...
foreach (char c in ReadCharacters("foo.txt"))
{
    ...
}

请注意,默认情况下,File.OpenText将使用UTF-8编码。如果不需要,请显式指定编码。

编辑:要找到一行的末尾,你应该检查字符是否是'n。。。如果这是一个Windows文本文件,那么您可能也需要专门处理'r

但是,如果您想要的每一行,为什么不直接调用ReadLine呢?之后,您总是可以对行中的字符进行迭代。。。

以下是msdn 的一个片段

using (StreamReader sr = new StreamReader(path))
{
    char[] c = null;
    while (sr.Peek() >= 0)
    {
        c = new char[1];
        sr.Read(c, 0, c.Length);
        // do something with c[0]
    }
}