/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
At splitte en qoutet streng.
Fra : Morten Guldager


Dato : 21-04-01 13:38

Hejsa,

En smuk måde til at splitte strengen:

12,"hest","25.12.68",3.7,"Madrid, Spanien",-

op i 6 strenge indeholdende:

12
hest
25.12.68
3.7
Madrid, Spanien
-

ønskes.

Kom frisk.


/Morten

 
 
Arne Jørgensen (21-04-2001)
Kommentar
Fra : Arne Jørgensen


Dato : 21-04-01 13:43

mogul@guldager.uni.to (Morten Guldager) writes:

> Hejsa,
>
> En smuk måde til at splitte strengen:
>
> 12,"hest","25.12.68",3.7,"Madrid, Spanien",-
>
> op i 6 strenge indeholdende:
>
> 12
> hest
> 25.12.68
> 3.7
> Madrid, Spanien
> -
>
> ønskes.

split /,/

/arne
--
stud. scient. Arne Jørgensen
Børglumvej 2, v. 351, 8240 Risskov
tlf: 89 37 93 51, mobil: 21 65 01 13
e-post: arne@daimi.au.dk, http://www.daimi.au.dk/~arne/

Morten Guldager (21-04-2001)
Kommentar
Fra : Morten Guldager


Dato : 21-04-01 13:46

On 21 Apr 2001 14:42:52 +0200, Arne Jørgensen <arne+usenet@daimi.au.dk> wrote:
>mogul@guldager.uni.to (Morten Guldager) writes:
>>
>> En smuk måde til at splitte strengen:
>>
>> 12,"hest","25.12.68",3.7,"Madrid, Spanien",-
>>
>> op i 6 strenge indeholdende:
>>
>> 12
>> hest
>> 25.12.68
>> 3.7
>> Madrid, Spanien
>> -
>>
>> ønskes.
>
>split /,/

Og det virker ikke.

Det går galt mellem Madrid og Spanien.

Der skulle også plukkes nogle " tegn af. Men det kan selvfølgelig
gøres med

foreach (@resultatliste)
s/"//g;

efter splittet.



/Morten

Arne Jørgensen (21-04-2001)
Kommentar
Fra : Arne Jørgensen


Dato : 21-04-01 13:54

mogul@guldager.uni.to (Morten Guldager) writes:

> On 21 Apr 2001 14:42:52 +0200, Arne Jørgensen
> <arne+usenet@daimi.au.dk> wrote:
> >mogul@guldager.uni.to (Morten Guldager) writes:
> >>
> >> En smuk måde til at splitte strengen:
> >>
> >> 12,"hest","25.12.68",3.7,"Madrid, Spanien",-
> >>
> >> op i 6 strenge indeholdende:
> >>
> >> 12
> >> hest
> >> 25.12.68
> >> 3.7
> >> Madrid, Spanien
> >> -
> >>
> >> ønskes.
> >
> >split /,/
>
> Og det virker ikke.
>
> Det går galt mellem Madrid og Spanien.
>
> Der skulle også plukkes nogle " tegn af. Men det kan selvfølgelig
> gøres med
>
> foreach (@resultatliste)
> s/"//g;
>
> efter splittet.

Ja, selvfølgelig. Det kunne være jeg skulle have læst dit spørgsmål
lidt grundigere første gang.

Så skal du vel ud i noget pattern matching og nogle regexp's og sådan
noget snavs.

mvh
/arne
--
stud. scient. Arne Jørgensen
Børglumvej 2, v. 351, 8240 Risskov
tlf: 89 37 93 51, mobil: 21 65 01 13
e-post: arne@daimi.au.dk, http://www.daimi.au.dk/~arne/

Lars Balker Rasmusse~ (21-04-2001)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 21-04-01 13:57

mogul@guldager.uni.to (Morten Guldager) writes:
> En smuk måde til at splitte strengen:
>
> 12,"hest","25.12.68",3.7,"Madrid, Spanien",-
>
> op i 6 strenge indeholdende:
>
> 12
> hest
> 25.12.68
> 3.7
> Madrid, Spanien
> -
>
> ønskes.

perldoc -q split
--
Lars Balker Rasmussen "Woo hoo!?"

Peter J. Acklam (21-04-2001)
Kommentar
Fra : Peter J. Acklam


Dato : 21-04-01 21:34

mogul@guldager.uni.to (Morten Guldager) writes:

> En smuk måde til at splitte strengen:
>
> 12,"hest","25.12.68",3.7,"Madrid, Spanien",-
>
> op i 6 strenge indeholdende:
>
> 12
> hest
> 25.12.68
> 3.7
> Madrid, Spanien
> -
>
> ønskes.

Du kan bruke

my @matches = $str =~ /([^,"]+|"[^"]*")/g;

men det beholder "-ene. Du kan eventuelt bruke

sub csvsplit {
local $_ = shift;
my @out;
while (length) {
if (s/^([^,"]+)(?:,|$)//) {
push @out, $1;
} elsif (s/^"([^"]*)"(?:,|$)//) {
push @out, $1;
} else {
die "invalid format\n";
}
}
return @out;
}

Jeg vet ikke om det er tillat med \" i en "-streng, men hvis det
er det, så får du bare modifisere det som står over, eller spørre
igjen, så kan noen her gjøre det.

Peter

--
#!/local/bin/perl5 -wp -*- mode: cperl; coding: iso-8859-1; -*-
# matlab comment stripper (strips comments from Matlab m-files)
s/^((?:(?:[])}\w.]'+|[^'%])+|'[^'\n]*(?:''[^'\n]*)*')*).*/$1/x;

Thomas Jespersen (22-04-2001)
Kommentar
Fra : Thomas Jespersen


Dato : 22-04-01 02:34

mogul@guldager.uni.to (Morten Guldager) writes:

> Hejsa,
>
> En smuk måde til at splitte strengen:

Er det fordi du skal arbejde med CSV filer?

I så fald:
http://search.cpan.org/doc/ALANCITT/Text-CSV-0.01/CSV.pm

Ask Bjoern Hansen (22-04-2001)
Kommentar
Fra : Ask Bjoern Hansen


Dato : 22-04-01 04:53

mogul@guldager.uni.to (Morten Guldager) writes:

DBD::CSV er nok ikke den mest effektive maade, men til nogle ting
virker det fint.


- ask

--
ask bjoern hansen - http://ask.netcetera.dk/

Trond Michelsen (22-04-2001)
Kommentar
Fra : Trond Michelsen


Dato : 22-04-01 19:47

Morten Guldager <mogul@guldager.uni.to> skrev i
meldingsnyheter:slrn9e2vp6.jg7.mogul@guldager.uni.to...
> En smuk måde til at splitte strengen:
> 12,"hest","25.12.68",3.7,"Madrid, Spanien",-
> ønskes.


Modulene Text::CSV og Text::CSV_XS er fine til dette. De tar også hensyn til
escapede "-tegn.

(Text::CSV er ren perl, Text::CSV_XS er, som navnet antyder, en XS-modul, og
normalt mye raskere)

#!/usr/bin/perl
use Text::CSV_XS;

$, = "\n";
$\ = "\n\n";

$str = q{12,"12""","hest","25.12.68",3.7,"Madrid, Spanien",-};
$csv = Text::CSV_XS->new();
$csv->parse($str);
print $csv->fields;
__END__
12
12"
hest
25.12.68
3.7
Madrid, Spanien
-

--
Trond Michelsen




Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste