PHP strtok() functie lege waarden in txt-file

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een .txt-bestand waarin een adressenbestand staat. Deze moet in een database gezet worden, echter heb ik het volgende probleem:

Ik heb de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$fb = $filename;  
$fopen = fopen($fb,"r");

while(!feof($fopen)){
$data = fgets($fopen,filesize($fb));
$tok = strtok($data,"\t");
while($tok !== false){
$teller = 0;
while($teller<16){
$array[$teller] = str_replace("'","",$tok);
if ($array[$teller]=='') $array[$teller]="-";
$teller++;
$tok = strtok("\t");
}//while
mysql_query("INSERT INTO $tabel (bondsnummer,achternaam,voorletters,tussenvoegsel,roepnaam,straat,huisnummer,
postcode,woonplaats,land,telefoon,mv,geboortedatum,enkel,dubbel,emailadres) 
VALUES ('$array[0]','$array[2]','$array[1]','$array[3]','$array[4]','$array[5]','$array[6]','$array[7]','$array[8]','$array[9]'
,'$array[10]','$array[11]','$array[12]','$array[13]','$array[14]','$array[15]')") or die(mysql_error());
}//while
}//while


Nou is het probleem, dat als bijvoorbeeld tussenvoegsel leeg is, hij deze niet als een lege string wegschrijft in de database, maar hij pakt het volgende argument (in deze dus roepnaam) en plaatst deze in de kolom tussenvoegsel.

Het txt-bestand is gescheiden mbv tabs (zoals ik ook zoek op '\t' als token...)

Hoe kan ik voorkomen dat dit gebeurt?

Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 12:37

Gonadan

Admin Beeld & Geluid, Harde Waren
Zolang er geen duidelijke scheiding is tussen de velden wordt het lastig.
Je kunt kijken of het met een hoofdletter begint, tussenvoegsels meestal niet maar ik weet niet precies hoe het bestand in elkaar zit. Misschien kan je een voorbeeld posten.

Anders kan je nog proberen om via een regular expression te kijken wat voor type data het is. En zo bijvoorbeeld terug tellen vanaf huisnummer, al zal dat niet echt lekker werken. ;)

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • Comgenie
  • Registratie: Oktober 2005
  • Laatst online: 12-09 13:09

Comgenie

Soms heb je dat

Volgensmij kan je in plaats van strtok ook explode gebruiken, zover ik weet laat die lege strings wel gewoon staan, ipv de volgende te pakken

No animals were harmed in the making of this comment.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Comgenie schreef op zaterdag 16 juni 2007 @ 20:34:
Volgensmij kan je in plaats van strtok ook explode gebruiken, zover ik weet laat die lege strings wel gewoon staan, ipv de volgende te pakken
explode() slaat ook de lege waarde over...bovendien zeg ik dan $deelstring=explode("\t",$data) en dan slaat ie ook de regeleinden over...

Acties:
  • 0 Henk 'm!

  • TheBorg
  • Registratie: November 2002
  • Laatst online: 20-09 18:24

TheBorg

Resistance is futile.

Doe een stringreplace (notepad) in je sourcefile en maak van alle tabs iets als ";"
Dan nog een double quote aan het begin en het eind van de regel.

PHP:
1
2
3
4
5
6
7
    while ($data = fgetcsv ($fileresource, 100000, ';' ))
    {
        $SQLQuery = "INSERT INTO whatever etc.
            mysql_real_escape_string($data[1])
            etc.
        $foobar = mysql_query($SQLQuery) or die(mysql_error());
    }

[ Voor 44% gewijzigd door TheBorg op 16-06-2007 21:00 ]


Acties:
  • 0 Henk 'm!

  • Kuhlie
  • Registratie: December 2002
  • Niet online
explode werkt prima zoals jij wilt. Heb je het echt geprobeerd? (Oh, en gebruik indentatie, dit is echt niet leesbaar.)

Acties:
  • 0 Henk 'm!

  • Comgenie
  • Registratie: Oktober 2005
  • Laatst online: 12-09 13:09

Comgenie

Soms heb je dat

Hmnz, Als explode het ook doet. Dan lijkt me dat php bij \t ook meerdere tabs gelden door een of andere vage reden. Zoals al werd genoemt, de tabs vervangen door iets anders zou het makkelijkst zijn.

No animals were harmed in the making of this comment.

Pagina: 1