|
|
連載:VB 6ユーザーのための
これならマスターできるVB 2005超入門
第8回 ファイル入出力をマスターしよう
羽山 博
2007/04/20 |
|
時代は変わってもファイル・アクセス
最近では、基幹業務はデータベース化されているし、データの交換にはXML形式のファイルが使えるし……という具合に、パワフルかつ便利な環境が整ってきているが、単純なテキスト・ファイルや、カンマ区切りファイルなどにアクセスしなければならないことはまだまだ多い。
古いシステムとの互換性を取るためだけでなく、ログ・ファイルの解析や、そのほかさまざまな場面でファイルのデータを読み出したり、ファイルにデータを書き出したりすることがあるはずだ。時代の流れに逆らうつもりはないが、うまく使い分けることは重要。少量のデータを簡単に取り扱いたい場合には、テキスト・ファイルがやはり便利だ。
ファイルの入出力には、Visual Basic 6までは、いかにも古き良き(?)BASICらしいINPUTステートメントやGETステートメントなどを使っていた。Visual Basic 2005(以下VB 2005)では、それらと互換性のあるInput関数やFileGet関数メソッドのほかに、ファイルの入出力に利用されるクラスがいくつか用意されていて、それらのメソッドを使ってデータの読み書きができるようになっている。
これまでは、INPUTとかGETという名前がどういう意味を表しているのか分かりづらく、BASICでのファイル入出力にはうんざりしていたのだが(……と感じていたのは私だけかもしれないが)、VB 2005では、クラスやメソッドの名前が分かりやすく、コードがずいぶん書きやすく、かつ読みやすくなったと思う。
そんなわけで、今回はファイルの入出力に使われるクラスとメソッドのうち、よく使うと思われる基本的なものを見ていくことにしよう。表1はその一覧だ。
クラス |
メソッド |
意味 |
StreamReader |
ReadLine |
ストリームから1行読み出す |
ReadBlock |
ストリームから指定された数の文字を読み出す |
StreamWriter |
WriteLine |
ストリームに1行書き込む |
FileStream |
Seek |
読み出しや書き込みのための位置付けを行う |
Read |
ストリームから指定された数のバイトを読み出す |
TextFieldParser |
SetDelimiters |
フィールドの区切り文字を指定する |
ReadFields |
1行読み出し、フィールドごとに分けて文字列の配列に入れる |
|
表1 今回使うクラスとメソッドの一覧 |
ファイルからの入力(順アクセス、ランダム・アクセス)、出力、フィールドごとの入力などに使うメソッドを今回は見ていくことにする |
では、サンプル・プログラムを見ていこう。
サンプル・プログラム10 − テキスト・ファイルの検索プログラム
ファイル入出力の方法が端的に分かるように、サンプル・プログラムは単純なものにしてある。取り扱うデータは次のリストのような、どこにでもあるテキスト形式のログ・ファイル。実は、これは私が教えているいくつかの大学で使っている出席入力システムのデータである。入力のためのWebページや出席を記録するためのCGIプログラムは私のお手製だが、それによって記録されるデータがまさにこのような形式となっている。
01234567,Thu Apr 12 15:43:33 2007,192.168.1.2
01234568,Thu Apr 12 15:45:01 2007,192.168.1.2
01234569,Thu Apr 12 15:45:24 2007,192.168.1.2
01234570,Thu Apr 12 15:46:11 2007,192.168.1.2
01234571,Thu Apr 12 15:47:10 2007,192.168.1.2
01234567,Thu Apr 19 15:00:20 2007,192.168.1.2
01234568,Thu Apr 19 15:08:43 2007,192.168.1.2
01234567,Thu Apr 26 15:01:15 2007,192.168.1.2
:
:
|
|
今回のサンプル・プログラムで取り扱うデータ |
各行はカンマ区切りのフィールドから成り立っていて、最初のフィールドは学生番号、次が日時、最後が入力した端末のIPアドレスである(もちろんこのデータは内容を変えて架空のものにしてある)。
このファイルから1行ずつデータを読み出し、指定した学生番号が何件あるかをカウントするのが今回のサンプル・プログラムである(図1)。
|
図1 プログラムの実行例 |
プログラムを実行し、[番号]の右にあるテキストボックスに学生番号を入力する。[検索]ボタンをクリックすると、その件数が表示される。 |
■フォームのデザイン
フォームは見たとおりのデザインなので、特筆すべきことはない。図2と表2に主なものを示しておいたので、これに従って、メインのフォームにラベルとボタンを配置しておこう。
|
図2 メイン・フォームのデザイン |
図中の赤丸数字は次に示す表2の項目と対応している。
|
|
学生番号を入力するためのテキストボックス。 |
|
|
ファイルから1行ずつ読み込み、指定した学生番号が含まれている行の数のカウントを開始するためのボタン。 |
|
|
行数を表示するためのラベル。初期状態ではテキストは設定されていない。 |
|
番号 |
コントロール |
プロパティ |
設定値 |
|
フォーム |
Name |
frmMain |
Text |
出席回数カウント |
AcceptButton |
btnSearch |
FormBorderStyle |
FixedDialog |
MaximizeBox |
False |
|
テキストボックス |
Name |
txtNumber |
|
ボタン |
Name |
btnSearch |
Text |
検索(&S) |
|
ラベル |
Name |
lblCount |
Text |
(なし) |
|
表2 コントロールに設定するプロパティとその値の一覧 |
赤丸数字は図2に示した各コントロールに対応している。 |
以上でフォームのデザインは終わり。さっそく、[検索]ボタンのClickイベント・ハンドラを見てみよう。
業務アプリInsider 記事ランキング
本日
月間