Ik ben bezig om een script te maken die een file inleest die ik aangeleverd krijg uit een bepaald software pakket.

Het is een csv, gescheiden door ;

Echter in een bepaalde kolom staat tussen dubbele aanhalingstekens 2 waardes die ook gescheiden zijn door ;

Voorbeeld:
"1";"Naam klant";"Plaats klant";"Emailadres1;Emailadres2"

Ik heb het geprobeerd met:

$lines = file(bestandsnaam);

foreach ($lines as $line_num => $line) {

$row_array=explode("";"",$line);

}

Echter zet hij nu het 1e mailadres in $row_array[3] en het 2e mailadres in $row_array[4]. Het zou zo moeten zijn dat beide mailadressen in $row_array[3] zouden moeten staan.

Hoe zou ik dat het beste op kunnen lossen?

Nee, hij doet precies wat jij [swil[/s] zegt

Bij die e-mail adressen staan geen quotes.

Dus, eerst alles tussen de quotes uithalen, en als er in die quotes nog een ; staat ga je daar op exploden ;-)
Het probleem is dat er ook een kolom is met numerieke waarden en deze staan dan weer niet tussen quotes. Dus daar loop ik dan weer tegenaan.

Voorbeeld:
"1";"Naam klant";"Plaats klant";"Emailadres1;Emailadres2";1

Of heb ik dat mis?


probeer dit eens:
<?php
$lines = file(bestandsnaam);

foreach ($lines as $line_num => $line) {

$row_array=explode('";"',$line);

}
?>
als het goed is geeft dat dit:

$row_array = Array(
   0 => "1",
   1 => "Naam klant",
   2 => "Plaats klant",
   3 => "Emailadres1;Emailadres2"
)

Dan blijft er nog een probleem over:
$row_array bevat alleen de gegevens van het laatste element van de array $lines, De laatste regel van het gestand dus. Misschien vind jij dat geen probleem, maar waarom zou je dan... laat maar, zo los je het mogelijke probleem op:
<?php
$lines = file(bestandsnaam);
$row_array = array();

foreach ($lines as $line_num => $line) {

$row_array[] = explode('";"',$line);

}
?>

EDIT: ik had je laatste bericht niet goed gelezen, je moet wat ingewikkelders gaan doen. Ik ben er mee bezig. Het simpelste is om ervoor te zorgen dat je geen ";" gebruikt tussen de aanhalingstekens, of een ander scheidingsteken gebruikt. Als je dat niet wilt zijn er denk ik nog wel betere manieren, zoals de gegevens in een database zetten.

EDIT2: ik denk dat je het beste (als je bovenstaande dingen niet wilt doen) de numerieke waarden ook tussen aanhalingstekens kan zetten, PHP kan daar wel mee omgaan.
Dank je! Deze(fgetsv) had ik over het hoofd gezien.
Werkt geweldig.

Bedankt voor jullie reacties en hulp.

Reageren