Import csv file met quoted strings

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan-Willem Schreuders

Jan-Willem Schreuders

15/09/2009 11:34:00
Quote Anchor link
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?
 
PHP hulp

PHP hulp

23/12/2024 14:07:15
 

15/09/2009 11:56:00
Quote Anchor link
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 ;-)
Gewijzigd op 01/01/1970 01:00:00 door
 
Jan-Willem Schreuders

Jan-Willem Schreuders

15/09/2009 12:01:00
Quote Anchor link
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?
 
Krop Kroppyer

Krop Kroppyer

15/09/2009 16:27:00
Quote Anchor link
probeer dit eens:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$lines
= file(bestandsnaam);

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

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

}

?>

als het goed is geeft dat dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
$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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?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.
Gewijzigd op 01/01/1970 01:00:00 door Krop Kroppyer
 
Tristan nvt

Tristan nvt

15/09/2009 16:53:00
 
Jan-Willem Schreuders

Jan-Willem Schreuders

15/09/2009 21:10:00
Quote Anchor link
Dank je! Deze(fgetsv) had ik over het hoofd gezien.
Werkt geweldig.

Bedankt voor jullie reacties en hulp.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.