• ベストアンサー

CSVファイルに出力

Perlを使ってCGIを作っています。 そこで、資料請求フォームを送信した時に、CSV形式で出力するんですけど、ファイル名を現在日時を取ってきて例えば200108.csvみたいに年と月を付けたファイルを作って、出力させたいのですが、どうやって良いのか困ってます。 お教え願えないでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • freesk
  • ベストアンサー率57% (4/7)
回答No.3

miya_777さんの回答に補足: #--ローカルタイムを取得 $yearに年、$monに月が入る ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time); # ただし、$yearはには1900年からカウントした値があるので、 # 年を4桁で表記するには1900を足す必要がある。 $year +=1900; # また$monには0~11の数値が入るので+1する $mon = $mon+1; # $mon++ でも可 # 一桁の月(1~9)を2桁にする 例) 8->08 9->09 $mon = sprintf('%02d',$mon); $file = "$year$mon.csv"; #これで2001年8月の場合は$fileが"200108.csv"になるはずです。

verine
質問者

お礼

サーバを変更しましたら、freeskさんのやり方できちんと作ることができました。 ありがとうございました。

verine
質問者

補足

ご解答ありがとうございます。 上記のようにしてみたのですが、ファイルが作られませんでした。

その他の回答 (3)

  • duckling
  • ベストアンサー率47% (88/185)
回答No.4

ファイルの新規作成の方法がわからない、 ということなのでしょうか? 日付の取得は、下にみなさんが書いておられる方法で バッチリだと思われるので。 下の方が書いている方法で日付を取得して、$date_strに格納し、 $file = "$date_str.csv"; #↓日付と同じファイル名がなかったら、ファイルを作成 if(!open(F,">$file")){open(">>$file");chmod 0666,$file;} これで出来るとは思いますが、 中程に書いてある chmod 0666 は、 ファイルのパーミッションを変更するコマンドですので、 このコマンドが効かないサーバでは、 ファイルを作成できない可能性があります。 (プログラムから新規にファイルを作成することが出来ないサーバもあります。) そうなったら、サーバを変えるしか方法はないと思われます。 ひとまずやってみてはいかがでしょうか。

verine
質問者

お礼

回答ありがとうございます。

  • miya_777
  • ベストアンサー率31% (44/140)
回答No.2

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtimZ(time); とすれば、$yearと$monに年と月が入ります。 これを使えばOKかと。

verine
質問者

お礼

ご解答ありがとうございます。 でも、初心者の私には上記だけではちょっとわからないです。

回答No.1

#!/usr/local/bin/perl $chop($date_str = `date`); $date_str =~ s/ /_g; (適当に date_str を編集) $filename = $date_str . ".cvs"; でどうでしょう?

verine
質問者

お礼

アドバイス有難うございます。 Perl初心者なもので、$date_strを適当に編集というところが、どうしていいのかよくわからないんですけど、アドバイス感謝しております。

関連するQ&A