- ベストアンサー
空白が・・・
$numbers="@LECREREAD[0]"; #@LECREREAD[0]にはK00R4が代入済み @CHECK=grep(/$numbers/,@DATAFILES); #一致するものを検索 print "CODETEST-$numbers-<br>STTEST-@CHECK-<br>"; #表示部 というプログラムがあります。 しかしこれを実行すると、 CODETEST-K00R4 - STTEST-- となって、@CHECKの結果が出てきません。 また、CODETESTのK00R4の後に何故か空白が表示されてしまいます。 この空白が原因でしょうか? 空白が原因でしたら、正規表現による削除方法をご教示 して頂ければ幸いです。 (調べて見たのですが、どうしても空白が消えない・・)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> この空白が原因でしょうか? その通りです。この状態だと、/K00R4 /というパターンマッチを行いますので、例えば、「K00R4,test,100」みたいなデータはひっかかりません。 $number =~ s/s+$//; のようにして、$numberの後ろの空白を削除してみては。 正規表現と置換演算子s///については、Perl付属のドキュメントperlreやperlfuncなどをご覧下さい。 ただ今回のケースだと、massasoytさんが指摘されているように、そもそも$LECREREAD[0]に空白が入っているのがおかしいようにも思えます。 バグの原因が、その直前にあるとは限りません。もっと前の部分をチェックしてみた方が良いかも。
その他の回答 (2)
- osamuy
- ベストアンサー率42% (1231/2878)
No.2に、訂正。 $number =~ /\s+$// ――ですね。
こんばんは。 >@CHECKの結果が出てきません。 どんな結果をお望みなのでしょうか? (1)一致した要素ですか? CODETEST-K00R4- STTEST-K00R4- (2)それとも一致した回数ですか? CODETEST-K00R4- STTEST-一致した要素の数- また、@DATAFILESはどんな内容ですか? とりあえず下記のスクリプトでテストしたところ、正常((1)と仮定)に表示されました。 @LECREREAD = K00R4; @DATAFILES =(J00R5,L11S4,K00R5,K00R4); $numbers = @LECREREAD[0]; @CHECK=grep(/$numbers/,@DATAFILES); print "Content-type :text/html\n\n"; print "<html><head><title>Data Check</title></head><body>\n"; print "CODETEST-$numbers-<br>STTEST-@CHECK-<br>"; print "</body></html>"; <結果> CODETEST-K00R4- STTEST-K00R4- 「表示されない」「空白」、いずれの問題も配列への代入の仕方に問題があるように思います。
補足
@DATAFILESの中は[K00R4,名前,所属・・・]入ってます。 >@LECREREAD = K00R4; では無く、 CSVファイル[K00R4\nK01C8\n・・・]のファイルを@LECREREADに入れています。 私のしたい事は一致した要素を含む行を@CHECKに入れたいのです。
お礼
@LECREREAD[0]の内容の最後にコンマをつけて、 my ($numbers, $dummy) = split(/,/, @LECREREAD[0]); の処理をする事で、空白を消すこと(実際空白はコンマの後ろ)で正常処理出来ました。 根本的解決になってないような気がしますが、 動くので、問題無しです! ありがとうございました。