こんにちは。tyabudaiと申します。
アンケート(投票)のCGIを
作成しようと思っています。
ログの中身は、(とりあえずカンマ区切りで)
「項目,数値」です。
処理のイメージとしては、
まずログファイルの内容を、
「項目」をキーとしたハッシュに取り込みます。
投票があった場合、
「項目」をキーとして「数値」を取り出し、
1つ増加させる処理をしたいです。
現在、他サイト様よりCGIをダウンロードして
そのような処理がないか探していますが、
全く手がかりがありません。
まずは、ログファイルの内容をハッシュに取り込む方法を
お教えいただけないでしょうか。
ご存知の方のお力添えいただければ幸いです。
No.1
- 回答日時:
普通に、
open(IN, "<...");
while(<IN>) {
($key,$val)=split(/,/,$_);
$hash{$key}=$val;
}
close(IN);
とするのは駄目なんでしょうか?
このテクニックは方々で使われているものです。
この回答への補足
ありがとうございます。
練習で以下のような処理を組んでみたのですが、
うまく表示されません。
ログファイル:count.dat に、
あああ,2
いいい,5
ううう,10
というデータを書いてみました。
しかし、実行してみると
ううう は 10
が6回表示されます。
これはどこが間違っているのでしょうか?
なぜ最後のデータを
6回繰り返すのかわかりません。
申し訳ないですがお教えいただけないでしょうか。
以下サンプル
--------------------------------------
#!C:/Perl/bin/perl
# ハッシュの練習です
$file = "count.dat";
print "Content-type: text/html\n\n";
print << "END_HTML";
<HTML>
<HEAD>
<TITLE>TEST</TITLE>
</HEAD>
<BODY>
ハッシュのテストです。<BR>
END_HTML
open(IN, "<$file") || die "Can't open $file";
while(<IN>) {
($key,$val)=split(/,/,$_);
$hash{$key}=$val;
}
close(IN);
# 全てのデータについて繰り返す
foreach (%hash)
{
print << "END";
$key は $hash{$key}
<BR>
END
}
print "</BODY></HTML>";
---------------------------------------
回答いただきありがとうございました。
知識不足のためご教示いただいた内容を
理解するのに時間がかかってしまいました。
これからもよろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
> foreach (%hash)
> {
> print << "END";
> $key は $hash{$key}
> <BR>
> END
> }
ここが違います。正しくはこうなります。
foreach (keys %hash)
{
print << "END";
$_ は $hash{$_}
<BR>
END
}
なぜ最後のデータが表示されるのかというと、
> $key は $hash{$key}
での $key には、
> while(<IN>) {
> ($key,$val)=split(/,/,$_);
> $hash{$key}=$val;
> }
で最後に参照した「ううう」が入っているため、毎回 $hash{'ううう'} が表示されるからです。
また、なぜ6回表示されるのかというと、これは %hash を
> foreach (%hash)
で、リストとして評価しているため、('あああ',2,'いいい',5,'ううう',10)というリストの要素の数(6個)分だけループするからです。
foreach やハッシュについての詳しい使い方などについては、参考書などを読んでみて下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java javaのCSVデータ読込についてです 6 2022/07/02 10:58
- Java Java 配列<選挙> 4 2023/07/31 15:07
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) vbaエクセルマクロについて あるデータを作成し、デスクトップに.xlsx形式で保存するマクロを作成 2 2023/03/02 18:54
- Visual Basic(VBA) vbaエクセルマクロについて あるデータを作成し、デスクトップに.xlsx形式で保存するマクロを作成 6 2023/03/03 18:05
- その他(プログラミング・Web制作) Windowsのバッチファイルについてご教示ください 5 2023/07/25 20:23
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- 事務・総務 帳票類やデータがありません。法人成り。 解体業の会社で現場作業員 兼 事務員として勤めているのですが 3 2023/06/02 13:27
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
英語でのシャープとコメの呼び...
-
ハッシュ検索はなぜ速い
-
ハッシュの考え方、使用例を分...
-
重複ファイルを削除したいので...
-
チェックデジットについて
-
まったく同じファイルのハッシ...
-
ハッシュのハッシュを実現したい。
-
JSを使ったタブの別ページから...
-
連想配列のサイズ制限
-
ハッシュリストって単にハッシ...
-
データベースでユーザーのパス...
-
プログラミングについて。 1つ...
-
画面を強制的に再描画させる方法
-
VBのReturnの使い方
-
DoEventsが必要な理由について
-
クラスに配列を渡す方法
-
pythonでファイルのコメント行...
-
DOSコマンドのループ内のTIMEコ...
-
For文を使った九九表の作成
-
VBAで3秒だけ時間を止めたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ハッシュ検索はなぜ速い
-
文字列を変数名として扱う方法
-
チェックデジットについて
-
列挙型と連想配列の違いを教え...
-
まったく同じファイルのハッシ...
-
ハッシュ値が一致したデータは...
-
英語でのシャープとコメの呼び...
-
ハッシュのハッシュを実現したい。
-
データベースでユーザーのパス...
-
UTF-8で書かれたJSPの日本語文...
-
Perlは戻り値で、ハッシュや配...
-
perlで配列名を動的に作り出したい
-
ハッシュリストって単にハッシ...
-
短いハッシュの作り方
-
重複ファイルを削除したいので...
-
*(アスタリスク)の意味
-
連想配列のサイズ制限
-
python の素朴な疑問
-
多次元配列から重複を削除
-
一意(ユニーク)かつ、ソート...
おすすめ情報