掲示板で上から3,2,1と逆順で記事表示されるのを、ひっくり返してストレートに上から1,2,3と表示するには?

[上に] [前に] [次に]
すらいむ [E-Mail] 2000/03/06(月) 16:01:02
フリーで配布されてる、KENTさんのG-LIGHTの掲示板なんですが、
これには、過去ログの自動作成機能がついています。
ただ、この自動作成される過去ログの記事は、
下から順番に記事を読んでいかなくては成りません。
(上から、3、2、1といった具合に表示される)
これってちょっと読みづらいような気がするんですよ。

だから、自動作成される、過去ログのトコロだけを、
普通のストレートな順番(上から1、2、3といった具合)に
表示できないだろうか?と思っています。

それで、私なりに、本を調べて、
ログを記録する際、一列ごとに逆転を計ってみては?と勝手に思い、
$pst_line = reverse($pst_line);

という、のを、それらしい場所に組み込んだのですが、
エラーは出ない変わりに、何も起こりません・・・・
やはり、付け焼き刃で、Parlが出来るワキャない・・・・
ということで・・・・・(ーー;)

済みません、誰か分かる方、教えていただけませんでしょうか?

多分、以下↓の部分に何らかのソースを組み込めば、
ストレートな順番で表示できると思うのですが・・・・・

## --- 過去ログ生成
sub pastlog {
$new_flag = 0;

open(NUM,"$pastno") || &error("Can't open $pastno");
$count = <NUM>;
close(NUM);

# 過去ログのファイル名を定義
$pastfile  = "$past_dir\/$count\.html";

# 過去ログがない場合、新規に自動生成する
unless(-e $pastfile) { &new_log; }

if ($new_flag == 0) {
open (DB,"$pastfile") || &error("Can't open $pastfile");
@past = <DB>;
close(DB);
}

# 規定の行数をオーバーすると、次ファイルを自動生成する
if ($#past > $log_line) { &next_log; }

$pst_line = $lines[$max-1];
$pst_line =~ s/\n//g;

($pnum,$pdate,$pname,$pemail,$plocal,$picon,$pad_icon,
$pcom,$pres,$purl,$phost,$ppw,$psub) = split(/<>/, $pst_line);

if ($subject && $psub eq "") { $psub = "無題"; }
if ($pemail) { $pname = "<a href=\"mailto\:$pemail\">$pname</a>"; }
if ($purl) { $purl = "<a href=http://$purl target=_top>http://$purl</a>"; }

# 自動リンク
if ($autolink) { &auto_link($pcom); }

$html = <<"HTML";
[$pnum] <font color=$sbj_color><b>$psub</b></font><!--T--> 投稿者:<font color=$link><b>$pname</b></font> <small> <font color=$sbj_color>[$plocal]</font> 投稿日:$pdate</small><br><blockquote>$pcom<P>$purl<P><blockquote><font color=$man_color>$pres</font></blockquote></blockquote><!--$phost--><hr>
HTML

@news = ();
foreach $line (@past) {
if ($line =~ /<!--OWARI-->/i) { last; }
push (@news,$line);
if ($line =~ /<!--HAJIME-->/i) { push (@news,"$html"); }
}

push (@news,"<!--OWARI-->\n</body></html>\n");

open(DB,">$pastfile") || &error("Can't write $pastfile");
print DB @news;
close(DB);

}## --- 過去ログ完了 --- ##

ユニオン 2000/03/06(月) 22:18:42
テストはしていないので、間違ってるかもしれませんが、
最後の部分で次のようにしてみてはどうでしょうか?

@news = ();
foreach $line (@past) {
  if ($line =~ /<!--OWARI-->/i) { last; }
  @news = ($line,@news);   #この行を変更
  if ($line =~ /<!--HAJIME-->/i) { push (@news,"$html"); }
}

さだひろ 2000/03/07(火) 00:07:05
ユニオンさんのではまずいです.
@past[0] は "<html><head><title>過去ログ</title></head>\n" となっています.

ローカル化されていないサブルーチンだけ見たところで,変数がどこで
どう定義されていたものやら,データファイルはどういう構造になっているのか,
その他もろもろ,わかるわけがありません.
結局KENTさんのサイトでソースを拾ってこなくてはなりませんでした.
だから,フリーツールならそのソースが得られるところ
(許可されている範囲で,できるだけ近い所)にリンクを張るように.

変更箇所は,最少限にするとして,

sub pastlogの43行目if ($line =~ /<!--OWARI-->/i)に続く
  { last; } を  { push (@news,"$html"); last;} にする.
sub pastlogの45行目
  if ($line =~ /<!--HAJIME-->/i) { push (@news,"$html"); } は削除する.

ですね.

# 単に push (@news,"$html"); を移動するだけでよいともいう;
#
# if ($line =~ /<!--OWARI-->/i) { push (@news,"$html"); last;}
# push (@news,$line);
# if ($line =~ /<!--HAJIME-->/i) { }
#
# こうすると if ($line =~ /<!--HAJIME-->/i) の判定が無意味になる.
# こういうのはよくないから if ($line =~ /<!--HAJIME-->/i) { } は削除.

>やはり、付け焼き刃で、Parlが出来るワキャない・・・・
Perlですね.いや皮肉ではなく.

>$pst_line = reverse($pst_line);
>エラーは出ない変わりに、何も起こりません・・・・
マトモな所に置いたら過去ログがめちゃくちゃになるはずですよ.
きっと,$pst_lineが用済みになった後に置いたのですね.
# @past = reverse(@past) よりはましかも>HTMLが体をなさなくなるぅ.

すらいむ 2000/03/07(火) 14:05:41
[[解決]]
皆さん、どうもありがごうございました m(_ _)m。
お陰様で希望どおりの動作をする様に成りました。

3通り試してみて、
以下のもので、成功いたしました。

># 単に push (@news,"$html"); を移動するだけでよいともいう;
>#
># if ($line =~ /<!--OWARI-->/i) { push (@news,"$html"); last;}
># push (@news,$line);
># if ($line =~ /<!--HAJIME-->/i) { }
>#
># こうすると if ($line =~ /<!--HAJIME-->/i) の判定が無意味になる.
># こういうのはよくないから if ($line =~ /<!--HAJIME-->/i) { } は削除.

>>やはり、付け焼き刃で、Parlが出来るワキャない・・・・
>Perlですね.いや皮肉ではなく.

そうですね、こんな初歩的段階で間違えてしまうとは・・・・^^;
これじゃ、殆どコントかギャグに成ってます(笑)。

>ローカル化されていないサブルーチンだけ見たところで,変数がどこで
>どう定義されていたものやら,データファイルはどういう構造になっているのか,
>その他もろもろ,わかるわけがありません.
>結局KENTさんのサイトでソースを拾ってこなくてはなりませんでした.
>だから,フリーツールならそのソースが得られるところ
>(許可されている範囲で,できるだけ近い所)にリンクを張るように.

これは、次回から、気を付けるようにします。
それでは、お世話になりました。

[上に] [前に] [次に]