C # - чтение внешнего файла CSV символ за символом - PullRequest
1 голос
/ 08 марта 2012

Какой самый простой способ прочитать символьный файл в C #?

В настоящее время я читаю построчно, вызывая System.io.file.ReadLine ().Я вижу, что есть функция Read (), но она не возвращает символ ...

Я также хотел бы знать, как определить конец строки, используя такой подход ... Вводрассматриваемый файл является файлом CSV ....

Ответы [ 2 ]

5 голосов
/ 08 марта 2012

Откройте 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 ... вы потенциально хотели бы обработать\r особенно, если это текстовый файл Windows.

Но если вам нужна каждая строка , почему бы просто не позвонить ReadLine?После этого вы всегда можете перебирать символы в строке ...

0 голосов
/ 08 марта 2012

Вот фрагмент из 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]
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...