Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 03:16 14.05.24 
Компютри и Интернет
   >> Perl
Всички теми Следваща тема *Кратък преглед

Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема Re: Porskajete kak da stane tozi Regular Expressionнови [re: ricki]  
Авторsofit (Нерегистриран)
Публикувано08.05.03 20:30



#!/usr/bin/perl -w
use strict;
$_ = '156,"15,234",567,845,156,234,567,845';
my @array = /((?:(?<=")(?:\d+,\d+)(?="))|(?:\d+)),?/g;

или

my @array = /((?<=")\d+,\d+(?=")|\d+)/g;

Ако горното те притеснява като сложност...

@array вече ще съдържа както следва следните елементи (подред от 0-6):
156
15,234
567
845
156
234
567
845

Не е най-доброто, което може да се измисли, но... Има и по-трудно нещо, което ми дойде първо като идея, но горното сякаш хем си върши работата хем е малко сложно и кефи;)

$str='1,"3,21",5,6,"12,41"';

while ($str)
{
($obj, $str) = popitem($str);
push(@ar, $obj);
}
print join("|", @ar);
sub popitem
{
my $in = shift;
my @out;
if ($in =~ m/^(\d+),(.*)/) { $out[0] = $1; $out[1] = $2; return @out; }
elsif ($in =~ m/^"(.+?)",(.*)/) { $out[0] = $1; $out[1] = $2; return @out; }
else { $in =~ s/"//g; $out[0] = $in; return @out; }
}

Надявам се, че това помогна...



Тема Re: Porskajete kak da stane tozi Regular Expressionнови [re: sofit]  
Авторricki (Нерегистриран)
Публикувано10.05.03 01:20



Супер !!!

Това последното е идеално, popitem е точно това, което ми трябваше. Работи идеално. Аз само малко го изминих да чете от и пише вав файл. Макар че ако веднаж си създал масива @ar, после можеш да правиш каквото си искаш със стойностите.

Например входен файл - input.csv:
1,"123,345",345,"324,232,234",12,"Kasf, sdf","121341,3451,13241,132414,213,421"
2,"1,230","784","234,456",23,"23","123,456,789,123","Abcd, dhjr kjh? Fkjha df,asdf,f fas, fa"
3,"1,230","784","234,456",23,"23"
4,"1,230","784"

open FILE, "input.csv" or die "Cannot open input file";
open OFILE, ">output.txt";

foreach $input (<FILE>) {
while ($input)
{
($obj, $input) = popitem($input);
push(@ar,$obj);
}
for ($i;$i<@ar;$i++){print OFILE $ar[$i]."|";}
print OFILE "\n";
}

print "Done\n";

sub popitem {
my $in = shift;
my @out;
if ($in =~ m/^(\d+),(.*)/) {
$out[0] = $1;
$out[1] = $2;
return @out;
} elsif ($in =~ m/^"(.+?)",(.*)/) {
$out[0] = $1;
$out[1] = $2;
return @out;
} else {
$in =~ s/"//g; $out[0] = $in;
return @out;
}
}

а изходеня файл - output.txt ще има следния вид:

1|123,345|345|324,232,234|12|Kasf, sdf|121341,3451,13241,132414,213,421|
2|1,230|784|234,456|23|23|123,456,789,123|Abcd, dhjr kjh? Fkjha df,asdf,f fas, fa|
3|1,230|784|234,456|23|23|
4|1,230|784|

Още веднаж, благодаря много за помоща!




Страници по тази тема: 1 | 2 | >> (покажи всички)
Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.