|
| 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 |
| | |
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
| |
|
|