No.61へ返信

投稿フォーム
Name:  
E-Mail:  
[@は★に変換されます]
URL:  
Title:  
Message:  
Color:  
Password:  
Key:  
"cafe"と入力(スパム対策)

返信する!

delphi5でのXML変換


はじめまして。

今度、Delphi5を使って、CSVからXMLへの変換を
行わなければならなくなったのですが、Delphiも
XMLについても初心者で、なかなか分かりません。
そこで何かアドバイスを頂けいればと思いまして、
書き込みさせて頂きました。

調べてみてDelphiでXMLを操作するには、『TXMLDo
cument』が良いらしいとあったのですが、Delphi5
では標準?ではないようですが、利用する方法は
ないでしょうか?

利用できるのであれば、その環境作成方法などを教
えて頂けると非常に助かります。
また、他にもっと良い方法があれば教えて頂けな
いでしょうか?

大変申し訳ありませんが、よろしくお願いします。

Delphi:Delphi Enterprise Version5.0

'★'を'@'に変換して下さい!

From: ono

2010/06/29 (Tue) 15:09 ... No.61

Re: delphi5でのXML変換

CSV→XMLなら比較的難しくない気がしますが、DelphiもXMLも初心者というのは厳しいかもしれません。ちょっと参考までに、即興で書いてみましたが、どうでしょう?関数名を"CSVtoXML"とし、引数にファイル名を与えるとします。例えば、以下のようなデータ形式(CSV形式)を想定しています。
(最初の1行はデータの項目名です。)

=============
[data.csv]
名前,性別,年齢
太郎,男,26
花子,女,24
=============

高速化したいのであればポインタでプログラムするのが一般的です。今回は簡略化のためにTStringListを使ってファイルを読み込んでいます。かなり強引ですが…(笑)

function CSVtoXML(const FileName : String) : String ;
var i,j : Integer ;
  ls,lsItem,lsData : TStringList ;
begin
 if Not FileExists(FileName) then Exit ;
 Result := '' ;
 ls := TStringList.Create ; //データ行
 lsData : TStringList.Create ; //解析中の行
 lsItem : TStringList.Create ; //項目名
 try
  ls.LoadFromFile(FileName) ;
  if ls.Count = 0 then Exit ; //データが0行なら終了
  lsItem.CommaText := ls[0] ; //0行目(項目名)情報をlsItemへ
  For i := 1 to ls.Count-1 do //データを1行ごとに解析→変換
  begin
    lsData.CommaText := ls[i] ; //i行目のCSV情報をlsDataへ
    For j := 0 to lsData.Count-1 do
     Result := Result + #13#10 +
             Format('<%s>%s</%s>',
                [lsItem[j],lsData[j],lsItem[j]]) ;
  end ;
 finally
  ls.Free ;
  lsItem.Free ;
  lsData.Free ;
 end ;
end ;

[プログラム実行結果(たぶん...)]
<名前>太郎</名前>
<性別>男</性別>
<年齢>26</年齢>
<名前>花子</名前>
<性別>女</性別>
<年齢>24</年齢>

*commaText関数が意外に便利です。先ほども言ったように、速度重視ではないので、数千行もあるデータの変換には向きません。

From: 管理人

2010/06/29 (Tue) 21:36 ... No.62

Re: delphi5でのXML変換

早速の回答ありがとうございます。

これを参考にさせて頂こうと思います。

'★'を'@'に変換して下さい!

From: ono

2010/06/30 (Wed) 08:32 ... No.63