C#アプリケーションでstreamreaderを使用しているときに特定の行末を取得しようとしています。streamreaderを使用して特定の行末を取得しようとしています
コード:
public static IEnumerable<string> ReadAllLines(string path)
{
if (!File.Exists(path)) return null;
List<string> lines = new List<string>();
using (var reader = new StreamReader(path))
{
while (!reader.EndOfStream)
{
lines.Add(reader.ReadLine(@"(\r\n|\n)"));
}
}
return lines.ToArray();
}
私はreader.ReadLine(@ "(\ Rの\ nは| \ n)を")がどこで見ることができます。私がreader.ReadLine()を書くと、私は問題はありませんが、私がオンラインで見つけたように行末を追加しようとすると、ReadLineに過負荷がないことがわかります。
質問:CSVファイルを正常にスキャンできるように、特定の行末を追加する方法を教えてくれる人がいますか?
更新: 私は探していた行末を追加する方法を見つけ、それを3通りの方法で試しました。しかし、私はまだいくつかの行を取得しています。それは意味をなさない。以下のコード行に問題がある人は誰でも見ることができますか?
var reader = new StreamReader(path, Encoding.Default);
//string text = reader.ReadToEnd();
////// attampt 1 - this gives the best result but is still splitting an a \r in one of the fields
//// List<string> lines = new List<string>(text.Split(new[] {"\r","\n"}, StringSplitOptions.None));
////// attempt 2 This worked almost identical to the option above but seemed faster.
//var lines = Regex.Split(text, "\r\n");
//// attempt 3 - this split both \r and \n separately
// List<string> lines = new List<string>(text.Split("\r\n".ToCharArray()));
これを行う方法に関する他の提案は素晴らしいでしょう。あなたの質問へのあなたのコメントに基づいて
StreamReaderは既にすべての行末を処理していませんか? [ソースコード](http://referencesource.microsoft.com/#mscorlib/system/io/streamreader.cs,a4ada5f765646068,references)は次のように言っています: "行を読み込みます。行は、キャリッジリターン( '\ r')、改行( '\ n')、改行直後の改行などがあります。 –
明確にするために、行末として数えたいものを指定しようとしていますか?そして、もっと具体的には 'ReadLine'を複製しようとしていますが、行末として' \ r'を単独では許さないのですか? – Chris
何が起こっているのかを説明するために、私はCSVファイルを持っています。あなたがそれをExcelに入れたら、私はZZに行く行とAZに行く行を持っています。 AZの終わりにある白い空白がZZに至り、次の行に追加され、すべてがねじ込まれます。私は、行の終わりが正しくないためだと思ったが、それらはあなたが上に述べた通りである。 – funktail1989