[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