PDA

Bekijk Volledige Versie : eregi_replace met vriend preg_match (poging 4)



matthijsdezwart@gmail.com
18/12/07, 14:05
(Gisteren veel problemen met de nieuwsserver, dus ik zie mijn
originele posting, tweede poging en eventuele antwoorden niet. Vandaar
nog een poging, maar de chello server geeft de berichten niet weer.
Dus nu maar via google)

Voor het vullen van een database moet ik een file regel voor regel
inlezen
en de info via explode opbreken in stukken die naar de kolomen in de
database geschreven kunnen worden. Met explode op een comma zou ik
normaal
gezien de regel mooi opbreken in stukken die ik nodig heb, maar er kan
ook
een comma in het commentaar staan....en die wordt dan ook onnodig
opgebroken. Dus dacht ik, laat ik dan "," eerst vervangen door
bijvoorbeeld
|| en dan explode op ||, maar toen viel het me op dat veld 3, 5 en 8
niet
vergezeld worden door quotes.

"0102846383","EUR",20070102,"D",178.50,"012345679","Naam van
tegenpartij",20070102,"MA","hier wat commentaat met een , dus. Soms
zelf een
comma bij een getal zoals hier 1,5","kenmerk: pta013235",etc...


als oplossing voor de data (veld 3 en 8) dacht ik aan dit:

($buffer is de regel die ingelezen wordt)
preg_match_all("([0-9])",$buffer,$getallen);
$aantalaanpassingen = count($getallen);
for($i=0;$i<$aantalaanpassingen;$i++)
{
str_replace(',$getallen[$i],','\",$getallen[$i],\"',$buffer);
}

Maar dit geeft niet het gewenste resultaat. Veld 3 en 8 blijven zonder
quotes staan.
Iemand een suggestie waarom dit niet werkt en hoe ik dit zo zou kunne
oplossen dat het wel werkt en het lieft ook zo dat veld 5 ook direct
meegenomen kan worden?
Mazzel,

Matthijs

Nico Schuyt
18/12/07, 15:25
matthijsdezwart@gmail.com wrote:
> Voor het vullen van een database moet ik een file regel voor regel
> inlezen
> en de info via explode opbreken in stukken die naar de kolomen in de
> database geschreven kunnen worden. Met explode op een comma zou ik
> normaal
> gezien de regel mooi opbreken in stukken die ik nodig heb, maar er kan
> ook
> een comma in het commentaar staan....

Kun je geen ander scheidingsteken gebruiken? Zoals een tab-teken.
Vervolgens inlezen met 'load data (local) infile'

--
Nico

Rik Wasmus
18/12/07, 15:45
On Tue, 18 Dec 2007 14:04:26 +0100, <matthijsdezwart@gmail.com> wrote:

> (Gisteren veel problemen met de nieuwsserver, dus ik zie mijn
> originele posting, tweede poging en eventuele antwoorden niet. Vandaar
> nog een poging, maar de chello server geeft de berichten niet weer.
> Dus nu maar via google)
>
> Voor het vullen van een database moet ik een file regel voor regel
> inlezen
> en de info via explode opbreken in stukken die naar de kolomen in de
> database geschreven kunnen worden. Met explode op een comma zou ik
> normaal
> gezien de regel mooi opbreken in stukken die ik nodig heb, maar er kan
> ook
> een comma in het commentaar staan....en die wordt dan ook onnodig
> opgebroken. Dus dacht ik, laat ik dan "," eerst vervangen door
> bijvoorbeeld
> || en dan explode op ||, maar toen viel het me op dat veld 3, 5 en 8
> niet
> vergezeld worden door quotes.
>
> "0102846383","EUR",20070102,"D",178.50,"012345679","Naam van
> tegenpartij",20070102,"MA","hier wat commentaat met een , dus. Soms
> zelf een
> comma bij een getal zoals hier 1,5","kenmerk: pta013235",etc...
>
>
> als oplossing voor de data (veld 3 en 8) dacht ik aan dit:
>
> ($buffer is de regel die ingelezen wordt)
> preg_match_all("([0-9])",$buffer,$getallen);
> $aantalaanpassingen = count($getallen);
> for($i=0;$i<$aantalaanpassingen;$i++)
> {
> str_replace(',$getallen[$i],','\",$getallen[$i],\"',$buffer);
> }
>
> Maar dit geeft niet het gewenste resultaat. Veld 3 en 8 blijven zonder
> quotes staan.
> Iemand een suggestie waarom dit niet werkt en hoe ik dit zo zou kunne
> oplossen dat het wel werkt en het lieft ook zo dat veld 5 ook direct
> meegenomen kan worden?

In PHP zijn fgetcsv() en fputcsv() je vrienden denk ik... waarom moeilijk
doen als het makkelijk kan :). Verder, als je MySQL gebruikt, dan is
inderdaad de LOAD DATA (LOCAL) INFILE syntax ook een geweldige, die ook
prima het verschil wel snapt tussen een komma binnen en een komma buiten
quotes.
--
Rik Wasmus

Matthijs de Z
19/12/07, 11:35
"Rik Wasmus" <luiheidsgoeroe@hotmail.com> schreef in bericht
news:op.t3jb6jgi5bnjuv@metallium.lan...
> On Tue, 18 Dec 2007 14:04:26 +0100, <matthijsdezwart@gmail.com> wrote:


> In PHP zijn fgetcsv() en fputcsv() je vrienden denk ik... waarom moeilijk
> doen als het makkelijk kan :). Verder, als je MySQL gebruikt, dan is
> inderdaad de LOAD DATA (LOCAL) INFILE syntax ook een geweldige, die ook
> prima het verschil wel snapt tussen een komma binnen en een komma buiten
> quotes.

ik geloof dat ik met vriend fgetcsv al een aardig eind in de richting kom
voor een probleem. Bedankt daarvoor.
Maar bij een ander probleem zou het wel wenselijk zijn als ik kan zoeken op
een reg expr en daar omheen iets kan plaatsen. Is dat dus eigenlijk wel
mogelijk?
mazzel,

Mathijs

> --
> Rik Wasmus

Matthijs de Z
19/12/07, 11:35
> Kun je geen ander scheidingsteken gebruiken? Zoals een tab-teken.

Nee, helaas krijg ik de file zo aangeleverd. Vandaar het 'probleem'.
Mazzel,

Matthijs

> Vervolgens inlezen met 'load data (local) infile'

Ronald Klip
19/12/07, 11:55
Op Wed, 19 Dec 2007 11:27:46 +0100 schreef Matthijs de Z:
> "Rik Wasmus" <luiheidsgoeroe@hotmail.com> schreef in bericht
> news:op.t3jb6jgi5bnjuv@metallium.lan...
>> On Tue, 18 Dec 2007 14:04:26 +0100, <matthijsdezwart@gmail.com> wrote:

[csv parsen]

>> In PHP zijn fgetcsv() en fputcsv() je vrienden denk ik... waarom
>> moeilijk doen als het makkelijk kan :). [..]
>
> ik geloof dat ik met vriend fgetcsv al een aardig eind in de richting
> kom voor een probleem. Bedankt daarvoor.
> Maar bij een ander probleem zou het wel wenselijk zijn als ik kan zoeken
> op een reg expr en daar omheen iets kan plaatsen. Is dat dus eigenlijk
> wel mogelijk?

Tuurlijk. Het lastige is dat je rekening zou moeten houden met quotes,
komma's en regeleindes binnen velden. In de comments op
http://nl3.php.net/split staan enkele stukjes script, misschien heb je
daar iets aan?


--
groet, Ronald

Matthijs de Z
19/12/07, 18:45
"Ronald Klip" <nieuws@contentecontent.invalid> schreef in bericht
news:op.t3kwelriu6ldbc@dedell...

>> Maar bij een ander probleem zou het wel wenselijk zijn als ik kan zoeken
>> op een reg expr en daar omheen iets kan plaatsen. Is dat dus eigenlijk
>> wel mogelijk?

> Tuurlijk. Het lastige is dat je rekening zou moeten houden met quotes,
> komma's en regeleindes binnen velden. In de comments op
> http://nl3.php.net/split staan enkele stukjes script, misschien heb je
> daar iets aan?

Ik zie het staan. Ik denk dat ik daar wellicht iets aan kan hebben. Bedankt!
Mazzel,

Matthijs


>
>
> --
> groet, Ronald