|
| Split omkring et årstal Fra : Arne Feldborg |
Dato : 18-02-04 00:59 |
|
Jeg har et større antal (mange tusinde) ensartede strenge der bla
indeholder en dato. Strengen skal splittes op i samtlige enkeltdele og
det kan jeg stort set gøre med med explode() eller split(), men datoen
er ikke specifikt adskildt fra første led i stednavnet.
Datoen er altid i formatet dd mmm yyyy og jeg mener opsplitningen bør
ske på een af følgende to måder. Men jeg er bestemt ikke nogen ørn til
det der med RegExp, så vil gerne høre om der forslag til en bedre /
smartere måde at gøre det på.?
$text = 'Gender: Female Birth: 23 NOV 1842 Sankt Mikkel, Slagelse, Soro,
Denmark';
// forslag #2:
$res = preg_split ("/[0-9][0-9][0-9][0-9]+/", $text, -1,
PREG_SPLIT_OFFSET_CAPTURE);
echo '<p>'.substr($text, 0, $res[1][1]);
echo '<br>'.$res[1][0];
// forslag #2:
$res = split ('[0-9][0-9][0-9][0-9]', $text);
echo '<p>'.substr($text, 0, strlen($res[0])+5);
echo '<br>'.$res[1];
--
mvh, A:\Feldborg
Folketælllinger Hammerum og Bølling herreder, kirkebøger Hammerum herred
http://www.haunstrup.dk/feldborg/genealogi/download/
| |
Nezar Nielsen (18-02-2004)
| Kommentar Fra : Nezar Nielsen |
Dato : 18-02-04 10:48 |
|
Arne Feldborg wrote:
> $text = 'Gender: Female Birth: 23 NOV 1842 Sankt Mikkel, Slagelse, Soro,
> Denmark';
preg_match("/Birth: (\d{2}) (\w+) (\d{4})/", $text, $matches);
print "Personen er født: ".$matches[3].' '.$matches[2].' '.$matches[1]."\n";
--
Mvh. Nezar Nielsen
http://fez.dk
| |
Arne Feldborg (18-02-2004)
| Kommentar Fra : Arne Feldborg |
Dato : 18-02-04 11:46 |
|
Nezar Nielsen <tumpen@fez.dk> skrev Wed, 18 Feb 2004 10:47:36 +0100
>> $text = 'Gender: Female Birth: 23 NOV 1842 Sankt Mikkel, Slagelse, Soro,
>> Denmark';
>
>preg_match("/Birth: (\d{2}) (\w+) (\d{4})/", $text, $matches);
>
>print "Personen er født: ".$matches[3].' '.$matches[2].' '.$matches[1]."\n";
>
Tak for forslaget, det er jo en elegant måde at uddrage datoen på.
Men det løser desværre ikke det egentlige problem, nemlig at finde det
sted hvor datoen slutter og stednavnet begynder.
Eller sagt på en anden måde: Alt der kommer efter datoen skal jeg have
ind i en variabel (som jeg så efterfølgende kan arbejde videre med).
--
mvh, A:\Feldborg
Folketælllinger Hammerum og Bølling herreder, kirkebøger Hammerum herred
http://www.haunstrup.dk/feldborg/genealogi/download/
| |
Thomas Lindgaard (18-02-2004)
| Kommentar Fra : Thomas Lindgaard |
Dato : 18-02-04 12:50 |
|
On Wed, 18 Feb 2004 11:45:59 +0100, Arne Feldborg wrote:
>>> $text = 'Gender: Female Birth: 23 NOV 1842 Sankt Mikkel, Slagelse, Soro,
>>> Denmark';
>>
>>preg_match("/Birth: (\d{2}) (\w+) (\d{4})/", $text, $matches);
>>
>>print "Personen er født: ".$matches[3].' '.$matches[2].' '.$matches[1]."\n";
>>
> Tak for forslaget, det er jo en elegant måde at uddrage datoen på.
> Men det løser desværre ikke det egentlige problem, nemlig at finde det
> sted hvor datoen slutter og stednavnet begynder.
>
> Eller sagt på en anden måde: Alt der kommer efter datoen skal jeg have
> ind i en variabel (som jeg så efterfølgende kan arbejde videre med).
Udvid det regulære udtryk lidt:
preg_match("/Gender: (\w+) Birth: (\d{2}) (\w+) (\d{4}) ([\w ]+)/", $text,
$matches);
print_r($matches);
Nu skulle $matches gerne indholde:
$matches[1] = Female
$matches[2] = 23
$matches[3] = NOV
$matches[4] = 1842
$matches[5] = Sankt Mikkel, Slagelse, Soro, Denmark
.... det er dog ikke testet.
God fornøjelse
/Thomas
| |
Arne Feldborg (19-02-2004)
| Kommentar Fra : Arne Feldborg |
Dato : 19-02-04 01:12 |
|
Thomas Lindgaard <thomas@it-snedkeren.BLACK_HOLE.dk> skrev Wed, 18 Feb
2004 12:50:29 +0100
>Nu skulle $matches gerne indholde:
>
> $matches[1] = Female
> $matches[2] = 23
> $matches[3] = NOV
> $matches[4] = 1842
> $matches[5] = Sankt Mikkel, Slagelse, Soro, Denmark
>
>... det er dog ikke testet.
>
$matches[5] = Sankt Mikkel
Den skiller ved det næste komma. Men det ligger vist indenfor rammerne
af det jeg selv kan klare. Nu har jeg et fungerende eksempel jeg selv
kan eksperimentere videre med - og det var lige netop det jeg manglede.
Det viser sig nemlig at heller ikke alle datoer overholder formatet. Der
kan godt forekommen nogen der kun indeholder måned og årstal eller nogen
der indledes med et About. Og i nogle tilfælde er stednavnet kun i tre
led.
Så i alle tilfælde bliver jeg nødt til først at dele strengen op omkring
årstallet (der altid er det eneste firecfrede tal i hele strengen) og så
analysere de to halvdele hver for sig.
Mange tak for hjælpen til jer begge.
--
mvh, A:\Feldborg
Folketælllinger Hammerum og Bølling herreder, kirkebøger Hammerum herred
http://www.haunstrup.dk/feldborg/genealogi/download/
| |
|
|