いつもご指導いただきありがとうございます。
別のコンピュータで作成したCSVデータを編集して、
CSVデータに保存しています。
この時、外字があるせいで、
たまたまカンマが入ったりして正常にデータが作成できません。
該当の外字を削除、別の文字に置換えをしたいのですが、
答えが出ません。
対処法があればご教授いただけると助かります。
よろしくお願いします。
>外字があるせいで、たまたまカンマが入ったりして
という状況がわかりませんけど... 外字のコード範囲がわかれば良い
ということなら、ググれば出てきますよね。
http://support.microsoft.com/kb/933217/ja
こんあ単純な話ではなかったら、無視してください。
>外字があるせいで、たまたまカンマが入ったりして
同じく状況がわかりません。
TStringListのcommatextを使って
カンマ区切りの1行を分解したけど
うまくいかないということでしょうか?
「,」文字コード 2Ch が2バイト目に含まれる外字があるということ
でしょうか?
どういうやりかたが「普通」かはわかりませんが
文字列中にカンマがあることを想定すると
×:1行目,カンマ「,」を使うと区切られてしまう
○:2行目,"ダブルクォーテーションで囲むと「,」が区切りではない"
とかやり方はあります。
外字を置き換えるというのもわかりますが
根本的に勘違いされている気がします
℡→Telなど?
Novさん ありがとうございます。
外字のコード範囲で削除しようと思いまして、
調べていたのですが、以下のようにVB等はよく見つかるのですが、
http://okwave.jp/qa/q691058.html
色々調べて羽織るんですが、Delphiのサンプルが見つからず、
どのようにしたら良いのかわからないもので。。
takeさん ありがとうございます。
ダブルクォーテーションで囲む案は今から試してみます。
ありがとうございます。
以下、状況説明です。
元になるファイルは固定長のテキストファイルです。
CSVファイルと書きましたが、間違えです。すいません。
var
InputTextFile:TextFile;
InputFileName:string;
stWriter:TStreamWriter;
enc:TEncoding;
str_r,str_o:AnsiString;
begin
AssignFile(InputTextFile,'C:\aa.txt');
Reset(InputTextFile);
enc:=TEncoding.GetEncoding(932);//Shif-Jis指定
stWriter:=TStreamWriter.Create('C:\aa.csv',false,enc);
while Eof(InputTextFile) = false do begin
Readln(InputTextFile,str_r);
str_o:=Trim(Copy(str_r,1,10));//ここで外字が入っていた場合に、正常に作成できません。
//StringReplace(str_o,',', '',[rfReplaceAll]);//ダメでした。
stWriter.WriteLine(str_o);
end;
CSVを開いた時に、
見た目上でたまたまカンマになっているのでしょうか。
Novさんに教えていただいたページの方を参考にしながら
作成しました以下のコードで解決しました(多分
ので、解決とさせていただきます。
お二方ありがとうございました。
function GaijiCheck(Str:string):boolean;
var
i,aLen: Integer;
begin
result:=false;
aLen := Length(Str);
if aLen=0 then Exit;
for i := 1 to aLen do begin
if Str[i] in [#$E000..#$E757] then begin
result:=true;
break;
end;
end;
end;
チェック忘れてました。
ツイート | ![]() |