[Moscow.pm] # Не удаляется в скобках
Nikolay Mishin
mi на ya.ru
Вс Апр 5 14:37:16 PDT 2015
Костя, у меня получилось вот так:
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Modern::Perl;
use IO::Interactive qw(is_interactive);
use Encode::Locale qw(decode_argv);
use Text::CSV;
&prepare_encoding_console();
my $csv = Text::CSV->new(
{
binary => 1,
auto_diag => 1,
sep_char => '|',
allow_whitespace => 1,
}
);
my $file = $ARGV[0] or die "Need to get CSV file on the command line\n";
my @result = ();
open( my $data, '<:encoding(utf8)', $file )
or die "Could not open '$file' $!\n";
while ( my $fields = $csv->getline($data) ) {
push @result, ( join( ';', @{$fields}[ 1, 3 .. 5, 2 ] ) . ';' );
}
if ( not $csv->eof ) {
$csv->error_diag();
}
close $data;
print join( "\n", @result );
sub prepare_encoding_console {
if ( is_interactive() ) {
binmode STDIN, ':encoding(console_in)';
binmode STDOUT, ':encoding(console_out)';
binmode STDERR, ':encoding(console_out)';
}
Encode::Locale::decode_argv();
return 1;
}
https://github.com/mishin/presentation/blob/master/gen_csv.pl
исходный файл
https://github.com/mishin/presentation/blob/master/test.txt
запускать так
perl gen_csv.pl test.txt
12345678901234567890;ФАМИЛИЯ;ИМЯ;ОТЧЕСТВО;760.00;
12345678901234567890;ФАМИЛИЯ1;ИМЯ1;ОТЧЕСТВО;760.00;
05.04.2015, 23:40, "Кузьменко Константин" <ikkv на yandex.ru>:
> Вот так "/\s*\|\s*/" удаляются пробелы и "\n" и тд и тп но мне же надо оставить "\n" в конце строки
> Подходит это:
> $_ =~ s/\h+//g;
> $_ =~ s/\|/;/g;
> Вопрос как удалить столбци
>
> --
> Специалист IT, GNU, FLOSS, Open Source
> Моб: +7 (951) 131 33 90
> С уважением,
> Кузьменко Константин Викторович
>
> 05.04.2015, 23:24, "Ilya Chesnokov" <chesnokov.ilya на gmail.com>:
>> 5 апреля 2015 г., 23:14 пользователь Кузьменко Константин
>> <ikkv на yandex.ru> написал:
>>> Это файл TXT
>>> 123 | 12345678901234567890 | 760.00 |ФАМИЛИЯ |ИМЯ |ОТЧЕСТВО |123456|222|888|9|RU|00007|
>>> На Выходе должен получиться CSV
>>> 12345678901234567890;ФАМИЛИЯ;ИМЯ;ОТЧЕСТВО;760.00;
>> Это вообще проще без регулярок делать. А банальным split-ом (с
>> минимальной регуляркой вида /\s*|\s*/) и join-ом (ну или при помощи
>> модуля Text::CSV).
>>> --
>>> Специалист IT, GNU, FLOSS, Open Source
>>> Моб: +7 (951) 131 33 90
>>> С уважением,
>>> Кузьменко Константин Викторович
>>>
>>> 05.04.2015, 18:16, "Иван Миронов" <mironorange на gmail.com>:
>>>> Константин, Добрый день!
>>>>
>>>> Попробуйте уменьшить жадность квантификаторов добавив после знаков звездочки вопросительный знак.
>>>>
>>>> s/^(.*?;).*?;.*?;.*?;.*?;.*?;(.*?;.*?;.*?;.*?;.*?;.*?;)$//g;
>>>>
>>>> Если не получится, я думаю было бы здорово если бы вы приложили пример исходных данных для этого регулярного выражения.
>>>>
>>>> воскресенье, 5 апреля 2015 г. пользователь Алексей Мышкин написал:
>>>>> Есть подозрение что жадный квантификатор берёт всё что может, и строке за скобками уже ничего не остаётся.
>>>>>
>>>>> 5 апреля 2015 г., 15:42 пользователь Кузьменко Константин <ikkv на yandex.ru> написал:
>>>>>> Добрый день Moscow.pm
>>>>>> Не могу понять регулярки перл!
>>>>>>
>>>>>> #!/usr/bin/perl
>>>>>>
>>>>>> use strict;
>>>>>> use warnings;
>>>>>> use utf8;
>>>>>> use open qw/ :encoding(utf8) :std /;
>>>>>> #use open qw/ :encoding(cp1251) :std /;
>>>>>>
>>>>>> my @onfil = @ARGV;
>>>>>> open(INFIL, "<:encoding(cp866)", $onfil[0])
>>>>>> or die "NO STANDART $!";
>>>>>>
>>>>>> while (<INFIL>) {
>>>>>> $_ =~ s/\h+//g;
>>>>>> $_ =~ s/\|/;/g;
>>>>>> $_ =~ s///g;
>>>>>> $_ =~ s/^(.*;).*;.*;.*;.*;.*;(.*;.*;.*;.*;.*;.*;)$//g; # Не удаляется в скобках
>>>>>> print;
>>>>>> }
>>>>>>
>>>>>> close INFIL;
>>>>>>
>>>>>> __END__
>>>>>>
>>>>>> Может что нибудь посоветуете
>>>>>> зы: Z yjdbxjr d Зукл
>>>>>> --
>>>>>> Специалист IT, GNU, FLOSS, Open Source
>>>>>> Моб: +7 (951) 131 33 90
>>>>>> С уважением,
>>>>>> Кузьменко Константин Викторович
>>>>>>
>>>>>> --
>>>>>> Moscow.pm mailing list
>>>>>> moscow-pm на pm.org | http://moscow.pm.org
>>>>> --
>>>>> С уважением,
>>>>> Мышкин Алексей.
>>>> --
>>>> С уважением, Миронов Иван!
>>>> тел.: +7 (926) 206-90-39
>>>>
>>>> ,
>>>>
>>>> --
>>>> Moscow.pm mailing list
>>>> moscow-pm на pm.org | http://moscow.pm.org
>>> --
>>> Moscow.pm mailing list
>>> moscow-pm на pm.org | http://moscow.pm.org
>> --
>> Best regards,
>> Ilya Chesnokov
>> --
>> Moscow.pm mailing list
>> moscow-pm на pm.org | http://moscow.pm.org
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
--
С уважением
Николай Мишин
Подробная информация о списке рассылки Moscow-pm