今回のテーマ
こんばんは、サルモリです!
今回は下記のテーマについて書いていきます。
今回のテーマ
ファイルの読み込み方法3選
ファイルの読み込み方法について、書いていこうと思います。
よく使う読み込み方法を3つ紹介していくので、場合と状況に応じて使い分けてください。
前回の記事です。
CHECK
-
C# Linq ファイルの書き込み方法を紹介 Linqの抽出結果を書き込むことも可能です。
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
ファイルの読み書きについての記事はこちら
ファイルの内容を1行ずつ読み込む方法
まずはファイルの読み込み方法について解説します。
まずは読み込むファイルを準備しましょう。
読み込むファイルについて
ファイルは下記フォルダにrobot.txtを格納しました。
folder
D:\test
一応、フォルダの写真も載せておきます。
ファイルの中身は下記ようにロボット名が書かれています。
robot.txt
Rockman
Roll
Fireman
Iceman
早速、ファイルを読み込んでみます。
ファイルの読み込み方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using System; using System.IO; namespace FileOperater { class Program { static void Main(string[] args) { String filepath = @"D:\test\robot.txt"; using (var reader = new StreamReader(filepath)) { while (!reader.EndOfStream) { Console.WriteLine(reader.ReadLine()); } } } } } |
result
Rockman
Roll
Fireman
Iceman
ファイルの内容を出力することができました。
各行の内容について解説します。
ポイント
2行目:StreamReaderを使用するために必要なので、インポートしましょう。
10行目:ファイルのパスを指定しています。@を付けると\のエスケープ文字を指定しなくても良くなります。
11行目:ファイルを読むこむ為のストリームを生成しています。引数にはパスを指定するだけです。usingを使用すると、処理が終わったあとに自動的にファイルのクローズしてくれます。
13行目:ファイルの内容が終わるまで1行ずつ繰り返しを行います。EndOfStreamは内容が終端の場合はtrue、それ以外の場合はfalseを返します。
15行目:ファイルの内容を出力しています。
上記のソースコードを記述すれば、ファイルを読み込むことが可能です。
ストリームを指定するときの引数は第2引数にエンコードを指定することが多いです。
1 |
StreamReader(filepath,Encoding.UTF8) |
ファイルの内容を1度に読み込む方法
前の読み込み方法はファイルを1行ずつ読み込む方法でしたが、ファイルの内容をメモリに一気に読み込むこともできます。
下記のようにソースコードを記述してください。
ファイルの読み込み方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System; using System.IO; namespace FileOperater { class Program { static void Main(string[] args) { String filepath = @"D:\test\robot.txt"; var lines = File.ReadAllLines(filepath); foreach(var line in lines) { Console.WriteLine(line); } } } } |
result
Rockman
Roll
Fireman
Iceman
どのように、ファイルの内容を出力できています。
ポイント
11行目:ReadAllLinesを使用することで、ファイルの内容を1度に読み込んでいます。string型の配列として、内容を返してくれます。
1行ずつ読み込むよりもメリットが多いように感じますが、読み込む内容が大きいとメモリが枯渇するので気を付けてください。
ファイルの内容が変わることが想定される場合は、バグの原因となるので使わない方が良いと思います。
ファイルの読み書きについての記事はこちら
ファイルの内容を読み込む方法(Linqを使用するのに適した読み込み方)
3つ目の読み込み方が一番おすすめです。まず、ソースコードを紹介します!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using System; using System.IO; using System.Linq; namespace FileOperater { class Program { static void Main(string[] args) { String filepath = @"D:\test\robot.txt"; var lines = File.ReadLines(filepath); foreach(var line in lines) { Console.WriteLine(line); } } } } |
result
Rockman
Roll
Fireman
Iceman
読み込み方法はReadLinesを使用します。このメソッドのメリットは下記です。
ポイント
・返してくれる型がIEnumerable<String>だからLinqを自由に使用できる。
・実際に行が必要となったタイミングでファイルを読み込んでくれるので、メモリの枯渇も心配ない。
1つ目のメリットはIEnumerable<String>型で返してくれるので、Linqを自由に使用することができます。
なので、下記のように記述することも可能です。
読み込んだファイルにLinqを使用する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using System; using System.IO; using System.Linq; namespace FileOperater { class Program { static void Main(string[] args) { String filepath = @"D:\test\robot.txt"; var lines = File.ReadLines(filepath).Where(x => x.Contains("man")).Select(x => x); foreach(var line in lines) { Console.WriteLine(line); } } } } |
command
Rockman
Fireman
Iceman
条件に指定した内容を取り出すことが出来ています。
1つ目のメリットのみでもとても優秀なのですが、Linqを使うだけであれば、ReadAllLinesメソッドでも使用することが出来ます。
上記のメソッドとの大きな違いは必要となるタイミングで行を読み込むことです。この仕様のおかげメモリ不足でバグになることはなくなります。
処理内容はStreamReaderで1行ずつ読み込むのをイメージして頂ければ良いでしょう。
ReadLinesメソッドの応用的な使い方はこちら
こちらもCHECK
-
【C# sharp Linq】ファイルのn番目に文字列を挿入する方法
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
まとめ
今回はファイルの読み込み方法を3つ紹介しました。
基本的に3つ目に紹介したReadLinesを使うことをおすすめします。
今回はテキストファイルの読み込み方を紹介しましたが、他の拡張ファイルの読み込み方の記事を別記事で書いていきたいと思います。
ここまで記事を読んで頂きありがとうございました。
ファイルの読み書きについての記事はこちら