Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/11/2010, 18h30   #1
Nouveau Membre du Club
 
Inscription : janvier 2009
Messages : 43
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 43
Points : 27
Points : 27
Par défaut Charger un tableau multidimensionnel

Bonjour,
Je ne suis pas vraiment débutant, mais je rame depuis hier sur la gestion d'un tableau et en appelle à vos lumières.

Dans un fichier texte, j'ai n lignes (enregistrements) de 5 chiffres séparés par des étoiles (séparateur). Exemple avec 3 lignes :
10*12*14*7*8
22*44*12*8*9
11*5*4*2*1

Je voudrais charger ces valeurs dans un tableau de 5 colonnes, mais je ne sais pas combien mon fichier contient de lignes. Je fais donc une première lecture du fichier pour connaître cette valeur (c'est très lourd, mais ça marche).

Voici mon code. Tout fonctionne, mais à la ligne 25 je ne sais plus faire.

Code :
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
<?php 
  $enregistrements = 0;			//variable
  $champs = 5;					//constante
  $fichier = "scores/score01.txt";
 
  // On compte le nombre d'enregistrements
  $fp=fopen($fichier,"r");       // ouverture du fichier
  while (!feof ($fp))            // tant qu'on n'a pas atteint la fin du fichier
	{
    $ligne = fgets($fp, 255);    // stockage des enregistrements dans $ligne
    if(strlen($ligne)!=0):		 // mon dernier enregistrement vaut toujours 0 (???)
      $enregistrements += 1;
	endif;
    }
  echo "Nombre d'enregistrements : ".$enregistrements."<BR>";
 
   // On parse les enregistrements un à un
   $fp=fopen($fichier,"r");       // ouverture du fichier
   while (!feof ($fp))            // tant qu'on n'a pas atteint la fin du fichier
	{
    $ligne = fgets($fp, 4096);  // stockage dans $ligne
    $donnee=explode("*",$ligne);  // parsing des données basé sur "*")
    if(strlen($ligne)!=0):
      for ($i=0;$i<=20;$i++){
	    echo "<BR>$donnee[$i]";		// c'est là que je sèche, je ne sais pas comment entrer mes données parsées dans un tableau x=5 y=3
	  }
	endif;
  }
?>
Merci d'avance.
Dormeur74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 19h02   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 815
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 815
Points : 3 440
Points : 3 440
Je m'y prendrais ainsi :

Code :
1
2
3
4
5
6
$data = array( ) ; // Tableau de destination
$fp = fopen($file, 'r') ;
while ( ($line = fgets($fp)) !== FALSE ) {
    $data[ ] = sscanf($line, '%d*%d*%d*%d*%d') ; // Empîlage
}
fclose($fp) ;
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 19h03   #3
Membre éclairé
 
Inscription : octobre 2004
Messages : 235
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 235
Points : 360
Points : 360
Dans l'absolu un tableau bi-dimensionnel s'utilise ainsi :

Code :
1
2
3
4
 
$tab = array();
....
$tab[$ligne][$colone] = ....
Joker-eph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 19h04   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
avec fgetcsv :
Code :
1
2
3
4
5
6
7
8
<?php
if (($handle = fopen($fichier, "r")) !== FALSE) {
    while (($line = fgetcsv($handle, 1000, "*")) !== FALSE) {
        $data[] = $line;
        }
    fclose($handle);
}
?>
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 09h23   #5
Nouveau Membre du Club
 
Inscription : janvier 2009
Messages : 43
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 43
Points : 27
Points : 27
Par défaut [Problème réglé]

Vous êtes géniaux. Les deux propositions fonctionnent à merveille.
Je ne connaissais pas la fonction fgetcsv( ) mais quel raccourci !
Bravo et merci pour tout.
Dormeur74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h22.


 
 
 
 
Partenaires

Hébergement Web