初めまして、perl全くの初心者であります。
なにとぞよろしくお願いいたします。
CSVファイルからdataをcgiに取り込みたいのですが、他者の質問を参考にしたのですがなかなか理解しがたく、みなさまのお力を拝借したいわけです。

例)
以下のようなcsvがあるとします。
data.csv
 テレビ,tv.jpg,安いよ,39800
 ビデオ,vtr.jpg,高機能,29800
 洗濯機,sen.jpg,2層式,128000

この場合、
 $sina[x] $jpg[x] $pr[x] $kakaku[x]
みたいに、各データを当てはめたいのですが、どのようにすればいいのでしょうか?
また、データ記載の商品の数(例では3です)を求めたいのですが。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

俺も初心者なんであんま自信ないですが、こんなのどうでしょう?


------------
open(IN,"data.csv");
flock(IN,2);
@line = <IN>;
flock(IN,8);
close(IN);

$cnt = 0;
foreach(@line){
($sina[$cnt],$jpg[$cnt],$pr[$cnt],$kakaku[$cnt]) = split(/\,/,$_);
$cnt++;
}

---------------------
$cntにデータの数が入ります。
foreach(@line)で配列の0番目から順に$_に代入して、反復実行します。
    • good
    • 0
この回答へのお礼

ありがとうございます。非常に助かりました。
初心者にはシンプルでわかりやすい記述で、
なんにでも応用が利きそうです。
また、よろしくお願いいたします。

お礼日時:2001/07/02 23:30

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qファイル名ないにあるカンマを削除し、文字列[.csv]を連結させてファイル名をRenameする方法を教えてください

Perlで、
ファイル名
「abd@docomo.ne.jp」
というファイル名内のカンマを削除し、
「.csv」という文字列を連結させ、
「abd@docomonejp.csv」
という名前のファイルに
Rename
する方法をお教えください

Aベストアンサー

訂正。

誤: s/?.//g;
正: s/\.//g;

うーん。Safari/OmniWebだと、バックスラッシュが化けるなあ。

Qperlで、[ \r\n , \n ]の意味は?

シンプルなCGI掲示板の勉強中ですが、

$message =~s/[ \r\n , \n ]/<br \/>/g; となっており、
これは改行文字を<br />に置き換えるのだそうですが、
[ \r\n , \n ]の部分というのはどういった意味でしょうか。

[ abc ]だと、a,b,cのうちどれか1文字は入っていれば良いですよね。
[ ]に「,」が入るとよく分からなくなります。

お分かりの方、教えてくださいませんか。
よろしくお願いいたします。

Aベストアンサー

サンプルは、
$message =~ s/\r\n/<br \/>/g;

$message =~ s/\n/<br \/>/g;
1行で済ませようとして間違ってしまったのでしょうか?

\r 復帰文字(return)

\n 改行(newline)

「,」カンマそのもの

\r 復帰文字 (return)
のいずれかを<br />に置き換える、という意味になってしまうでしょうね。
この目的のためには、

$message =~ s/\r\n/<br \/>/g;
$message =~ s/\r/<br \/>/g;
$message =~ s/\n/<br \/>/g;

と3行記述するのがいいのではないでしょうか?

参考サイトに私が勉強させてもらっているサイトを紹介しておきます。

参考URL:http://www.rfs.jp/sitebuilder/perl/04/07.html

Q${str}と$strの違いとは?

スカラー変数の${str}と$strの違いとは何なのでしょうか。

スカラー変数における{}の意味がよくわかりません。
別になくても処理は変わらない気がしますが、
どういった際に{}は使用するのでしょうか?

Aベストアンサー

もしPerlでのことでしたら、スカラー変数名を{}で囲むのは、それ以降に半角文字が続く場合に、そのスカラー変数名と半角文字の文字列との境界を明示するためだと思います。 変数自体に何かの違いがあるということではないはずです。

たとえば、処理の中でスカラー変数$strに続けてstrという文字を書き出したい場合、「$strstr」と記述すると、[$str]とは別の[$strstr]という名前のスカラー変数と認識されてしまいます。 これを避けるために、スカラー変数名を{}で囲って、「${str}str」と記述することで、$strというスカラー変数に、strという文字が続いていると認識させる、という具合だと思います。

見当違いでしたらごめんなさい。

Q申込みフォームの内容をメールで送信,csvファイルに書き出ししたい

cgiはただいま勉強中ですが,自分で組めるほどの知識はありませんので
フリーウェアでできる物を探しています。
【したいこと】
1.申込みフォームの内容を,申込者・管理者両方にメールで送る(sendmail使用可)
2.その内容をcsvファイルに書き出したい
  csvファイルはftpでダウンロードするのでかまわない。
3.申込みフォームの内容は1月に1度変わります。
  同時に申込者へのメールの内容も変わりますので,簡単にアレンジできれば嬉しいです。

「Web裏技」さんの webform.cgi を利用していてアレンジしてみたのですが,
「テスト」の一言も書き出すことができず....

過去の質問も検索してみましたが,上記のように3つのことができるcgiのことは
見つけられなかったので,よろしくお願いいたします。

言語はperlです。

Aベストアンサー

私も興味があったので調べてみました。
下記URLのフォームメール関係のところにCSVに登録できるCGIがありました。
あなたの希望する機能は付いているようです。
http://www.01nni.com/free-b.html

実験してみましたが、正常に動きました。
参考にしてください。

あと、検索についてのアドバイスです。
とりあえず、Googleで関連するキーワードを片っ端から入力して検索してください。
見つからない場合はキーワードを削ったり、変えたりして絞り込んでください。
ちなみに今回の検索は「フォーム メール送信 CSV 保存 フリー CGI」というキーワードで1回目の検索の1ページ目で見つけました。参考にしてください。
それでは、頑張ってください!

Q$a++と++$aの違いがよくわかりません。

わかりやすい、いい例ってありますか?

Aベストアンサー

PHPだけど、(Perl)はここ数年さわっていないけど同じかな。
$a = 10;
++$a;
print($a); ← aは11
じつはこの場合は、$a++;でも同じ。

$b = 10;
$c = $b++;
print($b, $c);

$b は11,$cは10。$cが++$bなら11。
さてなんででしょう?

$c = $b++;

1.$cに$bを代入する。なので、$bと同じ値が入る。
2.その後,$bに++(1)を足す。

$c = ++$b
だと、
1.$bに++(1)を足す。のが最初。
2.その後,$cに$bを代入する。

式が評価される順番が少し違うだけ。
間違ってないと思うけど、いろいろ実験してみて。


おすすめ情報