連載:VB 6ユーザーのための
これならマスターできるVB 2005超入門

第8回 ファイル入出力をマスターしよう

羽山 博
2007/04/20
Page1 Page2 Page3 Page4

時代は変わってもファイル・アクセス

Back Issue
1
VB 6の皆さん、これはもうVB 2005使うしかないでしょ
2 コントロール配列がなくても大丈夫!
3 VB 2005の“My”の便利さに脱帽!
4 トラブルは水際で防げ〜入力時のチェックとエラー処理
5 データベースはじめの一歩
6 配列ってこんなに便利だったの!?
7 リソースを使ったマルチ・リンガルなVBアプリケーション

 最近では、基幹業務はデータベース化されているし、データの交換には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イベント・ハンドラを見てみよう。


 INDEX
  連載:VB 6ユーザーのためのこれならマスターできるVB 2005超入門
  第8回 ファイル入出力をマスターしよう
  1.サンプル・プログラム10 − テキスト・ファイルの検索プログラム
    2.テキスト・ファイルからデータを読み出せるようにするには
    3.サンプル・プログラム11 − ランダム・アクセスでデータを読み出すには
    4.サンプル・プログラム12 − ファイルに追加書き込みするには
 
インデックス・ページヘ  「これならマスターできるVB 2005超入門」


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH