解決済み

Perlでファイルの新規作成

  • 困ってます
  • 質問No.295464
  • 閲覧数1248
  • ありがとう数5
  • 気になる数0
  • 回答数3
  • コメント数0

Perl中級者です。
フォームから受け取ったデータの一つをファイル名として
新たにデータ保存用のファイルを自動生成することは可能でしょうか?
ログを定期的に別ファイルとして保存する掲示板や、cgiファイルさえ設置すれば必要なデータ保存用ファイル(空ファイル)を自動生成してくれるようなスクリプトを見かけますので、不可能ではないと思っているのですが・・・。


<作りたいスクリプトの概要>
1.管理者が管理用フォームで文字列Aを登録する。
2.A.datという名のファイルが自動生成される。
3.閲覧者がAについて閲覧者用フォームで送った内容がA.datに書き込まれる。
4.管理者用ページでA.datの内容が一覧表示される。

というもので、2の部分が分かりません。
可能であるならば、その方法をご教授願います。
不足情報がありましたら補足します。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2

 えーと。

 ファイルの入出力の挙動を決定しているのは、ファイル名の前に付けた ">" という文字です。
 ">" はファイルを新規作成(または作り直し)して書き込み、">>" は既存のファイルに追加、"<" は読み込みです。(他にもいくつかありますが、目下これで充分です)
 よって、入力用ファイルに "OUT" と名前を付けることもできます。"NURARI" とか "GITTYON" でもいいんです。

 で、書き込みが行われなくても、プログラムが「書き込むための準備」をしたのですから、クローズは必要です。

 cgi とは別のフォルダに作る場合は、ディレクトリを移動するよりも、相対パスでそのディレクトリを指定します。
 たとえば、cgi が /massasoyt/cgi-bin/ というディレクトリにあったとします。
 そしてデータは、その直下である /massasoyt/cgi-bin/data/ にあったとすると、オープンするときは、

  open(OUT, ">data/A.dat");

 と指定することになります。しかしデータが、/massasoyt/data/ にあったとすると、1度戻らなければ行けないわけですので、
 1つ上に戻るときは、

  open(OUT, ">../data/A.dat");

 となります。
お礼コメント
noname#48234

度重なる質問にお答えいただいて本当にありがとうございました。問題は全て解決しました。全くのゼロからスクリプトを書くというのは壁も多いですが勉強になりますね。
なるべく自力でやりますが、どうしても・・・というときはまたお助けください。ありがとうございました。
投稿日時 - 2002-06-20 12:06:56
OKWAVE 20th Be MORE ありがとうをカタチに

その他の回答 (全2件)

  • 回答No.1

 普通に作れますよ。

  open(OUT, ">A.dat");

 これでOKです。
 ただし、その A.dat というファイルが出来ることになるフォルダの属性を、書き込み可能にしておく必要があります。
 また、そのファイルの所有者は nobody になりますので、telnet で操作するときは chmod で所有者を自分に移す必要があります。
補足コメント
noname#48234

ありがとうございます、できました。
てっきりopenは既存のファイルを開くためだけのものと思っていました。また、フォルダのパーミッションも違っていました。
他にもいくつかお聞きしてよろしいでしょうか?

1.ハンドルOUTは任意ですか?新規作成のための特殊なものなのですか?
2.ファイル生成段階では書き込みません。このopenはcloseする必要がありますか?
3.本体のcgiファイルと異なったディレクトリに新規作成する場合、chdir、opendir・closedirのどちらを使うのでしょうか?それとも別の方法でしょうか?どちらを使ってもうまくいきませんでした。chdirで作れたのですが、もとのディレクトリ(一つ上)に戻る方法が分からず、その後の処理がおかしくなってしまいました。

以上、お時間がございましたらお願いします。
投稿日時 - 2002-06-20 01:45:35
  • 回答No.3
レベル7

ベストアンサー率 35% (7/20)

>ハンドルOUTは任意ですか?

任意です。
変数と同じようなものだと思っていただければ
よいかと思います。

>ファイル生成段階では書き込みません。
>このopenはcloseする必要がありますか?

read/write関係なく、ファイルをopenしたのならば
最後に必ずcloseしなければなりません。
お礼コメント
noname#48234

開けたら閉める。プログラムの世界でも常識のようですね(笑)。ご回答ありがとうございました。
投稿日時 - 2002-06-20 12:10:49
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ