重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

お世話になります。
英字で名前と点数を持ったファイルがあります。

yamada<>100<>
yoshida<>96<>
ueda<>76<>
sakurai<>77<>
のような。

保有件数は分かりません。

この英字を漢字に直すcgiを
考えたいのですが。

例えば
yamada()100
yoshida()96
ueda()76
のように表示して、()(input-boxのイメージです)に漢字を入れさせる。

どのように考えればよいのでしょうか。

サンプルを表示して貰えると有難いです。
宜しくお願いします。

A 回答 (1件)

仕様の詳細が書かれていないので、不明な点は想像で書いてみました。


新規ファイルを作成し、以下のように末尾に漢字名が入るようにしました。

yamada<>100<>山田
yoshida<>96<>吉田
ueda<>76<>上田
sakurai<>77<>桜井

以下、そのコードです。
ファイル名は、質問者さんの環境に合わせて適宜変えてください。

use CGI;
use Fcntl qw(:flock);

my $org_file = 'score.txt'; # オリジナルファイル(漢字名なし)
my $new_file = 'new_score.txt'; # 新規作成ファイル(末尾に漢字名あり)

my @students;

open my $fh, -f $new_file ? $new_file : $org_file or die $!;
flock $fh, LOCK_SH;

while ( my $line = <$fh> ) {
chomp $line;

my %data;
@data{ qw(name score kanji) } = split /<>/, $line, -1;

push @students, \%data;
}

close $fh;

my @kanji_names = CGI->new->param('kanji');
if (@kanji_names) {
open my $out, '>', $new_file or die $!;
flock $out, LOCK_EX;

for my $i ( 0..$#students ) {
print {$out} "$students[$i]{name}<>$students[$i]{score}<>$kanji_names[$i]\n";
$students[$i]{kanji} = $kanji_names[$i];
}

close $out;
}

print "Content-Type: text/html\n\n";
print qq{<form method="post"><p>\n};

for my $student (@students) {
print qq{$student->{name}<input type="text" name="kanji" value="$student->{kanji}">$student->{score}<br>\n};
}

print q{<input type="submit" value="送信"></p></form>};
    • good
    • 0
この回答へのお礼

早速有り難うございました。

全く読めませんでしたが、
とにかくコピーして動かしてみましたら、
完璧です。
言うこと無しです。
チャンと真ん中にインプットボックスが開き、
漢字を入れて送信を押すと後ろに漢字が入った新しいファイルが出来ていました。

何となくしかやっていることが分かりませんが、
とにかく完璧に動いているので、
今後同じことを考えるのに基本形になると思います。
勉強します。
そして財産にします。
お世話になりました。
どうも有り難うございました。
20点しか差し上げられないのが残念です。

お礼日時:2009/12/20 17:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!