CGI-BBS > CGI > Perl > CSVエディタをEUC仕様に変える方法


カレッヂ
カレッヂ


質問者 あき  投稿日 3/30(土) 13:24:24
CSVエディタ http://www.rescue.ne.jp/cgi/csveditor/ についてなんですがこれは、SJIS仕様なのでEUC仕様にするためのプログラム変換はどうやったらいいのか教えてもらえないでしょうか?
宜しくお願いいたします。
回答者 今夜がやすだ  [削除]  投稿日 4/1(月) 01:00:15
jcodeのconvert関数にて第二引数がsjisになってるのをeucに変えるだけだと思います。たぶん。(そのCGIを一見しただけなので、違ってたら、ごめん。)
質問者 あき  [削除]  投稿日 4/1(月) 14:24:36
ありがとうございます。早速やってみたのですがやはり元のデータがEUCなので文字化けしてしまいます。csvedit.cgiをEUCにすれば直るのでしょうか?
その場合csvedit.cgiをEUCに直す方法が分れば助かるのですが・・・
大変申し訳ないのですが宜しくお願いいたします。
回答者 今夜がやすだ  [削除]  投稿日 4/2(火) 00:16:27
失礼しました。convertにてsjisをeucにしただけでは対応できないようでしたね。
csvedit.cgiならびに*.csvなるインプットデータファイルもeucにする必要があるようです。
で、変換方法は、unixにしろwinにしろnkfコマンドを使うとかjcode.plを使って自作スクリプトとかいろいろありそうです。
nkf -e [input file] > [output file]
nkfでeucにするならこうなるでしょう。
自作スクリプト[わたしの]なら、
./convert_code.pl data.csv data.csv.euc euc
になるでしょう。

ここからわたし作のスクリプト、実行できるようにchmod、ならびにperlパスの設定をお忘れなく。

#!/usr/local/bin/perl

require './jcode.pl';

my($infile,$outfile,$code);
local(*content);

if($#ARGV != 2){
        print "usage $0 [input file] [output file] [euc|sjis|jis]\n";
        exit 1;
}
$infile=$ARGV[0];
$outfile=$ARGV[1];
$code=$ARGV[2];

open(IN,$infile) || die "Cannot open $infile\n\n$!";
$content=join'',map{$_}<IN>;
close IN;
jcode::convert(*content,$code);
open(OUT,">".$outfile) || die "Cannot open $outfile\n\n$!";
print OUT $content;
close OUT;

exit 0;
質問者 あき  [削除]  投稿日 4/2(火) 17:56:15
丁寧なご指示ありがとうございます。ですが私の勉強不足のせいでうまくできません。
nkfコマンドについては、調べてみてやってみてはいるのですが・・・nkfは、winの場合コマンドプロンプトでやるのでしょうか?
あと、今夜がやすだ様の自作スクリプトなんですが具体的にどのようにしたらいいかまで教えてくれましたら幸いです。
いろいろ注文つけて申し訳ございませんが初心者なもので宜しくお願いいたします。
回答者 今夜がやすだ  [削除]  投稿日 4/3(水) 00:20:52
http://hp.vector.co.jp/authors/VA002468/にて、nkf for win32っていうwindows版 nkfがありました。また、GUIに対応した皮肉な名前のEasy Nkf32っていうものもありました。


あの自作のスクリプトをwindowsで使う場合、もちろんperlが入ってないと話になりません。UNIXならほとんどのシステムでperlは入ってるはずです。(前回までその前提で話してました。)
で、windowsでperlを使う場合、ActivePerlやCygwinでコンパイルする場合があります。(他にもあるやもしれません。)ActivePerlについてはこの掲示版上で何度か話題にもなってたような気がしますActiveStateのソフトです。cygwinの場合、コンパイルするまでもなくバイナリが用意されているかもしれませんが、多少のUNIXの知識が必要かもしれません。なので、cygwinについてはここで話すとたいへんなので省略させてください。興味があったら他のサイトとかで情報を収集してください。m(__)m
そんで、ActivePerlの場合インストールすると勝手に環境変数(PATH)にActivePerlのパスが登録されると思います。そうすると、DOS窓でperlが使える環境になると思います。
> perl --version
とかやって、確認してみてください。成功ならActivePerlのバージョンがでるはずです。
で、上の自作スクリプト名を適当にconvert_encode.plとかにして、
> perl -w convert_encode.pl data.csv data.csv.euc euc
とかすると、data.csvなるSJISのファイルを元にdata.csv.eucなるEUCになったファイルが作成されます。


そういえば、他に文字コードを変える方法として、エディタを使う方法もありました。windowsでもかなりの数のそんな機能がついたものがフリー、シェアにかかわらず出てるはずです。unixなら言わずと知れたさまざまなemacsがあるでしょう。windowsでも名前を換えて移植されています。
質問者 あき  [削除]  投稿日 4/3(水) 14:26:58
こんにちは、いつも丁寧にありがとうございます。
分らないながらも丁寧な指導により問題が解決できました。ありがとうございます。また何かありましたらご指導いただけたら幸いです。

このページは終了したので返信(回答)は書きこめません

Web裏技