在C#中按字符讀取文件字符的最簡單方法是什麼?C# - 按字符讀取外部CSV文件字符
目前,我通過調用System.io.file.ReadLine()逐行閱讀。我看到有一個Read()函數,但它不返回字符...
我也想知道如何檢測使用這種方法的行結束...輸入文件在問題是一個CSV文件....
在C#中按字符讀取文件字符的最簡單方法是什麼?C# - 按字符讀取外部CSV文件字符
目前,我通過調用System.io.file.ReadLine()逐行閱讀。我看到有一個Read()函數,但它不返回字符...
我也想知道如何檢測使用這種方法的行結束...輸入文件在問題是一個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]
}
}
我知道這不是你的代碼,但這是一個可怕的方法國際海事組織。爲什麼當'Read()'完成所需的工作? – 2012-03-08 11:00:55
一個片段我假設OP希望在文件中進行迭代_all_字符(「_閱讀character_文件字符「)。 – 2012-03-08 10:52:55
@TimSchmelter:所以他們需要循環,直到它返回-1 ...將用更多的代碼編輯,但我認爲這確實提供了足夠的信息。 – 2012-03-08 10:57:46
我將如何檢測一行的結束? – user559142 2012-03-08 11:56:11