HTMLのテーブルデータを読み込ませてCSVファイルを作成しようと思っています。
<tr><td>2004年6月4日</td><td>705</td><td>11,400</td><td>712</td></tr>
<tr><td>2004年6月3日</td><td>714</td><td>10,500</td><td>699</td></tr>
<tr><td>2004年6月2日</td><td>705</td><td>6,100</td><td>705</td></tr>
・
・
・
をTMemoに貼り付けて
2004/06/04,705,11400,712
2004/06/03,714,10500,699
2004/06/02,705,6100,705
という具合に変換したいのですが、日付をyyyy/mm/ddへの変換や1000以上の値にはコンマがついてしまうため
ほとほと困っています。
どうかご教授ください。よろしくお願いします。
Memo1 に
<tr><td>2004年6月4日</td><td>705</td><td>11,400</td><td>712</td></tr>
<tr><td>2004年6月3日</td><td>714</td><td>10,500</td><td>699</td></tr>
<tr><td>2004年6月2日</td><td>705</td><td>6,100</td><td>705</td></tr>
を貼り付けて以下のコードを実行すると Memo2 の内容が
2004/06/04,705,11400,712
2004/06/03,714,10500,699
2004/06/02,705,6100,705
になりました。
function TableToCSV(s:string;SL:TStringList):string;
begin
SL.CommaText := StringReplace(StringReplace(Copy(s,9,Length(s)-18),',','',
[rfReplaceAll]),'</td><td>',',',[rfReplaceAll]);
SL[0] := FormatDateTime('yyyy/mm/dd', VarToDateTime(SL[0]));
result := SL.CommaText;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
SL:TStringList;
i:integer;
begin
SL := TStringList.Create;
try
for i := 0 to Memo1.Lines.Count-1 do
Memo2.Lines.Add(TableToCSV(Memo1.Lines[i],SL));
finally
SL.Free;
end;
end;
jokさんレスありがとうございます。
jokさんのコードを実行してみたところうまくいきました!
StringRelpaceの使い方が鍵だったんですね。
目からうろこです。
ありがとうございました。
ツイート | ![]() |