• ベストアンサー

出力ファイル名を標準入力から指定したい。

初心者ですが、よろしくお願いします。 perlで、data.txtというファイルへ $protein の 情報を書き込みたい場合、以下のようにすれば 良いということはわかるのですが、 open(OUT, ">data.txt"); print OUT $protein; では、出力ファイルを data.txtではなく、プログラムを 実行させる度に標準入力から指定してやることはどうやれば できるのでしょうか?

  • Perl
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

my $filename = <STDIN>; chomp($filename); open(OUT, ">$filename"); print OUT $protein; close(OUT);

関連するQ&A

  • 標準出力しながらファイルに出力

    標準出力に表示したものを、そのままファイルに書き込むことは可能でしょうか? 例えば下記のように実現できるかと思いますが、printする度に2行書くのは厳しく思ってます。 ----------------------------- open(OUT, "> outfile.txt") ; print $aaa ; print OUT $aaa ; -----------------------------

  • Windows版Perlの標準入力&標準出力

    Windows2000にActive Perl5.6をインストールしています。 標準入力をそのまま標準出力するプログラムを作っているのですが うまく動きません。 DOSコマンドの使い方が間違っているのか、Perlの書き方が間違って いるのか、それともWindows版のPerlではこのような使い方はできない のか、教えてください。 ■プログラムソース(c:\test.pl) while(<>){ print; } ■実行方法 c:\data.dat|test.pl>data2.dat ■データ(data.datの中身) こんにちわ ※実行するとdata2.datにdata.datの内容がCOPYされる 予定なのですが、正しく動きません。

    • ベストアンサー
    • Perl
  • ファイルの3行目までを出力したい

    Perl初心者です。 test.txtというファイルがあって、その中の1行目から3行目までを 出力したい場合はどうしたらいいでしょうか? open(FILE,"test.txt") || die "Open Error.\n"; @data = <FILE>; close(FILE); foreach (@data) { print $_; } これだと、ファイルの中身が全て出力されてしまいます。

    • ベストアンサー
    • Perl
  • perl 計算結果をファイルへ出力したい

    perl やり始めたばかりです。宜しくお願いします。 入力ファイル data.txt があるとします。 data.txt は、 123 456 789 333 555 777 以上のようなテキストファイルといたします。このファイルを 以下の様に100分の1にして出力したい。 1.23 4.56 7.89 3.33 5.55 7.77 と言うことで、この場で教えていただきました。それが、以下です。 #!/usr/bin/perl open(IN, "data.txt") or die ; @x = <IN>; close (IN); foreach $line (@x){ chomp($line); @elms = split(' ',$line); foreach $data (@elms){ print $data/100," "; } print "\n"; } おかげ様でこれはこれで上手く動きました。そこで、出力値をファイルに 書き込みたいのです。 もちろん、以下の様な方法でファイルに 書き込めるのは判っております。 計算プログラム.pl > outfile.txt しかし、上のプログラムをベースにファイルに書き込めないかと色々と 試してはみましたが、どうも上手く行きません。 どなたか教えて頂けないでしょうか? 宜しくお願い申し上げます。

    • ベストアンサー
    • Perl
  • ファイルの入出力が出来ません。

    perlの初心者です。 cgiを作ろうとしています。 標準出力には出力できても、ファイルの入出力が出来ません。 #!/usr/bin/perl open(OUT,">>test"); print OUT "test data"; close (OUT); と実行しても、エラーもでないのですが、ファイルも作られず、書き込みもされません。 しかし、コマンド名'test'としてセーブして、プロンプトから'perl test'とするとファイルに書き込みされるようです。 perlの設定の問題なのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • 中間ファイルを使わずに処理させる方法

    cmd1.exe は、標準入力でデータを読み込み、 結果を標準出力するようなプログラムです。 $ cmd1.exe < test.txt d090206 p314159 r214142 $ このcmd1.exeをperlスクリプト内で呼び出し、その結果を求めるやり方として、 従来、次のようなやりかた・・・ open(OUT,">temp.txt") || die "$!"; foreach(・・・){ 中略 print OUT "$_\n"; } close(OUT); my @answer = `cmd1.exe < temp.txt`; foreach(@answer){ : 略 } unlink("temp.txt"); のようなことをしています。 今は、中間ファイルを書き出しては、最後にファイル削除して、ということをやっているのですが、 このような中間ファイルを使わずに、パイプ(?)という仕組みを使って、同じように処理させるには、 どのようにコーディングすれば良いですか? 試してみたこととして、 open(PIPE,"|cmd1.exe"); foreach(・・・){ 中略 print PIPE "$_\n"; } close(PIPE); のようにすれば、exeの呼び出しそのものは出来たのですが、 その標準出力の結果を上手く内部で受け取れません。 よろしくお願い致します。

    • ベストアンサー
    • Perl
  • awkで、キーボードからファイルを指定するには

    私は、awkプログラムを始めたばかりの初心者です。 データファイルがfile1、file2、file3とあって、どのファイルを実行させたいかをキーボードから入力させるには、どのようにすればよいのでしょうか。 次のようなプログラムを作ったのですが、うまくいきません。 { printf "ファイル名?" > "/dev/stderr"#画面表示 getline < "/dev/stdin" #数字入力 aaa = $0 #aaaに代入 } { getline < ("file"aaa".txt") #ファイル入力 print $0 #レコードを出力 } これを、バッジファイルで次のように実行をかけて、「結果.txt」に出力する。 jgawk -f prog.awk con > 結果.txt すると、コマンド画面が消えず、エラーとなってしまいます。 バッジファイルに問題があるのでしょうか。 「-f」の後には、プログラム名、データ名>出力ファイル名 とやるようですが、この場合、データ名が決まっていないわけで、キーボード入力したいのだから、「con」でいいのでしょうか。 プログラムを実行させるのに、ほかに良い方法があるのでしょうか。

  • ファイル出力をUTF8NではなくてUTF8で行いたい

    おせわになります。 Shift-JISで記述したPerlで、ファイル出力をしようとしています。 ------------------------------------ #!/usr/local/bin/perl use encoding 'shiftjis'; $hoge="ほげ" open(OUT,">file.txt") binmode OUT; print OUT $hoge; close(OUT); ------------------------------------ 希望はUTF8での出力なのですが、UTF8Nで出力されてしまいます。 どのようにすればいいのかご教授よろしくお願いします。

    • ベストアンサー
    • Perl
  • Perlでファイル出力時にデッドロック(?)してしまいます。

    Perl(5.005_03)で、約5000万バイトのテキストファイルを読み込んで、そのデータに変更を加えた後、別のテキストファイルに書き出すプログラムを作っています。 テキストファイルへの書き出しは、16回に分けて約300万バイトずつ行っています。 すると、ファイルへの書き出しが半分も終わらないうちに、デッドロック(?)してしまうみたいで、書き出し中のファイルは途中のまんま、プログラムが終わってしまいます。。。 いまは、出力ファイルを開く前に「print " ";」を入れることでとりあえず動いています。(それも、どうしてなのかわかりません・・・) 何か良い方法はないでしょうか? よろしくお願いします。 【環境】sun4-solaris, apache 以下は、ファイルへ書き出している部分のソースです ------------------------------------------------------------------- print " "; # これを入れないとプログラムが正常終了できません open OUT, ">>$file" || die "can't open : $!"; print OUT $data; # $data には約300万バイト入っています close OUT; -------------------------------------------------------------------

    • ベストアンサー
    • Perl
  • ファイルに書き込まれない

    Googleで検索しても見つからなかったので質問させていただきます。 ファイルa.txtがあるのですが、そこに次のプログラムでデータを書き込んでも結果が反映されませんでした。 open (OUT, ">> a.txt"); print OUT "test\n"; close(OUT); Perlは初心者で、どのような問題があるのかが分かりません。 読み込みをするソースを書いてみましたが、 そちらはちゃんと動作しています。 サーバはWindowsMe+httpd+Active Perlです。 WindowsMeを使うこと自体が問題でしょうが、 その点は気にしないでほしいです。 (あくまでCGIのテスト用のサーバです) よろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう