掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
SHIFT-JISコードに変換 (ID:32256)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
JISコードで書かれたテキストファイルをSHIFT-JISコードに変換したいため、以下のようなコードを書いて実行してみました。 100KBほどのテキストファイルならば素早く変換できるのですが、20MBぐらいのテキストファイルの場合、やはり時間がかかってしまいます。 フリーソフトの中には大きい容量のファイルでも2〜3秒で変換してしまうものがあります。どのような工夫が必要かどなたか教えてください。 //Jisコード1文字をSJisコード1文字に変換 function Jis_SJis(c0,c1: AnsiChar): AnsiString; var b0,b1,off: byte; begin b0 := Byte(c0); b1 := Byte(c1); Result := ''; if (b0 < 33) or (b0 > 126) then exit; off := 126; if b0 mod 2 = 1 then if b1 < 96 then off := 31 else off := 32; b1 := b1 + off; if b0 < 95 then off := 112 else off := 176; b0 := ((b0 + 1) shr 1) + off; Result := AnsiChar(b0) + AnsiChar(b1); end; //Jisコードの文字列をSJisコードの文字列に変換 function JisToSJis(const s: AnsiString): AnsiString; var i: integer; flg: boolean; begin flg := false; Result := ''; i := 1; while (i <= Length(s)) do begin if Copy(s,i,3) = #27 + '$B' then begin flg := true; i := i + 3; continue; //空の文字列がありえるので end; if (Copy(s,i,3) = #27 + '(B') or (Copy(s,i,3) = #27 + '(J') then begin flg := false; i := i + 3; continue; //空の文字列がありえるので end; if flg then begin if Length(s) > i then Result := Result + Jis_Sjis(s[i],s[i+1]); inc(i); end else Result := Result + s[i]; inc(i); end; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.