foreachの繰り返しに制限を加えたいんですが。
[上に]
[前に]
[次に]
taro
[E-Mail]
2000/06/10(土) 02:27:03
どなたか教えてください。
下記の例でうまく動く方法を教えてください。
@a=(0,1,2,3,4,5,6,7,8,9,10);
forech $b (@a) {
print $b;
}
とすれば,0,1,2・・・と表示されるのですが,これを$bを0,1,2,3というふうに出力させたい。
1,2,3,4とか2,3,4,5といったふうに繰り返しする量に制限を加えたいのですが,どうすればいいのでしょうか?
andi
2000/06/10(土) 02:51:02
foreach $b (@a){
if($b > 0 && $b < 5){
print $b;
}
}
ということ?
それとも
foreach $b (@a){
if($i++ < 4){
print $b;
}
}
ということ?
Fuji.♪
[E-Mail]
[HomePage]
2000/06/10(土) 12:40:03
for ($i = 2; i < 6; i++) {
print $a[$i];
}
とか?
Fuji.♪
[E-Mail]
[HomePage]
2000/06/10(土) 12:40:45
う、
>for ($i = 2; i < 6; i++) {
for ($i = 2; $i < 6; $i++) {
に修正
taro
[E-Mail]
2000/06/10(土) 13:32:23
[[解決]]
ありがとうございます。
なんとなくわかりました。
あつかましいようですが,ちょっと質問よりずれてしまうかもしれませんがもう少し。
csv.files=
time
a,a1,a2,a3,a4
b,b1,b2,b3,b4
c,c1,c2,c3,c4
・
・
・
となってるデータファイルより@dataに任意の数だけのデータを渡したいのです。
全部とりだすsubルーチンを下記のように設定してます。
sub csv_open {
if (!open(CSV,"$csv_file")) { $msg = 'データファイルが見つかりません。'; &error; }
@data_lines = <CSV>;
close(CSV);
$time_data = $data_lines[0];
shift (@data_lines);
}
で,foreach文で@data_lineから100番目から200番目までのサンプルを@dataにとりだそうと考えてたんです。
そうすると
foreach (@data_lines) {
if($i++>100){push(@data,$_)}
if($i=200){last;}
}
で,いいんでしょうか?
最初からcsv filesを開くときに100個のサンプルを取る方法はないものでしょうか?
たこすけ
2000/06/10(土) 13:35:43
for (1..4) {
print $a[$_];
}
とか?
andi
2000/06/10(土) 13:37:36
sub csv_open {
if (!open(CSV,"$csv_file")) { $msg = 'データファイルが見つかりません。'; &error; }
$time_data = <CSV>;
while(<CSV>){
if($i > 100 && $i < 200){
push(@data_lines,$_);
}
}
close(CSV);
}
かな。
たこすけ
2000/06/10(土) 13:38:30
あ、遅かった。
上の発言は無視して下さい。
andi
2000/06/10(土) 13:38:50
あ、間違え。
while(<CSV>){
if($i > 100 && $i <= 200){
push(@data_lines,$_);
}
$i++;
}
かな。
たこすけ
2000/06/10(土) 13:39:34
更に遅かった・・・
本当に、ごめんなさい。。。
taro
[E-Mail]
2000/06/10(土) 14:04:31
[[解決]]
ありがとうございます。
一度ためしてみます。
?
2000/06/10(土) 15:16:02
>@data_lineから100番目から200番目までのサンプルを@dataにとりだそう
@data = @data_line[99..199];
だけでいいのでは?
ちなみに
>$time_data = $data_lines[0];
>shift (@data_lines);
はこれだけでよい?
$time_data = shift (@data_lines);
[上に]
[前に]
[次に]