【DO!BOOK・ページリンク】
migaro_tech2013   82 / 100

BOOKをみる

10秒後にBOOKのページに移動します


80 警告といったものを時系列で絶えず出力 していくことが肝要となる。また、複数 の機能から同じログファイルに出力した り、前回の続きに出力することが行われ る。そのため、処理開始時に既存のログ 内容をメモリ上に展開して、処理終了時 に編集されたログ内容を出力するといっ た使い方は避けるべきである。  今回は、「年月日時分秒ミリ秒 + 区 切り文字 + 出力メッセージ」という出 力フォーマットでログを出力する。  ログ出力の基本的な処理手順は以下の ようになる。 【ログ出力の処理手順】 ・ログファイルが存在するか確認する  ○ ログファイルが既存であれば追記 モードでファイルを開く  ○ ログファイルが存在しなければ新規 作成する ・ 出力フォーマットに合わせたログデー タを作成する ・ログデータをファイルに出力する ・ログファイルを閉じる  では実際に、低レベルなファイル操作 命令群を使ってSample.log ファイルに 出力する。この例を、ソース2 として示 す。【ソース2】  出力前にログファイルが既存かどうか を調べ、追記するか、新規作成するかを 判断している。また、網掛けの箇所でロ グファイルに対する出力を行っている。  ログ出力を行う場合、ファイルに対す る操作が単純であるため、低レベル命令 群でも記述しやすい。また、ここで使っ た命令は、既存ファイルの読み込みやメ モリ上への展開といったことを一切行っ ていないため、ファイルサイズの影響を ほとんど受けない。  以上、CSV データ出力とログ出力と いった2 つの機能を、TStrings 継承ク ラスと低レベル命令群を使った手法で実 装した。  このサンプルコードは、ファイル名が 固定になっている等、紹介用に若干機能 を割愛しているが、多少の手直しで十分 利用していただけるであろう。 Excel で保存し直すと、通常の文字項目 はダブルクォーテーションが外されてし まう。これは仕様の違いによる問題であ る。  今回は、基本的なCSV のルールに従 うが、より互換性を高めるために、文字 列を出力する場合は必ずダブルクォー テーションで囲うルールとして実装を考 える。  CSV データ出力の基本的な処理手順 は以下のようになる。 【CSV データ出力の処理手順】 ・データの先頭に移動 ・データを最終まで繰返処理  ○項目ごとの繰返処理   ◎ 項目の種類ごとに異なるルールで テキスト化   ◎カンマを追加  ○ 出力用ワークに1 レコード分の CSV データを追加  ○次のデータへ移動 ・ 全データ分のCSV データをファイル 出力  では実際に、cdsSample というTClient DataSet のデータを、TStringList クラ スを使ってSample.csv ファイルに出力 する。この例を、ソース1 として示す。 【ソース1】  for を使った内側の繰り返し処理は、 同一レコードの全項目に対する処理であ る。while を使った外側の繰り返し処理 は、全レコードに対する処理になる。ま た、網掛けの箇所でCSV ファイルを保 存している。  CSV ファイルの場合、既存のCSV ファイルが存在しても、追記せずに既存 ファイルを破棄して新規にファイルを作 成することが一般的である。そのため、 TStringList クラスを使うのが適してい る。  しかし、すべてのデータをメモリ上に 展開するため、あまりに膨大なデータを 処理するのは向かない点に注意が必要 だ。大量のデータを処理するなら、 TFileStream 等を利用するほうが適し ている。 ログ出力の具体例  ログ出力は、何らかの操作やエラー、  Delphi/400 では、さまざまなデータ の集合を取り扱うクラスとして、「スト リーム」と呼ばれるクラスが提供されて いる。その中でも、ファイル操作に特化 したのがTFileStream というクラスに なる。  このクラスを使用することで、ファイ ルのオープン・クローズ制御やファイル 作成、モード指定等の煩雑な処理を簡単 に実現できる。  また、他のストリーム系クラスとの共 通機能を利用することで、メモリ上に展 開したデータのファイル保存や、読み込 んだファイル内容を通信データにのせて ダウンロードする機能を提供するといっ たことに利用されている。 ・ TStrings 継承クラスによるテキスト ファイル操作  クラス:例)TStringList  TStrings 継承クラスは、どちらかと いうとファイル操作用ではなく、文字列 操作用のクラスであり、それにファイル 出力機能が備わっているものである。  しかしながら、CSV データの編集機 能を備えており、利用頻度が高い。その ため、TStrings 継承クラスによるテキ ストファイル操作が行われている。  なお、この具体的な使用方法は、次章 でご紹介する。 3.ファイル操作の具体例  前章で挙げたファイル操手法のいくつ かを使って、実際にファイル出力する例 をご紹介する。 CSVデータ出力の具体例  CSV とはデータの内容をテキスト化 し、順番に出力したものである。出力す る際、項目ごとの区切りはカンマで、レ コードごとの区切りは改行で行う。  古くから利用されているにもかかわら ず、詳細な仕様が決定されたのは、2005 年と比較的新しいため、仕様確定前から 使われていたルールが非常に多く存在す る。  例えば、IBM i Client Access 等で CSV 出力を行うと、文字項目がダブル クォーテーションで囲われる。これを