AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
データベース【住所録を作ろう(2)】
せっかく「住所録」を作っても他に利用出来ないと勿体ないですから、例えば、Microsoft EXCEL等にデータを受け渡したいとします。そういった場合には、CSVファイル(カンマ付きテキストファイル)を利用出来るようにすれば良いと思います。
通常のCSVファイルは、各項目をカンマ(,)で区切り、数値はそのまま数値で書き出し、文字は二重引用符(")で囲って書き出すようにします。このほか、タブコード(#9)で区切ったテキストファイルという事も可能です。
1行目は項目名を書き出す事にして、2行目以降に登録したデータを書き出す事とします。

プロジェクト「d009」の準備を行います。「C:\DelphiProgram\jww」フォルダの中に「d009」というフォルダを作成し、前回の「d008」からファイルを全部コピーしてきます。Delphi6を起動します。メニュー「プロジェクト」→「オプション」を実行し、下記の設定を行います。
[アプリケーション]頁
 タイトル
d009−住所録2
[ディレクトリ/条件]頁
 パス及びディレクトリ
C:\DelphiProgram\db\d009

メニュー「ファイル」→「プロジェクトに名前を付けて保存」
「C:\DelphiProgram\db\d009」の中に「d009.dpr」として保存
メニュー「プロジェクト」→「d009を再構築」を実行し、エクスプローラ等で不要になった「C:\DelphiProgram\db\d009」内にある「d008.〜」のファイルを消しておきます。

メニュー「表示」→「プロジェクトマネージャ」
を実行し、コード画面の左側にドッキングさせておきます。
Form1の画面レイアウトを下記のようにしました。


(5)データCSV書き出し
住所録のテーブルをCSV形式ファイルとして書き出し(名前を付けて保存)します。フォルダ選択・ファイル名指定は SaveDialog コンポーネントを利用します。テキストファイルの保存の基本は以下のようになります。
var
 F : TextFile ;
begin
 try
  AssignFile(F, fn);  // fn:ファイル名
  ReWrite(F);
 
  WriteLn(F, '〜〜〜'); // 〜〜〜書き込み&改行
  ・・・・
 
  CloseFile(F);
 except
  CloseFile(F);
  if FileExists(fn) then DeleteFile(fn);
end;
ファイル保存に失敗する可能性を考えて例外処理を施します。もし例外(書き込みエラー)が発生した場合は、ファイルを閉じて、中途半端に作成されたファイルを削除するようにしておきます。
 
但し、Microsoft ExcelでのCSVファイルを開く機能では、二重引用符で囲って≪文字列です≫という意図で書き出しても、その内容が数字の状態であれば、それを数値データとして勝手に設定されてしまいます。それを避ける為には、敢えて文字データを追加したりするのですが後の処理が面倒になってきますので、タブコード区切りによるテキストファイルの書き出しも出来るようにしておきます。この場合は「テキストファイルウィザード」画面が表示され、各項目を選択し「文字列」に指定する事が出来ます。
 

(6)データCSV読み込み
住所録のテーブルをCSV形式ファイルから読み込みます。フォルダ選択・ファイル名指定は OpenDialog コンポーネントを利用します。テキストファイルの読み込みの基本は以下のようになります。
var
 F : TextFile ;
 s : string ;
begin
 try
  AssignFile(F, fn);  // fn:ファイル名
  FileMode := 0;
  Reset(F);
 
  ReadLn(F, s); // 1行読み込み
  ・・・・
 
  CloseFile(F);
 except
  CloseFile(F);
end;
読み込みを行う場合は、現在のテーブルを一旦削除し、テーブルを新規作成し、ファイルから読み込んだ内容でデータの追加登録を行っていくようにします。そのため現在のテーブルは破棄されますので注意して下さい。
CSVファイルやTXTファイルを読み込む際、1行の文字列を読み込んだ後、各項目毎に切り出す必要があります。通常は、文字列の最初から1文字ずつ見ていって、区切り文字が来たら次の項目へ、文字列前後の二重引用符は無視する、といった解読プログラムを作る必要がありますが、この場合に限っては、TStringList の CommaTextプロパティを利用すれば比較的簡単に項目毎に切り出す事が出来るようになります。各項目の文字列の前後の二重引用符は自動的にカットされます。区切り文字はカンマ(,)でもタブコード(#9)でも自動的に判別してくれます。
var
 u : TStringList ;
 s,t : string ;
 i : integer ;
begin
 ・・・・
 u := TStringList.Create ;
 u.CommmaText := s ;  // s:「"〜","〜",・・・」
 for i:=0 to u.Count-1 do
  t := u[i] ;  // u[i]に各項目内容が入る
 ・・・・
 u.Free ;     // 用事が済んだら解放
 ・・・・
end;
 
なお、ここでは考慮していませんが、想定外のファイルを選択した時にはどのようにするか、というような事を考える必要があります。例えば、登録番号が無い状態であるとか、登録番号が重複しているとか、項目の並びが違っている場合など。
あまりに考えすぎて処理が遅くなったり設定画面等で2度手間になったり逆に使いにくくなる場合もあるので、ある程度は「決め打ち」で良いとする場合も多いです。
 

プログラムの内容についてはソースプログラムを参照して下さい。
 
 
 
 


 
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
シェアウェア
Script!World
データベース
 A B C D
 E F G H
 I J K L
 M N O P
 Q R S T
 U V W X
 Y Z
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.