|
Страници по тази тема: 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 | >> (покажи всички)
|
|
|