CGI-BBS > CGI > Perl > ファイルの書き込みでわからないです!


カレッヂ
カレッヂ


質問者 AKI♂  投稿日 9/24(月) 00:47:44
超初心者ですご指導おねがいします
さて、ファイルの書き込みについてわからないのですが

ソースは下記に
http://village.infoweb.ne.jp/~fwgj8769/test.txt

今、ファイルには

HPアドレス、バナーアドレス
を書き込んでますが、これに記事連番をつけたいのですが
いろいろためしたのですがわかりません

1、HPアドレス、バナーアドレス
2、HPアドレス、バナーアドレス

みたいにしたいのですが・・
初心者ですみませんがお願いします
回答者 しあわせのツボ  [削除]  投稿日 9/24(月) 02:17:47
for(@DATA){
        chomp;
        ($name,$banar)=split /\,/;
        if($count > $linemax){print"<br>";$count=0;}
        print "<a href=$name><img src=$banar BORDER=0></a>\n";
        $count++;
}

for($i = 0; $i <= $#DATA; $i++) {
        $number = $i + 1;
        ($name, $banner) = split(/\,/, chomp($DATA[$i]));
        print "$number <a href="$name"><img src="$banner" BORDER=0></a>\n";
        if ($number % $yoko == 0) { print '<br>'; }
}
のようにすると、とりあえず連番つきで同様の出力が得られます。
あとはお好みに応じて書き換えて下さい。
質問者 AKI♂  [削除]  投稿日 9/24(月) 03:12:40
どうも返信ありがとうございます

さて、しあわせのツボさまの通り書き変えたところ
表示部分に連番が打たれバナーが表示されません!

僕が思ってるのは連番を表示させるのではなくファイルに書き込むだけなのです
どうかご指導おねがいします。
回答者 しあわせのツボ  [削除]  投稿日 9/24(月) 10:57:20
バナーの非表示は変数名違いだと思いますが、とりあえず置いといて。

書き込み時に数字を打つのは、ちょっと面倒です。重くなりますし。
registのところで一度ファイルをopenして行数を数えなければなりませんから。
回答者 SK  [削除]  投稿日 9/24(月) 11:19:21
> バナーの非表示は変数名違いだと思いますが、とりあえず置いといて。
違います。
> ($name, $banner) = split(/\,/, chomp($DATA[$i]));
chompの使い方が間違っています。
chompは引数に指定した変数に直接働きかけるもので
戻り値は削除した文字数になりますので、
これでは$nameは“1”か“”、$bannerは必ず空になります。
回答者 しあわせのツボ  [削除]  投稿日 9/24(月) 20:19:18
あら、突っ込んではいけなかったのですね。
やり慣れないことをすると、必ずミスりますね。失礼しました。
質問者 AKI♂  [削除]  投稿日 9/24(月) 21:19:31
($name, $baner) = split(/\,/, chomp($DATA[$i]));

($no,$name, $baner) = split(/\,/, chomp($DATA[$i]));
に変えました!
あと
print "$number <a href="$name"><img src="$baner" BORDER=0></a>\n";行の
"$name"の””はいらないみたいです!

行数を数えるというのは下記のようにですか?

if (!open(NOTE,"+<$testfile"))
eval'flock(NOTE,2);';          
@lines = <NOTE>;            
$c = $lines[0];            
$c =~ s/\n//;
$c++;              
shift(@lines);            
$w = "$c<>$FORM{'name'}<>$FORM{'banar'}<>\n"  ;    
push  @lines, $w ;            
seek(NOTE,0,0);            
print NOTE "$c\n";
print NOTE @lines;            
close(NOTE);            

返信(回答)する


Web裏技