EXCELから変換したcsvファイルを読み、StringListに取り込もうとしています。
csvファイルの中身は
aaa,bbb,10,123
aaa,bbb,10,"1,234"
となっていて数値が4桁以上だとダブルクォーテーションで囲まれ
カンマが間に入っています。
このcsvファイルを
以下の方法で読もうとすると1行目はうまく取り込めますが、
2行目は1,234が1と234に分かれてしまいます。
上手く処理できる方法がありましたらご教授頂けると助かります。
----------------------------------------------------------------
Result := CsvFileName;
Delimiter := ',';
// CSVファイルの読み込み
AssignFile(W_FILE, CsvFileName);
Reset(W_FILE);
try
// レコードがある場合、繰り返す。
while not EOF(W_FILE) do
begin
Readln(W_FILE, W_STR); // 1行読む
// CSVデータ分割
StrListC := TStringList.Create;
if W_STR <> '' then
begin
L := Length(Delimiter) - 1;
N := AnsiPos(Delimiter, W_STR);
while N > 0 do
begin
StrListC.Add(Copy(W_STR, 1, N - 1));
Delete(W_STR, 1, N + L);
N := AnsiPos(Delimiter, W_STR)
end;
StrListC.Add(W_STR);
end;
finally
CloseFile(W_FILE)
end; { try }
1行分のデータをTStringList.CommaTextに放り込めば、Stringsで1列目から順番に取り出せるかと
[フィールドに空白(半角SP)が含まれる CSV ファイルを処理するには?(2006 以降)]
http://ht-deko.com/tech036.html#tech065
DEKO様
http://ht-deko.com/tech036.html#tech065
を参考に修正したらできました。
私の方法ですと
StrListC.Delimiter := ','; // カンマ区切り
StrListC.StrictDelimiter := True; // Delimiter で指定された区切り文字以外は許容しない
// レコードがある場合、繰り返す。
while not EOF(W_FILE) do
begin
Readln(W_FILE, W_STR); // 1行読む
StrListC.DelimitedText := W_STR;
でダブルクォーテーションが取れました。
ありがとうございます。
au様
TStringList.CommaText
でもテストしてみます。
ありがとうございました。
ツイート | ![]() |