[php] data bestandje met ongelijk aantal 'velden' uitlezen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06 20:10

Gerwin

Ik ben er klaar voor!

Topicstarter
Ik heb een txt bestandje met de volgende inhoud:

code:
1
2
blaatje|nummertje|tralala|ok|0||||||
driehoekje|vierkantje|lalalal|nee|1|||achttien|||


Nu wil ik uitdat bestandje de regeloutput weergeven in de "html" template met php:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
error_reporting  (E_ALL);
$fo = fopen('bestandje.txt',"r"); 
while (!feof ($fo)) {
$bericht = fgets($fo, 4096); 
$split = explode("|",$bericht); 

$nummer_001 = $split['0'];
$nummer_002 = $split['1'];
$nummer_003 = $split['2'];
$nummer_004 = $split['3'];
$nummer_005 = $split['4'];
$nummer_006 = $split['5'];
$nummer_007 = $split['6'];
$nummer_008 = $split['7'];
$nummer_009 = $split['8'];
$nummer_010 = $split['9'];


echo "tralalala $nummer_001 en lalala $nummer_009";

} 

fclose($fo);


Dit is een voorbeeld van wat ik heb. Nu krijg ik bij elke regel een:

code:
1
Notice: Undefined offset


en/of

code:
1
Notice: Undefined variable


Ik kan die variablen wel controleren of hij een waarde bevat, maar waar ik tegenoploop is hoe een controle op een $split nummer te doen, zonder dat ik melding krijg dat deze niet bestaat, daarmee bedoel ik dus dat ik geen Notice krijg... :)

Kan iemand me opweg helpen?

[ Voor 12% gewijzigd door Gerwin op 14-11-2004 19:13 ]

Station van Gerwin Prins op Apple Music


Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 18:04
isset() functie gebruiken lijkt me...

//edit:
Sowieso begrijp ik niet zo goed waarom je het array in losse variabelen stopt en niet gewoon in $split laat staan... Als je dat wilt kun je ook doen:

code:
1
list($var1 ... $varN) = explode('|', $string);

[ Voor 76% gewijzigd door Morrar op 14-11-2004 19:22 ]


Acties:
  • 0 Henk 'm!

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06 20:10

Gerwin

Ik ben er klaar voor!

Topicstarter
Dat heb ik geprobeerd, met dit:


PHP:
1
2
3
4
5
if (!isset($split['0'])){
   $nummer_001 = $split[0];
}else{
   $nummer_001 = "";
}


Maar hij blijft mekkeren over een:

code:
1
Notice: Undefined offset


Wat doe ik fout :?

Station van Gerwin Prins op Apple Music


Acties:
  • 0 Henk 'm!

  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07 18:43
probeer het eens met:

$nummer_001 = $split[0];
ipv
$nummer_001 = $split['0'];

split maakt array aan met een nummerieke index namelijk :)

[ Voor 5% gewijzigd door pjotrk op 14-11-2004 19:32 . Reden: Zal denk ik niet je probleem oplossen bij nader inzien, maar is wel netter ]


Acties:
  • 0 Henk 'm!

  • Domokoen
  • Registratie: Januari 2003
  • Laatst online: 06-09 22:53
Waarom doe je niet iets van count($split) om zijn lengte op te vragen?

Acties:
  • 0 Henk 'm!

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06 20:10

Gerwin

Ik ben er klaar voor!

Topicstarter
Morrar schreef op zondag 14 november 2004 @ 19:20:
isset() functie gebruiken lijkt me...

//edit:
Sowieso begrijp ik niet zo goed waarom je het array in losse variabelen stopt en niet gewoon in $split laat staan... Als je dat wilt kun je ook doen:

code:
1
list($var1 ... $varN) = explode('|', $string);
Ik heb voor die losse variabelen gekozen omdat de regels in het bestandje niet elke regel gelijk is. De | split klopt wel maar elk "veld" bevat niet altijd tekst, was dit laatste wel het geval dan kreeg ik ook geen Notice-berichten natuurlijk. Door die losse variablen lijkt met me makkelijker om te controleren of er ook daadwerkelijk iets in dat veld staat en de regel dus goed weergegeven kan worden. Als je hier andere suggesties voor hebt dan hoor ik dat graag. Die list functie is die niet alleen voor lijsten die altijd gelijk zijn, en waar dus alle velden altijd aanwezig en gevuld zijn?

Station van Gerwin Prins op Apple Music


Acties:
  • 0 Henk 'm!

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06 20:10

Gerwin

Ik ben er klaar voor!

Topicstarter
pjotrk schreef op zondag 14 november 2004 @ 19:25:
probeer het eens met:

$nummer_001 = $split[0];
ipv
$nummer_001 = $split['0'];

split maakt array aan met een nummerieke index namelijk :)
Ik heb het aangepast, is bij nader inzien wel beter idd, probleem is daarmee niet opgelost :)

Station van Gerwin Prins op Apple Music


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

PHP:
1
$var = explode('|', $tekst);

Dit werkt nog altijd het beste. Als er niks tussen twee pipetekens staat, dan komt op die plaat in het array gewoon '' te staan, een lege string dus. Waar je o.a. op kunt controleren met de empty() functie. Dus ik zie het probleem niet echt, dit is gewoon op te lossen met deze ene regel. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06 20:10

Gerwin

Ik ben er klaar voor!

Topicstarter
Mr.Chinchilla schreef op zondag 14 november 2004 @ 19:32:
Waarom doe je niet iets van count($split) om zijn lengte op te vragen?
Heb ik nu geprobeerd met:

PHP:
1
2
3
4
5
if (count($split[0]) != 0){
   $nummer_001 = $split[0];
} else {
  $nummer_001 = "leeg veldje";
}


Blijft hierbij toch opnieuw:

code:
1
Undefined offset:


Daarnaast voor de html output regel van de inhoud krijg ik:

code:
1
Undefined variable


:?

Station van Gerwin Prins op Apple Music


Acties:
  • 0 Henk 'm!

  • mr_star
  • Registratie: Maart 2003
  • Laatst online: 16-05 13:15
Gerwin schreef op zondag 14 november 2004 @ 19:25:
Dat heb ik geprobeerd, met dit:


PHP:
1
2
3
4
5
if (!isset($split['0'])){
   $nummer_001 = $split[0];
}else{
   $nummer_001 = "";
}


Maar hij blijft mekkeren over een:

code:
1
Notice: Undefined offset


Wat doe ik fout :?
Je gaat eerst controleren of $split['0'] bestaat. Indien dit NIET bestaat ga jij de inhoud van $split[0] toekennen aan $nummer_001

Ik zou tevens hier eens naar kijken. want volgens mij weet je niet echt wat arrays zijn.

en het hoort ook $split[0] te zijn en niet $split['0']. Bij de laatste notatie wordt 0 als een string gezien. PHP zal hier niet over mekkeren maar het is gewoon verkeerd.

Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 18:04
Er staan toch wel altijd evenveel |'s op een regel? Die split moet dan gewoon een lege string '' opleveren... Dus er komen wel altijd evenveel variabelen terug lijkt me, of zie ik dat verkeerd?

Het maakt ook niet uit of je:

$var1 = $array[0];
...
$varN = $array[n];

of die list oplossing doet... Dat werkt namelijk identiek, maar het zal dus nog steeds een notice geven... Het lost je probleem dus niet op... Ik vind het ook een beetje vreemd dat de notice bij iedere regel gegeven wordt en dat de variabele ($split?) er soms helemaal niet is...

//Edit:
Ik loop wat achter inmiddels, maar het moet count($split) zijn... Wellicht split je lege regels, bijvoorbeeld doordat je DOS-End of Line's (\n\r) gebruikt op een Unix bak?

//Edit2:
Probeer die output lijn voor de grap eens als echo 'blaat = ' . $variabele1 . ' blaat2 = ' . $variabele2; te schrijven... Misschien snapt ie de _001 etc niet... Gokje.

[ Voor 29% gewijzigd door Morrar op 14-11-2004 20:07 ]


Acties:
  • 0 Henk 'm!

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06 20:10

Gerwin

Ik ben er klaar voor!

Topicstarter
NMe84 schreef op zondag 14 november 2004 @ 19:51:
PHP:
1
$var = explode('|', $tekst);

Dit werkt nog altijd het beste. Als er niks tussen twee pipetekens staat, dan komt op die plaat in het array gewoon '' te staan, een lege string dus. Waar je o.a. op kunt controleren met de empty() functie. Dus ik zie het probleem niet echt, dit is gewoon op te lossen met deze ene regel. :)
Vreemd, hoe verklaar je dan dat dit niet gaat:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
error_reporting  (E_ALL);
$fo = fopen('bestandje.txt',"r"); 
while (!feof ($fo)) {
  $bericht = fgets($fo, 4096); 
  $split = explode("|",$bericht); 

  $nummer_001 = $split[0];
  $nummer_002 = $split[1];
  $nummer_003 = $split[2];
  $nummer_004 = $split[3];
  $nummer_005 = $split[4];
  $nummer_006 = $split[5];
  $nummer_007 = $split[6];
  $nummer_008 = $split[7];
  $nummer_009 = $split[8];
  $nummer_010 = $split[9];

  echo "tralalala $nummer_001 en lalala $nummer_009";
} 

fclose($fo);


Ik krijg in de regels waar de split 0....9 staan de volgende Notice:

code:
1
Undefined offset

Station van Gerwin Prins op Apple Music


Acties:
  • 0 Henk 'm!

  • mr_star
  • Registratie: Maart 2003
  • Laatst online: 16-05 13:15
PHP:
1
2
3
4
5
6
7
8
9
10
11
<? 
error_reporting  (E_ALL); 
$fo = fopen('bestandje.txt',"r");  
$bericht = '';
while (!feof ($fo)) { 
  $bericht .= fgets($fo, 4096);  
}  
fclose($fo); 

$split = explode("|",$bericht);  
?>


Probeer dit eens

edit:
mmm ik ben verkeerd. ik dacht dat fgets gewoon de regel inleesde tot het aantal bytes bereikt wordt dat als argument meegegven wordt. Maar ik zie dat fgets ook stopt bij een nieuwe regel.

[ Voor 44% gewijzigd door mr_star op 14-11-2004 20:08 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Als je nou eens het inlezen van die file apart zou pakken, en dus die explode buiten je loop zou halen....

mr_star: je hebt het precies goed. Je mist alleen wat.

PHP:
1
2
3
4
5
6
7
8
error_reporting  (E_ALL); 
$bericht = file_get_contents("bestandje.txt");

$regels = explode("\n", $bericht);
for ($i = 0; $i < count($regels); $i++) {
  $split = explode("|", $bericht[$i]);
  echo "1: ".$split[0]." 2: ".$split[1]."enz";
}

[ Voor 82% gewijzigd door NMe op 14-11-2004 21:11 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 18:04
NMe84 schreef op zondag 14 november 2004 @ 20:07:
Als je nou eens het inlezen van die file apart zou pakken, en dus die explode buiten je loop zou halen....
Dan krijgt hij alleen de laatste regel ;)

//Edit:
Maar even in een edit om de thread niet onnodig lang te maken: het zou toch niet uit moeten maken? Of hij het in de loop doet of daarna met twee explodes? Er gaat iets mis met die split, maar wat... Natuurlijk kan je ook achteraf een 2d array maken en weet ik wat niet meer, maar ws. blijft het probleem.

[ Voor 39% gewijzigd door Morrar op 14-11-2004 20:12 ]


Acties:
  • 0 Henk 'm!

  • mr_star
  • Registratie: Maart 2003
  • Laatst online: 16-05 13:15
Morrar schreef op zondag 14 november 2004 @ 20:08:
[...]

Dan krijgt hij alleen de laatste regel ;)
Niet als hij eerst explode op newlines en dan die array telkens explode op '|'.

edit: NMe84 en ik kregen gelijktijdig de zelfde ingeving >:)

[ Voor 20% gewijzigd door mr_star op 14-11-2004 20:21 ]


Acties:
  • 0 Henk 'm!

  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07 18:43
Gerwin schreef op zondag 14 november 2004 @ 19:41:
[...]

Ik heb het aangepast, is bij nader inzien wel beter idd, probleem is daarmee niet opgelost :)
Komen er in het text bestand misschien ook lege regels voor?

Dan zou je kunnen dat zo kunnen afvangen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
$fo = fopen('bestandje.txt',"r");
while (!feof ($fo)) {
    $bericht = fgets($fo, 4096);

    if (trim($bericht) != "")
    {
        $split = explode("|",$bericht);
        $nummer_001 = $split['0'];
        $nummer_002 = $split['1'];
        $nummer_003 = $split['2'];
        $nummer_004 = $split['3'];
        $nummer_005 = $split['4'];
        $nummer_006 = $split['5'];
        $nummer_007 = $split['6'];
        $nummer_008 = $split['7'];
        $nummer_009 = $split['8'];
        $nummer_010 = $split['9'];
        echo "tralalala $nummer_001 en lalala $nummer_009";
    }
}
fclose($fo);
?>


Wat overigens wel zou kunnen is een reguliere expressie gebruiken. Voor het uitelkaarhalen van je string. Dan krijg je zoiets. (misschien dat anderen nog een mooiere reguliere expressie weten hiervoor :))
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
error_reporting (E_ALL);
$fo = fopen('bestandje.txt',"r");
$linePattern = "/([^\|]*)?\|([^\|]*)?\|([^\|]*)?\|([^\|]*)?\|([^\|]*)?\|([^\|]*)?\|([^\|]*)?\|([^\|]*)?\|([^\|]*)?\|([^\|]*)?\|/";
$replacement = "tralalala \\1 en lalala \\9";
while (!feof ($fo)) {
    $bericht = fgets($fo, 4096);
    if (trim($bericht) != "")
    {
        echo preg_replace($linePattern, $replacement, $bericht);
    }
}
fclose($fo);
?>


Als je ook wil controleren of een regel idd wel x aantal pipe tekens bevatte, is count(spit) is ook idd nog een mogelijke oplossing.

[ Voor 19% gewijzigd door pjotrk op 14-11-2004 20:16 ]


Acties:
  • 0 Henk 'm!

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06 20:10

Gerwin

Ik ben er klaar voor!

Topicstarter
NMe84 schreef op zondag 14 november 2004 @ 20:07:
Als je nou eens het inlezen van die file apart zou pakken, en dus die explode buiten je loop zou halen....

mr_star: je hebt het precies goed. Je mist alleen wat.

PHP:
1
2
3
4
5
6
7
8
error_reporting  (E_ALL); 
$bericht = file_get_contents("bestandje.txt");

$regels = explode("\n", $bericht);
for ($i = 0; $i < count($regels); $i++) {
  $split = explode("|", $bericht[$i]);
  echo "1: ".split[0]." 2: ".split[1]."enz";
}
Dit geeft de volgende foutmelding:
code:
1
2
Parse error: parse error, unexpected '[', expecting ',' or ';' in
/home/httpd/vhosts/domein.nl/httpdocs/test/test2.php on line 8


Maar ik zou zo graag eens willen weten wat er aan dit script fout is:


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
error_reporting  (E_ALL);
$fo = fopen('bestandje.txt',"r"); 
while (!feof ($fo)) {
  $bericht = fgets($fo, 4096); 
  $split = explode("|",$bericht); 

  $nummer_001 = $split[0];
  $nummer_002 = $split[1];
  $nummer_003 = $split[2];
  $nummer_004 = $split[3];
  $nummer_005 = $split[4];
  $nummer_006 = $split[5];
  $nummer_007 = $split[6];
  $nummer_008 = $split[7];
  $nummer_009 = $split[8];
  $nummer_010 = $split[9];

  echo "tralalala $nummer_001 en lalala $nummer_009";
} 

fclose($fo);


Als de split gewoon een waarde bevat ook al is die leeg (""), waarom krijg ik dan de volgende foutmelding:

code:
1
Notice: Undefined offset: #

[ Voor 40% gewijzigd door Gerwin op 14-11-2004 21:12 . Reden: toevoeging ]

Station van Gerwin Prins op Apple Music


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Met zo'n duidelijke foutmelding zie jij niet dat ik op die regel de dollartekens voor de variabelenaam vergeten ben?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06 20:10

Gerwin

Ik ben er klaar voor!

Topicstarter
NMe84 schreef op zondag 14 november 2004 @ 21:10:
Met zo'n duidelijke foutmelding zie jij niet dat ik op die regel de dollartekens voor de variabelenaam vergeten ben?
Je hebt gelijk, beetje dom :)

ik krijg de volgende foutmelding:

code:
1
2
3
Notice: Undefined offset: 1 in 
/home/httpd/vhosts/domein.nl/httpdocs/test/test2.php on line 8
1: 2 2: enz

Station van Gerwin Prins op Apple Music


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

PHP:
1
2
3
4
5
6
7
error_reporting  (E_ALL); 
$regels= file("bestandje.txt");

for ($i = 0; $i < count($regels); $i++) {
  $split = explode("|", $bericht[$i]);
  echo "1: ".$split[0]." 2: ".$split[1]."enz";
}

Probeer dat eens. En als dat niet werkt, probeer dan in het vorige stuk code dat ik postte de variabele $bericht af te drukken. Ik ben benieuwd of die überhaupt gevuld wordt.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<? 
error_reporting  (E_ALL); 
$fo = fopen('bestandje.txt',"r");  
while (!feof ($fo)) { 
  $bericht = trim(fgets($fo));  
  $split = explode("|",$bericht);  
  foreach( $split as $idx => $value )
    ${'nummer_'.sprintf('%03d',$idx+1)} = $value;

  echo "tralalala $nummer_001 en lalala $nummer_009"; 
}  

fclose($fo); 
?>


Eventjes lekker stoer moeilijk gaan doen :p

Acties:
  • 0 Henk 'm!

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06 20:10

Gerwin

Ik ben er klaar voor!

Topicstarter
NMe84 schreef op zondag 14 november 2004 @ 21:18:
PHP:
1
2
3
4
5
6
7
error_reporting  (E_ALL); 
$regels= file("bestandje.txt");

for ($i = 0; $i < count($regels); $i++) {
  $split = explode("|", $bericht[$i]);
  echo "1: ".$split[0]." 2: ".$split[1]."enz";
}

Probeer dat eens. En als dat niet werkt, probeer dan in het vorige stuk code dat ik postte de variabele $bericht af te drukken. Ik ben benieuwd of die überhaupt gevuld wordt.
De volgende foutmelding krijg ik voor elke regel in het bestandje:

code:
1
2
3
4
5
6
Notice: Undefined variable: bericht in 
/home/httpd/vhosts/domein.nl/httpdocs/test/test3.php on line 6

Notice: Undefined offset: 1 in 
/home/httpd/vhosts/domein.nl/httpdocs/test/test3.php on line 7
1: 2: enz

Station van Gerwin Prins op Apple Music


Acties:
  • 0 Henk 'm!

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06 20:10

Gerwin

Ik ben er klaar voor!

Topicstarter
Verwijderd schreef op zondag 14 november 2004 @ 21:21:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<? 
error_reporting  (E_ALL); 
$fo = fopen('bestandje.txt',"r");  
while (!feof ($fo)) { 
  $bericht = trim(fgets($fo));  
  $split = explode("|",$bericht);  
  foreach( $split as $idx => $value )
    ${'nummer_'.sprintf('%03d',$idx+1)} = $value;

  echo "tralalala $nummer_001 en lalala $nummer_009"; 
}  

fclose($fo); 
?>


Eventjes lekker stoer moeilijk gaan doen :p
Mmm, begrijp nog niet helemaal wat er nu bij mij niet goed gaat en bij deze code dus wel.
Ik krijg hier geen foutmeldingen meer...

[ Voor 9% gewijzigd door Gerwin op 14-11-2004 21:29 . Reden: tikfout ]

Station van Gerwin Prins op Apple Music


Acties:
  • 0 Henk 'm!

  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07 18:43
Verwijderd schreef op zondag 14 november 2004 @ 21:21:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
error_reporting  (E_ALL);
$fo = fopen('bestandje.txt',"r");
while (!feof ($fo)) {
  $bericht = trim(fgets($fo));
  $split = explode("|",$bericht);
  foreach( $split as $idx => $value )
    ${'nummer_'.sprintf('%03d',$idx+1)} = $value;

  echo "tralalala $nummer_001 en lalala $nummer_009";
}

fclose($fo);
?>


Eventjes lekker stoer moeilijk gaan doen :p
Zo werk je offset foutmeldingen idd 'netjes' weg :p, maar lijkt me ook niet de bedoeling dat wanneer een variable in de array niet voorkomt je maar gewoon de waarde van de vorige regel laat staan :). Overigens werk je "Notice: Undefined variable" hier niet mee weg als de eerste regel(s) toevallig leeg is/zijn.

Wat volgens mij zou moeten werken:
A ) Als je zeker weet dat elke regel die niet leeg is een juist aantal | tekens heeft.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
error_reporting (E_ALL);
$fo = fopen('bestandje.txt',"r");
while (!feof ($fo)) {
    $bericht = fgets($fo, 4096);
    if (trim($bericht) != "")
    {
        $split = explode("|",$bericht);
        echo "tralalala " . $split[1] " en lalala " . $split[9];
    }
}
fclose($fo);
?>


B ) Als je alle regels die niet voldoen aan het juiste aantal kolommen maar wel tekens bevatten wilt meenemen in de uitvoer.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
error_reporting (E_ALL);
// aantal kolommen in orginele tekst bestand
$kolommen = 11;

$fo = fopen('bestandje.txt',"r");
while (!feof ($fo)) {
    $bericht = fgets($fo, 4096);
    if (trim($bericht) != "")
    {
        $split = explode("|",$bericht);

        // vul de array aan om foutmeldingen te voorkomen
        if (count($split) < $kolommen)
        {
            $split = array_merge($split ,array_fill(0, $kolommen - count($split), ""));
        }
        echo "tralalala " . $split[1] " en lalala " . $split[9];
    }
}
fclose($fo);
?>

Of met een reguliere expressie zoals ik eerder aangaf.

C ) Of als je alle regels die niet voldoen aan het juiste aantal kolommen gewoon wilt negeren.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
error_reporting (E_ALL);
// aantal kolommen in orginele tekst bestand
$kolommen = 11;

$fo = fopen('bestandje.txt',"r");
while (!feof ($fo)) {
    $bericht = fgets($fo, 4096);
    $split = explode("|",$bericht);
    if (count($split) >= $kolommen)
    {
        echo "tralalala " . $split[1] " en lalala " . $split[9];
    }
}
fclose($fo);
?>



Ook leken mij de variables "$nummer_001" enzo, zoals anderen al aangaven idd overbodig.
PHP:
1
2
3
4
echo "tralalala " . $split[1] " en lalala " . $split[9];
//kan ook als
echo "tralalala {$split[1]} en lalala {$split[9]}";
//als je de zin niet wilt onderbreken (maar is wel trager)

Acties:
  • 0 Henk 'm!

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06 20:10

Gerwin

Ik ben er klaar voor!

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<? 
error_reporting  (E_ALL); 
$fo = fopen('bestandje.txt',"r");  
while (!feof ($fo)) { 
  $bericht = trim(fgets($fo));  
  $split = explode("|",$bericht);  
  foreach( $split as $idx => $value )
    ${'nummer_'.sprintf('%03d',$idx+1)} = $value;

  echo "tralalala $nummer_001 en lalala $nummer_009"; 
}  

fclose($fo); 
?>


Ik zie overigens nu wel dat het scriptje hierboven de laatste regel dubbel of zelfs 3 keer weergeeft... :(


edit:


Te laat in bovenstaande bericht al gemeld :)

[ Voor 79% gewijzigd door Gerwin op 14-11-2004 22:22 ]

Station van Gerwin Prins op Apple Music

Pagina: 1