私はC#の付いたテキストファイルを読み込むしようとしています、それは次のようにフォーマットされます。C#の - 不規則な改行文字を含むファイルを読む
this is a line\r\n
this is a line\r
\r\n
this is a line\r
\r\n
this is a line\r
\r\n
this is a line\r\n
this is a line\r
\r\n
etc...
私は
StreamReader.ReadLine()
でファイルから各行を読んでいます
しかし、改行文字は保存されません。私は各行のバイト数を数えているので、どのような改行文字があるのかを知る/検出する必要があります。行文字\r
で終わる場合、ラインはで構成さ
:たとえば((nr-of-bytes-in-line) + 2 bytes)
バイト:行が\r\n
で終わる場合((nr-of-bytes-in-line) + 1 byte)
バイト(もちろんの符号化タイプに応じて)、線が構成されています。
EDIT:
私はイスラエル祭壇の回答に基づいてソリューションを、持っています。 BTW:Jon Skeetもお勧めします。 ReadLineのオーバーライドされたバージョンを実装しました。これにより、改行文字が追加されます。これは、オーバーライドされた関数のコードです:
public override String ReadLine()
{
StringBuilder sb = new StringBuilder();
while (true)
{
int ch = Read();
if (ch == -1)
{
break;
}
if (ch == '\r' || ch == '\n')
{
if (ch == '\r' && Peek() == '\n')
{
sb.Append('\r');
sb.Append('\n');
Read();
break;
}
else if(ch == '\r' && Peek() == '\r')
{
sb.Append('\r');
break;
}
}
sb.Append((char)ch);
}
if (sb.Length > 0)
{
return sb.ToString();
}
return null;
}
私は、基本的に 'ReadLine()'を再実装する必要があると思います。 –
ReadLineを使用してください。バイトカウントが必要な場合は、一度に1文字ずつ読む。 – jdweng
いいえ、私はこのようにします: 'string line = sr.ReadLine(); int nrOfBytes = Encoding.GetByteCount(line); 'しかし、\ rや\ r \ nのいずれかの新しい行の文字があるかどうかを検出する必要があります。 'nrOfBytes + = Encoding.GetByteCount(UNKNOWN-NEW-LINE-CHAR);' – DrGrid