[▲前のスレッド]

[13] 配列からの文字削除 
2000/10/30 (Mon) 00:17:35 - RIGHT 〔HomePage
あけびさんのcyclamenでは、sortcache.cgiとtree.cgiでツリー構造を記憶させているようですが、
一段階の返信のみの掲示板の場合、ひとつのファイルで済むのではと考えています。
6を削除する場合、以下のような感じなと思っているのですが、どうも格好がよくないんです。

$tree_data ="11:12:15\t7:12:14:\t8:13:\t5:\t4:6:9:10:\t3:\t1:2:\t";
$input = 6;

        @TREES = split(/\t/,$tree_data);

        $flag = 0;
        foreach $line (@TREES) {
                if ($line =~ /^$input\:/) { $line2 = $line; $flag = 2; last; }
                elsif ($line =~ /\:$input\:/) { $line2 = $line; $flag = 1; last; }
        }
        if (!$flag) { die 'No Data'; }

        @TREES2 = split(/\:/,$line2);

        if ($flag == 2) {
                $new_list = (); $pare_data = $input;
        } else {
                @TREES3 = grep (!/^$input$/,@TREES2);
                $new_list = join(':',@TREES3);
                $pare_data = shift @TREES3;
        }

        $new_value = '';
        foreach $line (@TREES) {
                if ($line =~ /^$pare_data\:/) {
                        $new_value .= $new_list . "\t"; next;
                } else { $new_value .= $line ."\t"; }
        }


[14] Re:配列からの文字削除 
2000/10/30 (Mon) 01:05:54 - あけび
$input の値が親記事番号ならそのスレッド全体を削除、
子記事番号ならその記事番号のみを削除して
$new_value に新しいスレッドを入れる、
という処理をさせれば良いのでしょうか。

$tree_data !~ /(^|\t|:)$input:/ && die 'No Data';
$new_value = $tree_data;
$new_value =~ s/(^|\t)$input:[^\t]*/$1/;
$new_value =~ s/:$input:/:/;

こんなのはどうでしょう。
解釈が違ってたらすみません(^^;


[15] Re2:配列からの文字削除 
2000/10/30 (Mon) 01:47:05 - RIGHT 〔HomePage
▼ あけびさん
> こんなのはどうでしょう。
> 解釈が違ってたらすみません(^^;


文字置換でよかったんですね。
(記事)追加の処理のために
@TREES = split(/\t/,$tree_data);
という処理を使っていたので、リストを使うことしか頭にありませんでした。
ありがとうございます。

[▼次のスレッド]
INCM/CMT
Cyclamen v3.84.01