WEB相談室

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

タイトル:ファイルから特定の文字列を取り出す方法

0:[投稿] お茶 [2003/12/18 09:15 ][環境:IE6、WIN2000 UNIX,Apache,CGI,perl ]

perlについて質問させてください。
例えば下記のファイルがあるとします。

====(ファイルの中身)
[AAAA]
あああ
ううう
えええ
おおお

[BBBB]
あああ
いいい
ううう
おおお
tふぁ
====

このファイルの中から、[]で囲まれている文字列だけ取り出して
HTMLをかきプルダウンに表示させたいのですが、、
つまり、プルダウンに表示する内容は下記としたいのです。
AAAA
BBBB

ファイルの中身全てを取り出すのは下記を書けば出来ました。
ここに上記の処理を追加したいのでこの文字列を取り出す方法を教えて下さい。よろしくお願いします


======(ソースの文字列取り出し部分)

$SYSPATH = "(ファイルパス)";

#初期化設定
$FileOpen = 0;
    $cnt = 0;
    #ログファイルの内容を一行ずつ読み出して配列に格納する
    while(<FileHandle>){
        #改行や空白のみの場合はスキップして次の行を読み出す
        $tmp = $_;
        chomp($tmp);
        #普通のコードでは空文字をはじけないので
        #URL文字列に変換して不要なコードを削除し
        #残りが空白かどうかで判断する
        $dec = $tmp;
        $dec =~ s/(\W)/'%' . unpack('H2', $1)/eg;
        #★4Debug
        if ($gflgDebug eq "GO"){
            print "<br>読み出した情報:$tmp URL文字列:$dec ";
        }
        #★42Debug

        $dec =~ s/%20//g;
        $dec =~ s/%0[0-9a-z]//g;

        if( $dec ne "" ){
            $value[$cnt] = $tmp;
            $cnt++;

            #★4Debug
            if ($gflgDebug eq "GO"){
                print "表示情報:$tmp<br>";
            }
            #★42Debug
        }
    }
    for($cnt = 0 ; $cnt <= $#value ; $cnt++){
        #プルダウンメニューを書き出す
        $strings = $value[$cnt];
    }

〜(省略)

            print <<"EOL2";
        <td nowrap>名前を選択してください</td>
        <td nowrap>:</td>
        <td nowrap><select NAME="A">
EOL2
            for($cnt = 0 ; $cnt <= $#value ; $cnt++){

                #プルダウンメニューを書き出す
                print "\t\t\t<option>$value[$cnt]\n";
            }
        }
        print "\t\t</select></td>\n";


1:[回答] J [2003/12/18 13:14 ]

正規表現を調べてみましょう。


2:[質問] お茶 [2003/12/18 14:24 ]

正規表現を調べて下記を追加してみたのですがうまくいきませんでした。(ファイルの中身が全て表示されてしまいます。)
よくわかっていないかもしれませんが下記は間違っているのでしょうか?

for($cnt = 0 ; $cnt <= $#A ; $cnt++){
    if ($A[$cnt] =~ /^\[(.*)\]\n$/) {
        #『[』と『]+改行』に囲まれていたので、プルダウン用の配列に追加。
        $pulldownItem = $1;    #[]に囲まれた文字
        push(@pulldown, $pulldownItem);
    }
}
for($cnt = 0 ; $cnt <= $#pulldown ; $cnt++){

    #プルダウンメニューを書き出す
    print "\t\t\t<option>$pulldown[$cnt]\n";
}


3:[回答] gun [2003/12/18 16:56 ]

> 0
の読み込み部分で chomp($tmp); しているので、

$A[$cnt] =~ /^\[(.*)\]\n$/

が成立せず、1件も表示されない気がするのですが、
全てが表示されるのですか?


4:[完了] お茶 [2003/12/18 18:36 ]

いろいろ手を加えているうちに出来ました。
結果は下記になります。
ご回答いただいた皆様ありがとうございました。

for($cnt = 0 ; $cnt <= $#A ; $cnt++){
    if ($A[$cnt] =~ /^\[(.*)\]$/) {
        #『[』と『]+改行』に囲まれていたので、プルダウン用の配列に追加。
        $pulldownItem = $1;    #[]に囲まれた文字
        push(@pulldown, $pulldownItem);
    }
}
for($num = 0 ; $num <= $#pulldown ; $num++){
    #プルダウンメニューを書き出す
    print "\t\t\t<option>$pulldown[$num]\n";
}

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World