Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1530 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [php] lire dans un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[php] lire dans un fichier

n°1632231
-tinost@r-
Revers coupé
Posté le 28-10-2007 à 03:47:52  profilanswer
 

Bonjour,

 

voila je programme un script pour lire dans un fichier et effectuer des opérations sur les lignes de ce dernier.

 

voici ce que ça donne (j'ai bien simplifié bien sur :o)

 
Code :
  1. $nom_fichier = "liste";
  2. // Ouverture du fichier
  3. if ($TabFich = file($nom_fichier))
  4.  {
  5.  for($i = 0; $i < count($TabFich); $i++)
  6.  // 1ere operation : Le nombre de caractères
  7.  $nb_car = strlen($TabFich[$i]);
  8.  // 2eme op : on releve la premiere lettre
  9.  $prems_car = substr($TabFich[$i],0,1);
  10.  echo $TabFich[$i];
  11.  echo "<br>Nb caractères : $nb_car, premiere lettre : $prems_car";
  12.  }
 

J'aimerais savoir pourquoi j'obtiens le message d'erreur :

 

Notice: Undefined offset: 7 in c:\.... on line 11
Notice: Undefined offset: 7 in c:\.... on line 13

 

J'ai bien le nb de caractères qui s'affiche, mais la boucle s'arrête au premier mot relevé dans le fichier (d'ailleurs je constate qu'il commence par la derniere ligne huh) et qu'il ne releve par contre par la premiere lettre.

 

Ou est mon erreur de débutant ? :o

 

merci


Message édité par -tinost@r- le 28-10-2007 à 03:48:50
mood
Publicité
Posté le 28-10-2007 à 03:47:52  profilanswer
 

n°1632238
olivthill
Posté le 28-10-2007 à 08:58:10  profilanswer
 

C'est un problème d'accolades.
 
Ce qui se passe, c'est que la ligne

for($i = 0; $i < count($TabFich); $i++)

fait tourner le compteur $i jusqu'à la fin, et après la valeur de $i pour les lignes suivantes

$nb_car = strlen($TabFich[$i]);
...

est déjà à la fin du fichier. Quand on dépasse les bornes, il n'y a plus de limite, dit un proverbe tibètain. D'où les messages d'erreur.  
 
La solution est :
 
1. Mettre une accolade ouvrante après l'instruction for()
2. Mettre une accolade fermante après le deuxième echo.
 
N.B. Cette erreur aurait été plus visible si les lignes avaient été bien indentées, car on aurait vu que la dernière accolade est celle du if, et non pas celle du for.


Message édité par olivthill le 28-10-2007 à 08:59:45
n°1632303
-tinost@r-
Revers coupé
Posté le 28-10-2007 à 14:36:35  profilanswer
 

Ah d'accord !

 

Je n'avais jamais vu la boucle For porter des accolades. Mais peut être que tous les exemples que j'ai pu voir ne fonctionnaient que sur une seule instruction, et qu'on peut s'autoriser à ne pas mettre d'accolade quand c'est court.

 

En tout cas, merci beaucoup, pour tes explications.


Message édité par -tinost@r- le 28-10-2007 à 14:36:53
n°1632344
-tinost@r-
Revers coupé
Posté le 28-10-2007 à 15:56:23  profilanswer
 

hmmm j'ai un autre probleme :/
 
Le relevé de la premiere lettre est bon.
 
Par contre le compte du nombre de caractère ne fonctionne pas.
 
voici le contenu du fichier liste

Code :
  1. ligne0
  2. ligne1


 
et voici ce qu'il me trouve :  
 

Code :
  1. Nb caractères : 8, premiere lettre : l
  2. Nb caractères : 6, premiere lettre : l


 
pour la derniere ligne, il m'en trouve donc bien 6. Mais pourquoi m'en trouve t-il 8 pour "ligne0".
(il n'y a pas d'espace, rien)
Y a un principe que je n'ai pas compris :o
 
merci :jap:

n°1632350
tRanCe
Bogoss Kwa
Posté le 28-10-2007 à 16:17:44  profilanswer
 

La première ligne contient les caractères de retour à la ligne.
Il faut donc utiliser la fonction rtrim.


Message édité par tRanCe le 28-10-2007 à 16:18:23
n°1632352
-tinost@r-
Revers coupé
Posté le 28-10-2007 à 16:19:48  profilanswer
 

hey mais ça va pas la tête ?

n°1632356
tRanCe
Bogoss Kwa
Posté le 28-10-2007 à 16:28:28  profilanswer
 

Faudra pas venir poser ta prochaine question ici, espèce de newbie  :ange:

n°1632357
-tinost@r-
Revers coupé
Posté le 28-10-2007 à 16:29:13  profilanswer
 

[:trance]

 

merci, ça marche :o


Message édité par -tinost@r- le 28-10-2007 à 16:29:22

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [php] lire dans un fichier

 

Sujets relatifs
comment lire un fichier audio mp3 ou wav avec c++ ?lire le contenu du fichier d une liste
lire les 10 premier Line du contenue d'un fichier[Résolu] utiliser une table tempo pour lire un fichier .xls
ouvrir et lire un fichier sur serveurLire un fichier LDF [résolu]
[SQL Server][Gestion de fichier] Ouvrir lire créer un fichier via SQL?comment lire un fichier sol
C++ comment ouvrir et lire un fichier sur serveur distant ?....
Plus de sujets relatifs à : [php] lire dans un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR