ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:taku0 ある条件で一致した場合、配列に代入したい
困り度:
  • 困っています
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に代入したいのですが、最後のしか入らないようなので、これを全部入れるにはどうすれば良いかご教授願えませんでしょうか。

宜しくお願い致します。
質問投稿日時:08/04/13 00:53
質問番号:3944265
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

良回答20pt

回答者:sakusaker7 質問の内容が微妙に変わったような気がしますが(^^;
それはおいといて、
>と■の部分に半角空白が入ってしまうので

これ、@bbbにはたぶん期待通りの内容が入っていると思いますよ。

> print F "@bbb";

ダブルクォートでくくると variable interpoation が行われるので
ほんとうにそれが目的でないのなら、ダブルクォートは不要です。
むしろ余計(だから空白が入る)。

ファイルのデータの半角スペースが削除できない - 教えて!goo
http://oshiete1.goo.ne.jp/qa3281869.html

あ、俺だw
種類:回答
どんな人:経験者
自信:参考意見
回答日時:08/04/13 14:04
回答番号:No.2
この回答へのお礼ありがとうございます!!

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

ご教授頂き有難う御座います!感謝致します!!

回答

 

回答者:sakusaker7 >その時の配列を全部@bbbに代入したいの
「そのときの配列」ってなんですか?
質問にあるスクリプトから判断すると

> my @aaa= split(/<>/,$DataLines[$_]);

この @aaa ですか?

if($FORM{No} eq @aaa[1]){ ← 右辺は $aaa[1]?
unshift(@bbb,"$DataLines[$_]"); ← ダブルクォートは必要ない そもそもなんで unshift?
}

何がやりたいのかよくわかりません(^^;
@bbb = @aaa とか @bbb = @DataLines
とかいう話ではないのでしょうか。
種類:補足要求
どんな人:経験者
自信:参考意見
回答日時:08/04/13 02:39
回答番号:No.1
この回答へのお礼行ないたい事が上手く伝わってないようで申し訳御座いませんでした。

行ないたい事は

@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<>おおお<>
と■の部分に半角空白が入ってしまうので、この半角空白が入らないように配列に入れてゆくにはどうすれば良いかご教授願えませんでしょうか
最新から表示回答順に表示良回答のみ表示