[perl] обработка двух строк массива как одну
for (my $i=0; $i<размер_массива; $i+=2)
{
$b[$i/2] = $a[$i].$a[$i+1];
}
![](/images/graemlins/smile.gif)
Посему вопрос - а массив @b как надо перед этим объявлять?
полагаю будет просто @b;
![](/images/graemlins/smile.gif)
это вполне логично... а вот надо ли его вообще объявлять или он сам по себе появится?
![](/images/graemlins/wink.gif)
но я бы объявил
while (@a) {
process(shift @a, shift @a);
}
хотя действительно приличного способа к сожалению нет, хотелось бы что-нибудь типа
foreach my ($a,$b) (@a) {
...
}
но ниработаит.
![](/images/graemlins/confused.gif)
open(FI, "1.txt");
@a = <FI>;
@b = ;
for ($i=0; $i<6; $i+=2) {$b[$i/2] = $a[$i].$a[$i+1]
};
close (FI);
open (FO, ">out.txt");
print FO @b;
close(FO);
получается на выходе просто
1
a
2
b
3
c
может кто подскажет, в чем у меня лажа?
![](/images/graemlins/confused.gif)
![](/images/graemlins/smirk.gif)
while ( ($a, $b, @a) = @a, defined($a) ) {
...
}
только это неэффективно скорее всего
где ты их там видишь?
в файле 1.txt, по идее
1
a
2
b
3
c
Создай файлы
1a2b3c
и
1
a
2
b
3
c
и сравни их размеры
а как их убрать-то?
$a[$i] =~ s/\n//;
перед конкатенацией.
А если файл в винде создавался, то аналогично хорошо бы и "\r" убрать. У $a[$i+1] ничего убирать не надо в твоем примере
![](/images/graemlins/smile.gif)
sed -n 'N;s/\^M*\^J//g;p'
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
%b=@a;
map {print "$_$b{$_}\n"} keys %b;
а \n уберается chomp' ом
$a[$i] =~ s/\n//;
йеба*уцца перловые програмисты
![](/images/graemlins/laugh.gif)
PS. ой не дочитал тред до конца
![](/images/graemlins/blush.gif)
С хешем вариант потенциально ошибочный, что мешает ключам совпасть?..
да ты и начало треда не читал. Я написал, что перл не знаю практически
Оставить комментарий
Fake_queen
Какие-нибудь есть приемчики, как с помощью Perl обработать массив строк так, чтобы анализировались две строки как одна?Или можно ли строки вида
1
а
2
б
3
в
...
объединить в строки вида
1а
2б
3в
..
спасибо