外字の判別について

解決


yamada  2013-09-20 00:40:50  No: 45296

いつもご指導いただきありがとうございます。

別のコンピュータで作成したCSVデータを編集して、
CSVデータに保存しています。

この時、外字があるせいで、
たまたまカンマが入ったりして正常にデータが作成できません。

該当の外字を削除、別の文字に置換えをしたいのですが、
答えが出ません。

対処法があればご教授いただけると助かります。
よろしくお願いします。


Nov  2013-09-20 14:36:36  No: 45297

>外字があるせいで、たまたまカンマが入ったりして
という状況がわかりませんけど...  外字のコード範囲がわかれば良い
ということなら、ググれば出てきますよね。

http://support.microsoft.com/kb/933217/ja

こんあ単純な話ではなかったら、無視してください。


take  2013-09-20 17:46:24  No: 45298

>外字があるせいで、たまたまカンマが入ったりして

同じく状況がわかりません。
TStringListのcommatextを使って
カンマ区切りの1行を分解したけど
うまくいかないということでしょうか?

「,」文字コード 2Ch が2バイト目に含まれる外字があるということ
でしょうか?

どういうやりかたが「普通」かはわかりませんが
文字列中にカンマがあることを想定すると

×:1行目,カンマ「,」を使うと区切られてしまう
○:2行目,"ダブルクォーテーションで囲むと「,」が区切りではない"

とかやり方はあります。

外字を置き換えるというのもわかりますが
根本的に勘違いされている気がします

℡→Telなど?


yamada  2013-09-20 18:39:38  No: 45299

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を開いた時に、
見た目上でたまたまカンマになっているのでしょうか。


yamada  2013-09-20 20:45:29  No: 45300

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;


yamada  2013-09-20 20:46:07  No: 45301

チェック忘れてました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加