WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:記事削除処理の内容

0:[投稿] パペット [2002/08/18 20:42 ][環境:わからない UNIX系+Perl]

記事のNoと削除キーを指定して
同じになったらその配列だけを削除したいのですが
いまいち処理の仕方がわかりません


1:[回答] ナン [2002/08/19 09:03 ]

現状は、どのようになっていますか?
質問は、回答者(質問の背景状況知らない)の身になって読み返してみてください。


2:[回答] パペット [2002/08/19 09:23 ]


    open(IN,"test.txt");
    @lines = <IN>;
    close(IN);

    $flag=0;
    foreach (@lines) {
        ($no,$name,$com,$pass,$mail) = split(/<>/);

    
        if ( $in{'no'} == $no ){
        
            if ($in{'pass'} ne $pass){
            $flag = 2;
            }
            else{
            $flag = 1;
            }
        }
    
        if ($flag == 2){ &error("パスワードが違います");}
        if ( $flag == 0 ){ push @new;}

今はこんなかんじなんですが、いつもエラーになってしまいます。


3:[回答] パペット [2002/08/19 09:25 ]


    open(IN,"test.txt");
    @lines = <IN>;
    close(IN);

    $flag=0;
    foreach (@lines) {
        ($no,$name,$com,$pass,$mail) = split(/<>/);

    
        if ( $in{'no'} == $no ){
        
            if ($in{'pass'} ne $pass){
            $flag = 2;
            }
            else{
            $flag = 1;
            }
        }
    
        if ($flag == 2){ &error;}
        if ( $flag == 0 ){ push @new;}
     }
    }
    open(IN,">test.txt");
    print IN @new;
    close(IN);

すいません、とぎれました


4:[回答] とも [2002/08/19 10:54 ]

久しぶりのcgiなので間違ってたらゴメンナサイ。

でも、ソースを見る限り合ってる気がするのですが、
何が問題なのでしょうか?

また、
if ( $in{'no'} == $no ){
でnoが合った時の処理を記述しているので、
else文を用いて処理したほうが、見栄えも処理も早い気がしますよ。
(if ( $flag == 0 ){ push @new;} がelse文と一緒)


5:[回答] とも [2002/08/19 16:56 ]

ゴメンナサイ、判明しました(既にわかってました?)

$flag=0;

初期化してますが、繰り返し(foreach (@lines) { )の中で初期化してません。
よって、1回でも「2」が設定されると、毎回「2」になってしまいます。

コレで直してみてもらえますか?


6:[回答] パペット [2002/08/19 20:22 ]

回答ありがとうございます。
早速試してみます。


7:[回答] パペット [2002/08/19 20:36 ]

    open(IN,"test.txt");
    @lines = <IN>;
    close(IN);

    foreach (@lines) {
        ($no,$name,$com,$pass,$mail) = split(/<>/);

        $flag = 0;
    
        if ( $in{'no'} == $no ){
        
            if ($in{'pass'} ne $pass){
            $flag = 2;
            }
            else{
            $flag = 1;
            }
        }
        else{
        if ( $flag == 0 ){ push @new;}
        }
        if ($flag == 2){ &error;}
    }

    
    open(IN,">test.txt");
    print IN @new;
    close(IN);

このように変えてみたのですが、まだエラーになります。


8:[回答] とも [2002/08/19 22:10 ]

うーん・・・。
実行環境がないので、何とも言えないのですが、
自分がcgiやってた時の経験としては、
コメントにしてエラーの発生しないレベルまで落とす
のが一番の近道でした。

ファイルのOPENとWRITEのみに絞って、正常に処理が行われることを確認したら、
読みこんだファイルをそのまま書き出して、正常に処理が行われるか・・・
といった手順で試してみてください。

残りは、他の人がコメントしてくれることに期待してください。

お役に立てなくてスミマセン。


9:[完了] パペット [2002/08/20 15:48 ]

kent-webさんのところのスクリプトを見ながらやっていたら
できるようになりました。

お騒がせしました。m(_ _)m

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World