streamreader を使用してテキスト ファイルを読み取ります。
using (StreamReader sr = new StreamReader(FileName, Encoding.Default))
{
string line = sr.ReadLine();
}
\n
行区切り文字を にしないように強制したい\r
。では、どうすればそれを行うことができますか?
streamreader を使用してテキスト ファイルを読み取ります。
using (StreamReader sr = new StreamReader(FileName, Encoding.Default))
{
string line = sr.ReadLine();
}
\n
行区切り文字を にしないように強制したい\r
。では、どうすればそれを行うことができますか?
私はGeorgeの答えのようなものを実装しますが、ファイル全体を一度にロードすることを回避する拡張メソッドとして(テストされていませんが、このようなもの):
static class ExtensionsForTextReader
{
public static IEnumerable<string> ReadLines (this TextReader reader, char delimiter)
{
List<char> chars = new List<char> ();
while (reader.Peek() >= 0)
{
char c = (char)reader.Read ();
if (c == delimiter) {
yield return new String(chars.ToArray());
chars.Clear ();
continue;
}
chars.Add(c);
}
}
}
次に、次のように使用できます。
using (StreamReader sr = new StreamReader(FileName, Encoding.Default))
{
foreach (var line in sr.ReadLines ('\n'))
Console.WriteLine (line);
}
string text = sr.ReadToEnd();
string[] lines = text.Split('\r');
foreach(string s in lines)
{
// Consume
}
ドキュメントによると:
http://msdn.microsoft.com/en-us/library/system.io.streamreader.readline.aspx
行は、一連の文字の後にライン フィード ("\n")、キャリッジ リターン ("\r")、またはキャリッジ リターンの直後にライン フィード ("\r\n") が続くものとして定義されます。
デフォルトでは、StreamReader の ReadLine メソッドは、\n または \r の両方またはいずれかによって行を認識します。
ストリームをバイトごとに解析して分割を処理するか、/r、/n、または /r/n で分割するデフォルトの ReadLine 動作を使用する必要があります。
ストリームをバイト単位で解析する場合は、次の拡張メソッドのようなものを使用します。
public static string ReadToChar(this StreamReader sr, char splitCharacter)
{
char nextChar;
StringBuilder line = new StringBuilder();
while (sr.Peek() > 0)
{
nextChar = (char)sr.Read();
if (nextChar == splitCharacter) return line.ToString();
line.Append(nextChar);
}
return line.Length == 0 ? null : line.ToString();
}
このコードスニペットは、「\ n」が見つかるまで、ファイルから1行を読み取ります。
using (StreamReader sr = new StreamReader(path))
{
string line = string.Empty;
while (sr.Peek() >= 0)
{
char c = (char)sr.Read();
if (c == '\n')
{
//end of line encountered
Console.WriteLine(line);
//create new line
line = string.Empty;
}
else
{
line += (char)sr.Read();
}
}
}
このコードは文字ごとに読み取るため、使用可能なメモリに制約されることなく、任意の長さのファイルで機能します。