テキストファイルの読み込み|C#
C#でStreamReader
を使ったテキストファイルの読み込みサンプルです。
1行づつ読み込む
using System.IO;
using (StreamReader reader = new StreamReader(@"input.txt")) {
string line;
while ((line = reader.ReadLine()) != null) {
Console.WriteLine(line);
}
}
空白行が無いことが保証される場合
といった記述も可能。
while (!String.IsNullOrEmpty(line = reader.ReadLine())) {
といった記述も可能。
一度に全て読み込む
using System.IO;
using (StreamReader reader = new StreamReader(@"input.txt")) {
string text = reader.ReadToEnd();
Console.Write(text);
}
指定したバイト数だけ読み込む
下記サンプルは3バイトづつ読み込みます。
Read
の第2引数は第1引数の配列に対する格納先開始位置(インデックス)です。
using System.IO;
using (StreamReader reader = new StreamReader(@"input.txt")) {
char[] buffer = new char[3];
int length;
while ((length = reader.Read(buffer, 0, buffer.Length)) != 0) {
Console.WriteLine(buffer);
Array.Clear(buffer, 0, buffer.Length);
}
}
CSVファイルの読み込み
CSVファイルを読み込むサンプルです。
private List<string[]> readCsv(string path) {
List<string[]> result = new List<string[]>();
using (StreamReader reader = new StreamReader(path)) {
string line;
while ((line = reader.ReadLine()) != null) {
string[] columns = line.Split(',');
result.Add(columns);
}
}
return result;
}
呼び出しサンプル
List<string[]> table = readCsv(@"sample.csv");
for (int rowIndex = 0; rowIndex < table.Count; rowIndex++) {
string rowString = String.Empty;
string[] columns = table[rowIndex];
for (int columnIndex = 0; columnIndex < columns.Length; columnIndex++) {
rowString += "[" + columns[columnIndex] + "]";
}
Console.WriteLine(rowString);
}
sample.csv
00001.jpg,1,001,いち
00002.jpg,2,002,に
00003.jpg,3,003,さん
00004.jpg,4,004,よん
00005.jpg,5,005,ご
00006.jpg,6,006,ろく
00007.jpg,7,007,なな
00008.jpg,8,008,はち
00009.jpg,9,009,きゅう
00010.jpg,10,010,じゅう
出力結果
[00001.jpg][1][001][いち]
[00002.jpg][2][002][に]
[00003.jpg][3][003][さん]
[00004.jpg][4][004][よん]
[00005.jpg][5][005][ご]
[00006.jpg][6][006][ろく]
[00007.jpg][7][007][なな]
[00008.jpg][8][008][はち]
[00009.jpg][9][009][きゅう]
[00010.jpg][10][010][じゅう]