- ベストアンサー
CSVファイルに出力
Perlを使ってCGIを作っています。 そこで、資料請求フォームを送信した時に、CSV形式で出力するんですけど、ファイル名を現在日時を取ってきて例えば200108.csvみたいに年と月を付けたファイルを作って、出力させたいのですが、どうやって良いのか困ってます。 お教え願えないでしょうか。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
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"になるはずです。
その他の回答 (3)
- duckling
- ベストアンサー率47% (88/185)
ファイルの新規作成の方法がわからない、 ということなのでしょうか? 日付の取得は、下にみなさんが書いておられる方法で バッチリだと思われるので。 下の方が書いている方法で日付を取得して、$date_strに格納し、 $file = "$date_str.csv"; #↓日付と同じファイル名がなかったら、ファイルを作成 if(!open(F,">$file")){open(">>$file");chmod 0666,$file;} これで出来るとは思いますが、 中程に書いてある chmod 0666 は、 ファイルのパーミッションを変更するコマンドですので、 このコマンドが効かないサーバでは、 ファイルを作成できない可能性があります。 (プログラムから新規にファイルを作成することが出来ないサーバもあります。) そうなったら、サーバを変えるしか方法はないと思われます。 ひとまずやってみてはいかがでしょうか。
お礼
回答ありがとうございます。
- miya_777
- ベストアンサー率31% (44/140)
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtimZ(time); とすれば、$yearと$monに年と月が入ります。 これを使えばOKかと。
お礼
ご解答ありがとうございます。 でも、初心者の私には上記だけではちょっとわからないです。
- cherry_moon
- ベストアンサー率36% (37/102)
#!/usr/local/bin/perl $chop($date_str = `date`); $date_str =~ s/ /_g; (適当に date_str を編集) $filename = $date_str . ".cvs"; でどうでしょう?
お礼
アドバイス有難うございます。 Perl初心者なもので、$date_strを適当に編集というところが、どうしていいのかよくわからないんですけど、アドバイス感謝しております。
お礼
サーバを変更しましたら、freeskさんのやり方できちんと作ることができました。 ありがとうございました。
補足
ご解答ありがとうございます。 上記のようにしてみたのですが、ファイルが作られませんでした。