C# サンプル集 |
Visual Basic 中学校 > C# サンプル集 > C# サンプル集目次 >
ファイルから文字列を読み込む
2021/10/10
ファイル全体を一度に読み込む
この例ではUTF-8 として読み込みます。
string content = System.IO.File.ReadAllText(@"C:\temp\test.txt");
メモ:ファイルに複数行が含まれる場合は、改行付きの1つの文字列として読み込みます。
これでもできます。この例は C# 8.0(2019年9月)以降で実行できます。
using var reader = new System.IO.StreamReader(@"C:\temp\test.txt");
string content = reader.ReadToEnd();
これを C# 8.0より前でも実行できるように書き換えると次のようになります。
using (var reader = new System.IO.StreamReader(@"C:\temp\test.txt"))
{
string content = reader.ReadToEnd();
}
shift_jisとして読み込む
この例ではShift_JIS としてファイル全体を読み込みます。
#if NETCOREAPP
//.NET Frameworkで実行している場合、この#if ~ #endif 間は無視されます。
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
#endif
var sjis = System.Text.Encoding.GetEncoding("shift_jis");
string content = System.IO.File.ReadAllText(@"C:\temp\test.txt",sjis);
メモ:ファイルに複数行が含まれる場合は、改行を含む1つの文字列として読み込みます。
これでもできます。この例は C# 8.0(2019年9月)以降で実行できます。
#if NETCOREAPP
//.NET Frameworkで実行している場合、この#if ~ #endif 間は無視されます。
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
#endif
var sjis = System.Text.Encoding.GetEncoding("shift_jis");
using var reader = new System.IO.StreamReader(@"C:\temp\test.txt", sjis);
string content = reader.ReadToEnd();
メモ:ファイルに複数行が含まれる場合は、改行を含む1つの文字列として読み込みます。
これを C# 8.0より前でも実行できるように書き換えると次のようになります。
#if NETCOREAPP
//.NET Frameworkで実行している場合、この#if ~ #endif 間は無視されます。
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
#endif
var sjis = System.Text.Encoding.GetEncoding("shift_jis");
using (var reader = new System.IO.StreamReader(@"C:\temp\test.txt", sjis))
{
string content = reader.ReadToEnd();
}
メモ:ファイルに複数行が含まれる場合は、改行を含む1つの文字列として読み込みます。
ファイル全体を一度に読み込んで、行ごとに取得する
この例ではUTF-8 として読み込みます。
string[] lines = System.IO.File.ReadAllLines(@"C:\temp\test.txt");
//以下はファイルに2行以上ないとエラーになります。
System.Diagnostics.Debug.WriteLine($"{lines.Length}行ありました。");
System.Diagnostics.Debug.WriteLine("1行目は:" + lines[0]);
System.Diagnostics.Debug.WriteLine("2行目は:" + lines[1]);
System.Diagnostics.Debug.WriteLine("最後の行は:" + lines.Last());
1行ずつ3行目まで読み込む
この例ではUTF-8 として読み込みます。この例は C# 8.0(2019年9月)以降で実行できます。
using var reader = new System.IO.StreamReader(@"C:\temp\test.txt");
string? line1 = reader.ReadLine(); //1行目を読み込みます。
string? line2 = reader.ReadLine(); //次の行を読み込みます。
string? line3 = reader.ReadLine(); //次の行を読み込みます。
メモ:最終行を読み込んだ後 ReadLine を呼び出すと null を返します。
これを C# 8.0より前で実行できるように書き換えると次のようになります。
using (var reader = new System.IO.StreamReader(@"C:\temp\test.txt"))
{
string line1 = reader.ReadLine(); //1行目を読み込みます。
string line2 = reader.ReadLine(); //次の行を読み込みます。
string line3 = reader.ReadLine(); //次の行を読み込みます。
}
メモ:最終行を読み込んだ後 ReadLine を呼び出すと null を返します。
1行ずつ最後まで読み込む
この例ではUTF-8 として読み込みます。この例は C# 8.0(2019年9月)以降で実行できます。
using var reader = new System.IO.StreamReader(@"C:\temp\test.txt");
while (!reader.EndOfStream)
{
string line = reader.ReadLine()!;
System.Diagnostics.Debug.WriteLine(line);
}
これを C# 8.0より前で実行できるように書き換えると次のようになります。
using (var reader = new System.IO.StreamReader(@"C:\temp\test.txt"))
{
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
System.Diagnostics.Debug.WriteLine(line);
}
}
1文字ずつ読み込む
次の例は、ファイルから1文字ずつ取得して、その文字をデバッグ出力に書き込みます。この例ではUTF-8 として読み込みます。この例は C# 8.0(2019年9月)以降で実行できます。
using var reader = new System.IO.StreamReader(@"C:\temp\test.txt");
while (!reader.EndOfStream)
{
int code = reader.Read();
char letter = Convert.ToChar(code);
string st = letter.ToString();
System.Diagnostics.Debug.WriteLine(st);
}
メモ:ここでいう「文字」とはUnicode基本多言語面のコードポイントを指しているようで、たとえば、UTF-16でサロゲートペアとして表される1文字(例として𩸽)はこのプログラムでは判別できない2つの文字として出力されるようです。
これを C# 8.0より前で実行できるように書き換えると次のようになります。
using (var reader = new System.IO.StreamReader(@"C:\temp\test.txt"))
{
while (!reader.EndOfStream)
{
int code = reader.Read();
char letter = Convert.ToChar(code);
string st = letter.ToString();
System.Diagnostics.Debug.WriteLine(st);
}
}
メモ:ここでいう「文字」とはUnicode基本多言語面のコードポイントを指しているようで、たとえば、UTF-16でサロゲートペアとして表される1文字(例として𩸽)はこのプログラムでは判別できない2つの文字として出力されるようです。