好きな「お肉」は?

pass.cgiには100行までのデータが保存されています。pass.cgiに書き込まれている30行までのデータをdata.txtにコピーしたい場合はどのように書けばいいのでしょうか。初めて最初から自作CGI作りに挑戦して、皆さんのお力をおかりし作りたいCGIは完成しました。そしてこの機能が追加されれば更に便利になるためWEBで検索しましたが、わかりませんでした。よろしくお願いいたします。
$pass = 'pass.cgi';
if(open(DATA, ">>data.txt")){
print DATA "";
close(DATA);
}

A 回答 (2件)

$を忘れていましたか(^^;


訂正ありがとうございます。

追加の件ですが、foreachのところだけ書きますね。
1つ目と4つ目の間のデータの区切りを
仮に半角スペース1つとして、
毎行の最後に改行コードを入れてみました。
-------------

foreach( @f_data ){
#30行超えたら処理を抜ける
if( $i > 30 ){
last;
}

#一行の内容を<>で分割して、先頭4つを変数に取る
( $f_data1, $f_data2, $f_data3, $f_data4 ) = split( /<>/ );

#1つ目と4つ目を書き出す
print "$f_data1 $f_data4\n";

$i++;
}
    • good
    • 0
この回答へのお礼

ご丁寧なご回答に感謝致します。おかげ様でスクリプトを完成させることができました。

お礼日時:2006/11/22 00:33

今ちゃらっと書いただけで実行していませんので


エラーになったらごめんなさい。

open( IN, "pass.cgi" );
@f_data = <IN>;
close( IN );

i = 1

#書き出し先ファイルをオープン
open( OUT, ">>data.txt" );
select OUT;

foreach( @f_data ){
 #30行超えたら処理を抜ける
 if( i > 30 ){
  last;
 }

 print;
 i++;
}

#書き出し先ファイルを閉じる
select STDOUT;
close( OUT );

この回答への補足

申し訳ございません、再度確認しましたところ、30行まで記録されておりました。以下お礼へ書かせていただきました追加要望を引き続きよろしくお願いいたします。

補足日時:2006/11/21 23:46
    • good
    • 0
この回答へのお礼

open( IN, "ranking1.cgi" );
@f_data = <IN>;
close( IN );

$i = 1;

#書き出し先ファイルをオープン
open( OUT, ">>data.txt" );
select OUT;

foreach( @f_data ){
#30行超えたら処理を抜ける
if( $i > 30 ){
last;
}

print;
$i++;
}

#書き出し先ファイルを閉じる
select STDOUT;
close( OUT );


ご回答有難うございます。上記のように書き換えたところエラーが表示されなくなりました。7行までのデータがdata.txtに記録されております。ログデータは以下の通りです。
100<><><>Named<>aaa<><> <>1163979601<><>127.0.0.1<>
95<><><>Name<>aaa<><> <>1163973570<><>127.0.0.1<>
95<><><>Namef<>aaa<><> <>1164141553<><>127.0.0.1<>
43<><><>Namec<>aaa<><> <>1163979531<><>127.0.0.1<>
19<><><>Nameb<>aaa<><> <>1163970514<><>127.0.0.1<>
15<><><>Namea<>aaa<><> <>1163962024<><>127.0.0.1<>
5<><><>Namee<>aaa<><> <>1163980638<><>127.0.0.1<>

↑再度のお願いで申し訳ないのですが、pass.cgiのログデータ上位30行を抜き出すさいに、更に一番左にある数字と名前の部分(ログ1番目と4番目)だけを抜き出して、data.txtに書き出すことはできないでしょうか。

お礼日時:2006/11/21 23:41

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


おすすめ情報