11章:タブ区切りのテキスト ファイルを読み取るの作成 (C#)

    作成2013.04.14

     VBで作成したプログラムをC#言語に変換します。

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


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


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


  4. 新規プロジェクトの作成
    (1)Form1のデザイン設定
     新規プロジェクトを作成すると「デザイナー」にはForm1が自動生成されます。Form1のデザイン設定はVBのForm1のコピー&ペーストで完成します。

    (2) Form1コード
     基本コードが自動生成されます。


  5. Form1の全コード
    using System;
    using System.Windows.Forms;
    using System.IO;
    
    namespace FileTest2
    {
        public partial class Form1 : Form
        {
            String[,] RCData = new String[50, 20];
            public Form1()
            {
                InitializeComponent();
            }
            private void Button1_Click(object sender, EventArgs e)
            {
                int i, j;
                if (OpenFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    using (Microsoft.VisualBasic.FileIO.TextFieldParser MyReader = new Microsoft.VisualBasic.FileIO.TextFieldParser(OpenFileDialog1.FileName))
                    {
                        MyReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited;
                        MyReader.SetDelimiters("\t");
                        String[] currentRow;
                        i = 0;
                        while (MyReader.EndOfData != true)
                        {
                            try
                            {
                                currentRow = MyReader.ReadFields();
                                j = 0;
                                foreach (String currentField in currentRow)
                                {
                                    RCData[i, j] = currentField;
                                    if (j < 9) { j = j + 1; }
                                }
                            }
                            catch (InvalidCastException ex)
                            {
                                MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                            }
                            if (i < 49) { i = i + 1; }
                        }
                    }
                    String OutText = "";
                    for (i = 0; i < 49; i++)
                    {
                        for (j = 0; j < 9; j++)
                        {
                            OutText = OutText + RCData[i, j] + " , ";
                        }
                        OutText = OutText + "\r\n";
                    }
                    if (SaveFileDialog1.ShowDialog() == DialogResult.OK)
                    {
                        using (StreamWriter outfile = new StreamWriter(SaveFileDialog1.FileName))
                        {
                            outfile.Write(OutText);
                        }
                    }
                }
            }
        }
    }
    


  6. Form1コードの説明
    (1)using System.IO;はStreamReaderクラスを使用するのに必要です。
    (2)String[,] RCData = new String[50, 20];は変数 RCDataをString型の2次元配列で生成します。
    (3)OpenFileDialog1.ShowDialog()はOpenFileDialogを開きます。
    (4)using (){}は{}の間で変数が有効となります。
    (5)Microsoft.VisualBasic.FileIO.TextFieldParser MyReader = new Microsoft.VisualBasic.FileIO.TextFieldParser(OpenFileDialog1.FileName)は、変数MyReaderをMicrosoft.VisualBasic.FileIO.TextFieldParser型で生成し、初期値にOpenFileDialogで選択したファイルを設定します。
    (6) MyReader.TextFieldType = FileIO.FieldType.DelimitedはTextFieldTypeをフィールドが区切り形式に設定します。
    (7)MyReader.SetDelimiters("\t")でタブ区切りに設定します。
    (8)while (MyReader.EndOfData != true){}でデータエンドまで繰り返します。
    (9)foreach (String currentField in currentRow){}で行内のタブ区切りがなくなるまで繰り返します。
    (10) OutText = OutText + RCData[i, j] + " , ";で出力用データを作成します。
    (11)SaveFileDialog1.ShowDialog() でSaveFileDialogを開きます。
    (12) using (StreamWriter outfile = new StreamWriter(SaveFileDialog1.FileName)){}で出力ファイルを開きます。
    (13)outfile.Write(OutText);データを書き出します。



    感想:
    (1)Microsoft.VisualBasic.FileIO.TextFieldParserクラスはC#でも使用できました。
    (2)VBのMsgBox()はC#では使用できず、MessageBox.Show()となりました。
    (3)VBのComputer.FileSystem.WriteAllText()はC#では使用できず、 outfile.Write()となりました。
    (4)StreamWriter型の変数の生成はusing (){}で使用範囲を指定する必要がありました。
    (6)タブ区切りテキストの入出力は数値計算プログラムでは、頻繁に使用します。従来はタブ区切りテキストの解析を純粋のC言語で組む必要がありましたが、Microsoft.VisualBasic.FileIO.TextFieldParserクラスを使用するとコードが簡単になります。







12章:バイナリ ファイルを読み取るの作成 (C#)に行く。

トップページに戻る。