Bonjour,
Je veux lire un fichier texte dont chaque ligne est composée de plusieurs champs séparés par des TAB (0x09) et mettre pour chaque ligne ses champs dans un tableau.
Le programme principal appelle la fonction pour chaque ligne en lui passant le tableau en paramètre, la fonction remplit les champs du tableau.
Le problème c'est que je ne retrouve pas les valeurs dans le tableau au retour dans le programme principal alors qu'ils sont bien remplis dans la fonction.
Programme principal:
Fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 <?php session_start(); $type=2; // changer ici $type: 0=>net sans PDO; 1=>net avec PDO; 2=>local avec PDO $_SESSION['type']=$type; $tab_line = array('c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'c10', 'c11', 'c12', 'c13', 'c14'); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="stylephp.css" /> <?php include('fonctions.php'); ?> <title>create bdd</title> </head> <body> <?php $filepath='c:/users/Roger/Documents/Pharmacies/Commun/Pharmacies1.txt'; //dump($filepath,1000); $handle=fopen($filepath, 'r'); if($handle) { while(!readaline($handle, $tab_line)) { //echo '<p>'.$c1.$c0.$c2.'</p>'; //echo '<p>'.$$tab_line[1].$$tab_line[0].$$tab_line[2].'</p>'; } } fclose($handle); ?> </body> </html>
le echo fonctionne dans la fonction mais pas dans le prog principal, j'ai essayé de passer le tableau en global (en enlevant le paramètre dans l'appel) ça ne marche pas non plus, j'ai essayé de le passer par référence (avec &) je me fais jeter !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 <?php function readaline($handle, $tab_line) { //global $tab_line; $endoffile=true; for($j=0; $j<count($tab_line); $j++) $$tab_line[$j]=''; $i=0; while(!feof($handle)) { $caractere=fgetc($handle); $cod=ord($caractere); if(($cod==0x0)or($cod==0x0D)) break; // s'il y a eu des caractères $endoffile sera false, si le 00 est juste après un 0A $endoffile sera resté à true else { if($cod!=0x0A) // on ignore les 0A { if($cod==0x09) {$i++; $endoffile=false;} // $endofline à false ici car on est sûr que s'il y a une ligne on a des 09, si c'était des lignes sans 09, il faudrait le mettre à false sur chaque caractère { $$tab_line[$i]=$$tab_line[$i].$caractere; // on concatène les caractères dans le champ $i de la table } } } } echo '<p>'.$c1.$c0.$c2.'</p>'; return $endoffile; } ?>
Merci pour vos conseils
Partager