#perl
#perl
Вопрос:
Мои строки
Line: foobar, foo
Line: webar, webar, we
Line:
abcabc
abc
Line:
xyzxyz
xyz
Что я хочу сделать, так это объединить их в одну строку:
Line: foobar, foo
Line: webar, webar, we
Line: abcabc, abc
Line: xyzxyz, xyz
Комментарии:
1. Я предполагаю, что где-то есть какая-то школа или работодатель, задающий этот вопрос. Похоже, что существует множество вопросов о том, как мне соединить одну строку со следующей, если что -то задает вопросы. Для выполнения операции: как вы думаете, что произойдет, если вы пройдете, не зная, или возьметесь за работу, не понимая?
Ответ №1:
Один из методов — прочитать весь файл и разделить на nLine:
, а затем выполнить некоторые исправления данных.
use strict;
use warnings;
use Data::Dumper;
my $data = <<EOF;
Line: foobar, foo
Line: quxbar, quxbar, quxx
Line:
abcabc
abc
EOF
$data =~ s/^Line: //;
my @lines = split("nLine: ", $data);
s/n/, /g for @lines;
print join "n", map { "Line: $_" } @lines;
Комментарии:
1. Запустите свой код — после 3-го есть дополнительный
,
Line:
Ответ №2:
script.pl:
#!/usr/bin/perl -w
my @lines;
while(<>) {
chomp;
if(m/^Line: /) {
push @lines, $_;
}
else {
if(length $lines[-1] == 6) {
$lines[-1] .= $_;
}
else {
$lines[-1] .= ", $_";
}
}
}
print "$_n" for @lines;
Сохраните свой пример ввода в виде файла и запустите
cat file | perl script.pl
Комментарии:
1. ‘Cat’ — ненужная трата процесса. Просто сделайте: perl script.pl файл
2.
say for @lines
выглядит немного лучше.3. @TLP: да, я согласен, но я стараюсь избегать функций, которые недоступны в Perl5 по умолчанию, если я не знаю, что у нас есть недавний Perl.
4. С другой стороны, вы должны поощрять людей к обновлению до новых версий perl и новых функций.