9章:チュートリアル8:タブ区切りのテキスト ファイルを読み取るの作成

    作成2013.03.02

  1. 参照元情報
     タブ区切りのテキスト ファイルを読み取るの作成は(Visual Basic ガイド ツアー)
    「タブ区切りのテキスト ファイルを読み取る」にジャンプする
     作成方法の詳細は上記を参照願います。


  2. タブ区切りのテキスト ファイルを読み取るの完成ファイル
     タブ区切りのテキスト ファイルを読み取るの解説とおりに作業を実施すると、プロジェクトファイル群が完成しますが、若干の修正を加えて作成しました。
     完成ファイルは以下からダウンロードできます。
     ダウンロード後は解凍してから使用してください。
      [ 8:タブ区切りのテキスト ファイルを読み取る]をダウンロードする。
     解凍すると「FileTest2」フォルダーがあります。
    注(1)「FileTest2」フォルダーの「FileTest2.sln」ファイルをダブルクリックすると「Microsoft Visual Basic 2010 Express」が起動します。
    注(2)メニューの「ウインド」_「ウインドレイアウトのリセット」で標準に戻ります。
    注(3)「ソリューションエクスプローラ」ウインドウ内の「Form1.vb」をダブルクリックすると「デザイン」が表示されます。
    注(4)メニューの「表示」_「コード」を選択するとコードが表示されます。
    注(5)「FileTest2.sln」の動作確認は「デバッグ」_「デバッグ開始」で実行します。デバッグ機能を用いて動作確認を行います。


  3. FileTest2の実行
    (1)「Microsoft Visual Basic 2010 Express」のデバッグ機能を使用します。
    (2)「デバッグ」_「デバッグ開始」を選択します。
    (3)操作画面が表示されます。
    (4)Test実行ボタンを押します。
    (5)オープン・ファイル・ダイアログが表示されます。
    (6)タブ区切りテキストファイルを選択してOKボタンをおします。
    (7)保存ファイル・ダイアログが表示されます。
    (8)保存場所とファイル名を指定して、保存ボタンを押します。
    (9)クローズボックスでプログラムを終了します。
    (10)保存ファイルにスペースとカンマ区切りファイルが作成されます。


  4. 新規プロジェクトの作成
    (1)新規プロジェクト
     新規プロジェクトを作成すると「デザイナー」にはForm1が自動生成されます。

    (2) Formコード
    Public Class Form1
    End Class
    が自動生成されます。

    (3) パーツレイアウト
     Form1にButton、OpenFileDialog、SaveFileDialogをツールボックスから設定します。
     OpenFileDialog、SaveFileDialogの「Filterを(*.txt)|*.txt」に設定します。


  5. Public Class Form1の全コード
    Public Class Form1
        Dim RCData(50, 10) As String '2次元3配列を定義
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim i, j As Integer 'カウント変数定義
            'OpenFileDialogを開く
            If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
                '変数MyReaderをTextFieldParser型で生成
                Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(OpenFileDialog1.FileName)
                    'TextFieldTypeをフィールドが区切り形式に設定
                    MyReader.TextFieldType = FileIO.FieldType.Delimited
                    MyReader.SetDelimiters(vbTab)   '区切り記号をタブに設定
                    Dim currentRow As String()      '変I数currentRowを文字型1次元配列で生成
                    i = 0                           'i=0をセット
                    While Not MyReader.EndOfData    'MyReaderのデータがエンドになるまで繰り返し
                        Try                         '通常処理
                            currentRow = MyReader.ReadFields()  '現在行を読み込んで文字列の配列として返します
                            Dim currentField As String          '変数currentFieldをdString型で生成
                            j = 0                               'j=0をセット
                            For Each currentField In currentRow 'currentFieldをcurrentRowの範囲で繰り返し
                                RCData(i, j) = currentField     '2次元配列にcurrentFieldをセット
                                If j < 9 Then j = j + 1 '2次元配列の列数制限
                            Next
                        Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException 'エラー時処理
                            MsgBox("Line " & ex.Message & "is not valid and will be skipped.")
                        End Try
                        If i < 49 Then i = i + 1 '2次元配列の列数制限
                    End While                       '繰り返しエンド点
                End Using
                Dim OutText As String = ""          '変数OutTextをString型で生成
                For i = 0 To 49                     '繰り返し
                    For j = 0 To 9                   '繰り返し
                        OutText = OutText & RCData(i, j) & " , "    'OutTextに2次元配列要素を加算
                    Next j
                    OutText = OutText & vbCrLf                      'OutTextに改行を加算
                Next i
                'SaveFileDialogを開く
                If SaveFileDialog1.ShowDialog() = DialogResult.OK Then
                    'OutTextの内容をファイルに出力
                    My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName, OutText, append:=False)
                End If
            End If
        End Sub
    End Class
    


  6. コードの解説
    (1) Dim RCData(50, 10) As Stringは2次元3配列を定義します。
    (2)Private Sub Button1_ClickはButton1.Clickイベントで実行されます。
    (3)Dim i, j As Integer はカウント変数を定義します。
    (4)OpenFileDialog1.ShowDialog()はOpenFileDialogを開きます。
    (5)Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(OpenFileDialog1.FileName)は変数MyReaderをTextFieldParser型で生成します。
    (6)TextFieldParser クラスは構造化テキスト ファイルの解析に使用するメソッドとプロパティを提供します。
    (7) MyReader.TextFieldType = FileIO.FieldType.DelimitedはTextFieldTypeをフィールドが区切り形式に設定します。
    (8) MyReader.SetDelimiters(vbTab) は区切り記号をタブに設定します。
    (9)Dim currentRow As String()は変I数currentRowを文字型1次元配列で生成します。
    (10)While Not MyReader.EndOfData はMyReaderのデータがエンドになるまで繰り返します。
    (11)currentRow = MyReader.ReadFields() は現在行を読み込んで文字列の配列として返します。
    (12)Dim currentField As Stringは変数currentFieldをdString型で生成します。
    (13)For Each currentField In currentRowは'currentFieldをcurrentRowの範囲で繰り返します。
    (14)RCData(i, j) = currentField は2次元配列にcurrentFieldをセットします。
    (15)Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException はエラー時処理です。
    (16)Dim OutText As String = ""は変数OutTextをString型で生成します。初期値はヌルです。
    (17)OutText = OutText & RCData(i, j) & " , "はOutTextに2次元配列要素を加算します。
    (18)OutText = OutText & vbCrLfはOutTextに改行を加算します。
    (19)SaveFileDialog1.ShowDialog()はSaveFileDialogを開きます。
    (20) My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName, reader, append:=False)は変換ファイルを作成します。

    感想:本サンプルはタブ区切りのテキストファイルを読み込み2次元配列データに変換します。 タブ区切りのテキストファイルを変換するのにTextFieldParser クラスを使用しています。TextFieldParser クラスを使用しなくても変換は難しくありませんが、処理ルーチンの記載は長くなります。
     数値計算プログラムにおいては、入力データ数が多い場合、テキストボックスからの入力が面倒な作業となります。タブ区切りのテキストファイルはEXCELとテキストエディタで簡単に数表データが作成できます。従って、タブ区切りのテキストデータファイルを読み取り、いったん2次元配列変数に変換します。2次元配列変数に対して数学的な計算処理を行い計算処理後の2次元配列変数に変換します。計算処理後の2次元配列変数はタブ区切りのテキストファイルとして出力します。
     こうすると、数値計算処理において複雑な操作が不要で「計算実行」ボタンのみの操作で済みます。数値計算で重要なのは計算結果の数表ですが、計算結果の一部はグラフィック処理を行い表示して理解を助けます。
     数値計算処理プログラムの基本構造はいつも同じ形式になります。タブ区切りのテキストファイルの2次元配列変数変換は最も多用するプログラムとなります。







10章:チュートリアル9:バイナリ ファイルを読み取るの作成に行く。

トップページに戻る。