[Moscow.pm] # Не удаляется в скобках
Кузьменко Константин
ikkv на yandex.ru
Пн Апр 6 00:56:55 PDT 2015
Добрый день,
Спасибо, за помощь!
--
Специалист IT, GNU, FLOSS, Open Source
Моб: +7 (951) 131 33 90
С уважением,
Кузьменко Константин Викторович
06.04.2015, 00: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
--
Специалист IT, GNU, FLOSS, Open Source
Моб: +7 (951) 131 33 90
С уважением,
Кузьменко Константин Викторович
06.04.2015, 00: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
Подробная информация о списке рассылки Moscow-pm