• ベストアンサー

ある条件で一致した場合、配列に代入したい

foreach(0..$#DataLines){ my@aaa= split(/<>/,$DataLines[$_]); if($FORM{No} eq @aaa[1]){ unshift(@bbb,"$DataLines[$_]"); } } print F "@bbb"; した時に配列@bbbにif($FORM{No} eq @aaa[1]){ で一致した場合、その時の配列を全部@bbbに代入したいのですが、最後のしか入らないようなので、これを全部入れるにはどうすれば良いかご教授願えませんでしょうか。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

質問の内容が微妙に変わったような気がしますが(^^; それはおいといて、 >と■の部分に半角空白が入ってしまうので これ、@bbbにはたぶん期待通りの内容が入っていると思いますよ。 > print F "@bbb"; ダブルクォートでくくると variable interpoation が行われるので ほんとうにそれが目的でないのなら、ダブルクォートは不要です。 むしろ余計(だから空白が入る)。 ファイルのデータの半角スペースが削除できない - 教えて!goo http://oshiete1.goo.ne.jp/qa3281869.html あ、俺だw

taku0
質問者

お礼

ありがとうございます!! そうゆう事だったんですねー。以前も同様の処理で同じ所でつまずいたままだったんですが、今回、思い切って投稿してみまして、ご紹介頂いたURLからはっきりと理解する事が出来ました。 ご教授頂き有難う御座います!感謝致します!!

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

>その時の配列を全部@bbbに代入したいの 「そのときの配列」ってなんですか? 質問にあるスクリプトから判断すると > my @aaa= split(/<>/,$DataLines[$_]); この @aaa ですか? if($FORM{No} eq @aaa[1]){ ← 右辺は $aaa[1]? unshift(@bbb,"$DataLines[$_]"); ← ダブルクォートは必要ない そもそもなんで unshift? } 何がやりたいのかよくわかりません(^^; @bbb = @aaa とか @bbb = @DataLines とかいう話ではないのでしょうか。

taku0
質問者

お礼

行ないたい事が上手く伝わってないようで申し訳御座いませんでした。 行ないたい事は @DataLinesの中身 1<>1<>あああああ<> 2<>3<>ええ<> 3<>4<>かか<> 4<>1<>ううう<> 5<>1<>おおお<> だったとして $FORM{No}=1; に一致する場合、配列全体を別の配列へ代入させて取り出したいので、下記のようにしたのですが foreach(0..$#DataLines){ my@aaa= split(/<>/,$DataLines[$_]); if($FORM{No} eq $aaa[1]){ # unshift(@bbb,$DataLines[$_]); # push(@bbb,"$DataLines[$_]"); } } print F "@bbb"; @bbbには 1<>1<>あああああ<> 4<>1<>ううう<> 5<>1<>おおお<> が入るようにしたいのですが、 上記のunshiftやpushですと 1<>1<>あああああ<> ■4<>1<>ううう<> ■5<>1<>おおお<> と■の部分に半角空白が入ってしまうので、この半角空白が入らないように配列に入れてゆくにはどうすれば良いかご教授願えませんでしょうか

関連するQ&A