テキストファイルの入出力 1 0. 今回の目的前回までは 2 回にわたって繰り返しについて学んできました 今回からテキストファイルの入出力について学ぶことにします 1. テキストファイルへの出力 1.1 テキストファイルについてテキストファイルとは コンピュータで扱うことが出来るファイルの中で最も基本的なファイルであり どの様な OS でもサポートされているファイル形式です Windows においては メモ帳 などで閲覧 編集出来るため コンピュータによる処理結果を出力し すぐ確認したい場合などに適しています また エクセルもテキストファイルの入出力に対応しているため 出力結果をエクセルに読み込めば 即座に表やグラフ化することが可能です 1.2 テキストファイルへの出力 1 それでは 実際にテキストファイルを使用してみましょう 前回作成したプログラムをもとに Fig. 8 1 に示す様にコントロールを追加します 追加するコンポーネントのリストは下記の通りです ラベル:Text プロパティを 出力ファイル名 に変更する テキストボックス:Name プロパティを txb_out_fn に変更する チェックボックス:Name プロパティを chb_file_output に変更し Text プロパティを テキストファイルへ出力する に変更する セーブファイルダイアログ Tips 248, p.391 ( ダイアログ 内):Name プロパティを save_f_dlg に変更する 出力するファイルの名前を選択 表示するためのテキストボックス 飽和蒸気圧の計算 ボタンがクリックされたときに 計算結果をテキストファイルへ出力するかどうかの選択用チェックボックス SaveFileDialog( セーブファイルダイアログ ) を追加して 名前 を save_f_dlg へ変更する Fig. 8 1 テキストファイルへの出力に向けた拡張 - 70 -
まず 出力ファイル名を指定できるようにします 出力ファイル名の指定には セーブファイルダイアログコントロールを使用します セーブファイルダイアログコントロールは ダイアログ ページにありますので これを追加して下さい セーブファイルダイアログコントロールでは Windows で良く目にする 保存の為のウィンドウ が使用されます 出力ファイル名は セーブファイルダイアログコントロールの FileName プロパティに保持されます ユーザーが 保存 ボタンをクリックしたときだけ処理を実行するには キャンセルボタンがクリックされたときには処理を中断する 様に記述します ダイアログウィンドウでどのボタンがクリックされたかを識別するために DialogResult 型 の変数を定義し 以下の様に記述します (DialogResult 型変数 ) = ( ダイアログ用コンポーネント ).ShowDialog(); if ((DialogResult 型変数 )== DialogResult.Cancel)) { return; } (DialogResult 型変数 ) へは ダイアログウィンドウで押されたボタンが代入されます では 先ほど追加したエディットコントロール (txb_out_fn) をダブルクリックしたとき 保存ダイアログ を表示し 保存ボタン がクリックされた場合にそのファイル名を txb_out_fn に表示するように変更してみましょう txb_out_fn の DoubleClick イベント (Click イベントではないことに注意 ) 内に 以下の様に記述して下さい キャンセルボタン がクリッ クされた時は処理を中断する Fig. 8 2 出力ファイル名の指定 次に テキストファイルへの出力方法について見ていきましょう Tips 238 内, p.374 テキストファイルへ出力するには 下記の手順で行います 1. new 演算子 によって StremWriter 型オブジェクトのインスタンスを作成するとともに ファイル名関連付ける 2.WriteLine により必要な情報をファイルへ書き込む Tips 245, p.384 ( 手順 2 を必要な回数だけ繰り返す ) 3.Close コマンドによって ファイルを閉じるなお ファイルを閉じ忘れると ファイルが破損する可能性がありますので ファイルへの出力処理を記述する前に まずは必ず Close を記述する様に習慣付けて下さい それでは 実際に出力部分を作成していきましょう 前回作成した Click イベントに Fig. 8 3 を追加します - 71 -
チェックボックスにチェックが入っていて 出力ファイル名が指定されているときは txt_file に指定したファイル名を割り当てる temp_output_flag を true に設定する テキストファイルへ出力する にチェックが ついていない場合は null ( 無 の意味 ) を 代入して 変数 txt_file の値を確定する Fig. 8 3 ファイルへの出力の為の設定をするなお if 文の処理は チェックボックスにチェックが入っていて 出力ファイル名が指定されているときは txt_file に指定したファイル名を割り当てる temp_output_flag を true に設定するという事を意味しています 次に ファイルへの出力部分を追加していきます まず for 文の前に Fig. 8 4 に示す部分を追加します この部分を追加する Fig. 8 4 出力部分を記述する 1 ここでは もし temp_output_flag が true なら テキストファイルへ T[K] みます つぎに for 文のブロック中に Fig. 8 5 に示す部分を追加します Ps[Pa] を書き込 - 72 -
この部分を追加する Fig. 8 5 出力部分を記述する 2 最後に for 文のブロックの下 (for 文のブロックの外 ) に Fig. 8 6 に示す部分を追加します この部分を追加する 記述する場所に注意! For 文のブロック ( 中かっこ ) の外側 ( 下側 ) に書くこと! Fig. 8 6 ファイルを閉じるための記述を追加コンパイルをしてエラーが無ければ実行してみて下さい 出力ファイル名は任意ですが 出力先は USB メモリーにしておいて下さい 実行したら 出力したファイルをエクセルで開いて下さい 正しく計算結果が出力されているでしょうか? - 73 -
2. 今回のまとめ今回は テキストファイルへの出力方法に加えて セーブファイルダイアログコントロールの使用方法について学びました これらは 実用的なアプリケーションの作成には必須ですから しっかりと使用方法をマスターしましょう それでは 今回のまとめを以下に示します 1 セーブファイルダイアログコントロールは 出力するファイルの名前を指定するためのコント ロールであり 出力ファイル名は FileName プロパティに保持される Tips 248, p.391 また 保存 ボタンがクリックされたときのみ処理を実行するには 以下の様に記述する (DialogResult 型変数 ) = ( ダイアログ用コンポーネント ).ShowDialog(); if ((DialogResult 型変数 )== System.Windows.Forms.DialogResult.Cancel)) { return; } 2 テキストファイルへ出力する場合には 以下の手順で行う Tips 238 内, p.374 1. new 演算子 によって StremWriter 型オブジェクトのインスタンスを作成するとともに ファイル名関連付ける 2.WriteLine により必要な情報をファイルへ書き込む Tips 245, p.384 ( 手順 2 を必要な回数だけ繰り返す ) 3.Close コマンドによって ファイルを閉じる 3 ファイルの拡張子は ChangeExtension というコマンドによって変更できる なお ChangeExtension の書式は以下の通り System.IO.Path.ChangeExtension( ( もとのファイル名 ), ( 新しい拡張子 ) ) 4 ファイルへ文字列を 1 行出力するには 以下に示す Writeln 関数を用いる Tips 245, p.384 WriteLine(( 文字列 )); - 74 -
宿題新しいプロジェクトを作成し for ループを用いて 3 次関数の値を繰り返し計算し テキストファイルへ出力せよ なお 繰り返し回数はとし 各ステップにおいて 関数の計算に用いた値 (x の値 ) と 3 次関数の値をタブ区切りで結合し テキストボックスへ表示するとともにファイルへ出力すること ( ヒント ) 出力するファイル名の選択は 今回のプログラムと同様の方法で行う ボタンをクリックされたときの処理については今回のプログラムと同様の方法で行うことができ Antoine 式の部分のみ 3 次関数の式へと変更する なお Visual C# の宿題は そのままメールに添付して提出することはできません 提出方法については 別紙 VisualC# 編の課題提出方法について を参照して下さい また zip ファイル名は 下記にようにすること zip ファイル名の例 化学工学プログラミング _ 水田 _20190628.zip 先頭は必ず 化学工学プログラミング とする 次に名前を入れる 課題が出された年月日 (8 桁表記 ) ( 提出日ではないことに注意 ) 提出先メールアドレス : kmizuta@cen.kagoshima-u.ac.jp メールの題名 : 化学工学プログラミング課題提出( 氏名 _ 課題が出された日 ) とすること ( 題名が不適切だとメール振り分けの際に行方不明になることがあるため ) 次回のテキストについて 事前にダウンロードの上 指定参考書なども見ながら予習しておくこと! ( プログラムコードの記述まではしなくても良いが 目を通しておくことにより理解度向上に役立つ!) http://ecp.cen.kagoshima-u.ac.jp/group/tansou/text/che_pr/filelist_main.html - 75 -