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