連載:VB 6ユーザーのための
|
![]() |
|
■テキスト・ファイルからデータを読み出せるようにするには
[検索]ボタン、つまりbtnSearchコントロールのClickイベント・ハンドラの名前がcountNumberであるとすると、コードは以下のようになる。まずは、ファイルから行を読み出す部分に注目して見てみよう。対象となるファイルの名前は「c:\Home\attend.log」とする。
| ||||||||||||||||||
リスト1 ファイルから1行ずつ読み出すためのコード | ||||||||||||||||||
|
StreamReaderクラスを利用すれば、テキスト・ファイルなどを読み込むために使われる「ストリーム」が使えるようになる。ストリームというのは、先頭から末尾まで“ひとつながり”のデータと考えるといいだろう。ストリームを操作することにより、そのデータを読み出したり、(出力用のストリームであれば)データを出力したりすることができる。
実感を持ってStreamReaderクラスの働きや、ストリームの働きを理解するには慣れが必要だが、上記リストの
と
を図解すれば、オブジェクトの作成方法と、ストリームのイメージがつかめると思う(図3)。
![]() | ||||||||||||
図3 StreamReaderクラスのオブジェクトを利用する | ||||||||||||
図中の![]() ![]()
|
クラスやオブジェクトについては、まだ詳しくは説明していないが、クラスとは「ひな型」のようなもので、オブジェクトは、その「ひな型」から作られた個々の「モノ」のようなものだ。これまで慣れ親しんだ変数と対比していえば、整数や実数と呼ばれるものがクラスで、個々のiCountといった変数がオブジェクトに当たる。
New句の後に「クラス名()」を記述すれば、クラスの新しいオブジェクト(インスタンスとも呼ばれる)が作られる。このとき、()の中に引数を記述しておけば、あらかじめ何らかのデータを与え、必要な処理をしておくこともできる*1。
例えば、
New StreamReader("C:\Home\attend.log")
と書けば、引数で指定した「C:\Home\attend.log」というファイルからデータを読み出すためのストリームが利用できるようになる。
*1 クラスのコンストラクタと呼ばれるメソッドが自動的に呼び出される。コンストラクタはクラスの新しいオブジェクトが作られるときに実行されるメソッドで、初期化やそのほかの準備に使われる。 |
なお、実際には、StreamReaderクラスのオブジェクトを作成するときには、そのコンストラクタの引数を必ず指定しなければならないので、
New StreamReader()
とだけ書いてもエラーとなることに注意(ステップを追って分かりやすく説明するために、引数を書かないときの一般的な働きをあえて示しただけである)。
ところで、New句で新しいオブジェクトを作成しても、それだけではそのオブジェクトを利用することはできない。なぜなら、名前が付いていないからだ。もう一度、
New StreamReader("C:\Home\attend.log")
というコードを見てみよう。StreamReaderは変数名ではなく、あくまでもクラスの名前。StreamReaderクラスという「ひな型」に従ってオブジェクトを作ったわけだが、どういう名前で呼べばいいか分からない。子どもが生まれたのにまだ名前も決めず、出生届も出していないようなものだ。そこで、
sr = New StreamReader("C:\Home\attend.log")
と書く。こうすれば、srという変数(StreamReader型であると宣言している!)を使って、StreamReader型のオブジェクトが利用できるようになる。
■ストリームから1行ずつ読み出すには
オブジェクトの作成の話が長くなったが、続いてストリームを利用してデータを読み出すコードを見ておこう。データを1行読み出すには、StreamReaderクラスのReadLineメソッドを使えばよい。
実際にはsrという変数を使ってStreamReaderクラスのオブジェクトを操作するので、
sr.ReadLine()
のように書く。このReadLineメソッドは、改行を示すLF(16進数で0A)かCR+LF(16進数で0D0A)というコードが現れるまでを1行としてデータを読み込み、読み出した行を文字列として返してくれる(末尾のLFやCR+LFは返さない)。従って、
oneline = sr.ReadLine()
とすれば、読み出した行がonelineという文字列変数に代入されることになる。
StreamReaderクラスのEndOfStreamプロパティは、ストリームの末尾に達していればTrueとなるので、Trueでない間、ReadLineメソッドで1行ずつ読み出し、必要な処理を繰り返せばよい。
なお、ReadLineメソッドは、ストリームの末尾に達するとNothingを返すので、1行ずつデータを読み出すには次のような書き方もできる。
|
C言語など、ほかの言語を知っている人なら、
|
と書きたくなるところだが、これだと実行時にエラーとなってしまう。Visual Basicでは、IfやUntilの後に書かれた“=”は代入演算子ではなく、比較演算子と見なされるからだ。
■文字列が含まれているかどうかを知るには
繰り返し処理の中で実行している処理は簡単。読み出した行に、学生番号が含まれていれば、iCountの値を増やしているだけだ。このプログラムでは、次のように、検索文字列が含まれるかどうかを調べるContainsメソッドを使って、指定した学生番号が含まれるかどうかを調べている。
|
Containsメソッドは、引数に指定した文字列が元の文字列に含まれているときにTrueを返すので、戻り値を見れば文字列が含まれているかどうかが分かるというわけだ。ただし、検索文字列が""(空文字列)でもTrueが返されることに注意。
![]() |
![]() |
INDEX | ||
連載:VB 6ユーザーのためのこれならマスターできるVB 2005超入門 | ||
第8回 ファイル入出力をマスターしよう | ||
1.サンプル・プログラム10 − テキスト・ファイルの検索プログラム | ||
![]() |
2.テキスト・ファイルからデータを読み出せるようにするには | |
3.サンプル・プログラム11 − ランダム・アクセスでデータを読み出すには | ||
4.サンプル・プログラム12 − ファイルに追加書き込みするには | ||
![]() |
![]() |
「これならマスターできるVB 2005超入門」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
![]() |
|
|
|
![]() |
- - PR -