[Moscow.pm] # Не удаляется в скобках

Ilya Chesnokov chesnokov.ilya на gmail.com
Пн Апр 6 04:17:53 PDT 2015


А у меня вот так:

perl -F"\s*\|\s*" -lanE 'say join(";", @F[1, 3 .. 5, 2]) . ";"' infile.txt



6 апреля 2015 г., 0:37 пользователь Nikolay Mishin <mi на ya.ru> написал:
> Костя, у меня получилось вот так:
>
> #!/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 mailing list
> moscow-pm на pm.org | http://moscow.pm.org



-- 
Best regards,
Ilya Chesnokov


Подробная информация о списке рассылки Moscow-pm