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

  FORUM HardWare.fr
  Programmation
  PHP

  probleme pour lire un fichier texte avec script php

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme pour lire un fichier texte avec script php

n°1509823
DrOctopus
Posté le 01-02-2007 à 21:44:18  profilanswer
 

Bonjour a tous,
j'ai fais ce code pour qu'il lise un fichier texte, et, si une chaine du fichier contient (en 1ere lettre) la lettre X (par exemple),  
alors le script affiche qqch.
 
<?
$fp = fopen("fichier.txt","r" );    
while(!feof($fp)) // Tant que l'on n'est pas à la fin du fichier on continue de lire le fichier
{
$ligne = fgets($fp, 1024); //lecture ligne par ligne
if (!feof($fp))  
 {
 $pos = strpos($ligne, 'P', 0);  
 if ($pos == "0" )    //si la 1ere lettre est un P
  {
  print "c'est cette ligne qui contient un P:$ligne<br>";
  }
 else
  {
  print "$ligne<br>"; //sinon on affiche la ligne normalement
  }
 }
}
fclose($fp);
?>  
 
voila ce que ca me retourne:
c'est cette ligne qui contient un P:valeur1
c'est cette ligne qui contient un P:Paleur2
c'est cette ligne qui contient un P:valeur3  
 
Alors que j'aimerais qu'elle retourne ceci:
valeur1
c'est cette ligne qui contient un P:Paleur2
valeur2
 
Voila, je pense que mon soucis est qu'il manque un test pour CHAQUE ligne, mais bon je ne vois pas trop lol
Quelqu'un saurait svp ?
d'avance merci !

mood
Publicité
Posté le 01-02-2007 à 21:44:18  profilanswer
 

n°1509825
sielfried
Posté le 01-02-2007 à 21:53:06  profilanswer
 

Code :
  1. foreach (file('fichier.txt') as $line) {
  2.  if (strpos($line, 'P') !== false) {
  3.    // contient P
  4.  } else {
  5.    // ne contient pas P
  6.  }
  7. }


Message édité par sielfried le 01-02-2007 à 21:53:28

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1509831
DrOctopus
Posté le 01-02-2007 à 22:13:20  profilanswer
 

merci de ton aide sielfried, mais j'ai mal du m'exprimer, car je voulais en fait que le strpos détecte le 1er caractère de la chaine. Exemple:
chaine1
chaine2
@haine3
chaine4
...
ici je veux détécter le "@" ,c'est qqch comme ca non ?
--> strpos($chaine_a_analyser, '@', 0);
 
par contre tu dois avoir raison sur la forme du programme, avec le foreach ;)

n°1509848
sielfried
Posté le 01-02-2007 à 22:58:46  profilanswer
 

J'avais effectivement mal lu (je lis toujours en diagonale), ceci dit tu devrais pouvoir adapter ça en lisant simplement la doc de strpos... (http://fr.php.net/manual/fr/function.strpos.php)
 
Allez va :
 

Code :
  1. foreach (file('fichier.txt') as $line) {  
  2.  if (strpos($line, 'P') === 0) {    // voire : if ($line[0] == 'P')
  3.    // contient P en première lettre
  4.  } else {    
  5.    // sinon
  6.  }
  7. }


 
(edit: corrigé avec ===)


Message édité par sielfried le 02-02-2007 à 10:26:37

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1509930
omega2
Posté le 02-02-2007 à 10:19:09  profilanswer
 

avec strpos et un certain nombre d'autres fonctions, il faut utiliser le triple égale ( === ) au lieux du double. Le double se contente de vérifier si la valeur numérique (si possible de transformer en nombre) ou la valeur de la chaine de caractére sont égaux. En php, "false" (faux en francais) à pour équivalent numérique 0 ce qui fait que si tu testes avec le chiffre 0 il te dira que c'est bon.
Avec le triple égal, php va également vérifier le type de donnée. Et là, le booléen "false" sera différent de 0 vu que le type booléen est différent du type numérique.
 
EDIT : D'ailleur, le probléme est expliqué dans la doc de php ( http://fr2.php.net/manual/fr/function.strpos.php ) et le coup du === y est même indiqué en encadré.


Message édité par omega2 le 02-02-2007 à 10:21:26
n°1509935
sielfried
Posté le 02-02-2007 à 10:26:20  profilanswer
 

Exact, j'ai écrit ça vite.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1510136
DrOctopus
Posté le 02-02-2007 à 15:31:43  profilanswer
 

merci, euh maintenant il me fait le bon teste, seulement il me le fait 4 fois, surement parce qu'il a 3 lignes a mon fichier (+1 de blanc ?)
Ca donne ça:
 
valeur1
c'est cette ligne qui contient un P:Paleur2
valeur3
valeur1
c'est cette ligne qui contient un P:Paleur2
valeur3
valeur1
c'est cette ligne qui contient un P:Paleur2
valeur3
valeur1
c'est cette ligne qui contient un P:Paleur2
valeur3  

n°1510143
sielfried
Posté le 02-02-2007 à 15:45:41  profilanswer
 

Fais voir ton fichier texte et le code exact que tu as écris.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1510221
DrOctopus
Posté le 02-02-2007 à 18:29:05  profilanswer
 

sielfried a écrit :

Fais voir ton fichier texte et le code exact que tu as écris.


 
C'est bon j'ai enfin qqch qui marche :)
 
Voici le code que tu me demandais précédement:

Code :
  1. <?
  2. $fp = fopen("fichier.txt","r" ); 
  3. while(!feof($fp)) // Tant que l'on n'est pas à la fin du fichier on continue de lire le fichier
  4. {
  5. $line = fgets($fp, 1024);
  6.       foreach (file('fichier.txt') as $line) { 
  7.        if (strpos($line, 'P') === 0) { 
  8.          // contient P en première lettre
  9.  print "c'est cette ligne qui contient un P:$line<br>";
  10.        }
  11.        else {   
  12.          // sinon
  13.  print "$line<br>";
  14.        }
  15.       }
  16. }
  17. fclose($fp);
  18. ?>


 
Et voici celui qui marche:
 

Code :
  1. <?php
  2. $fp = fopen("fichier.txt","r" );
  3. while(!feof($fp)) // Tant que l'on n'est pas à la fin du fichier on continue de lire le fichier
  4. {
  5.     $ligne = fgets($fp, 1024); //lecture ligne par ligne
  6.    
  7.     if(substr($ligne, 0, 1) == 'P')
  8.     {
  9.         echo 'C\'est cette ligne qui contient un P:'.$ligne.'<br>';
  10.     }
  11.     else
  12.     {
  13.         echo $ligne.'<br>';
  14.     }
  15. }
  16. fclose($fp);
  17. ?>


 
Par curiosité,j'aimerais quand meme savoir pourquoi le 1er script ne marche pas lol.
merci a tous !

n°1510222
sielfried
Posté le 02-02-2007 à 18:37:24  profilanswer
 

lol... non mais ce que j'avais mis suffisait, y a pas besoin de l'entourer par fopen ou quoi que ce soit... :spamafote:


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
mood
Publicité
Posté le 02-02-2007 à 18:37:24  profilanswer
 

n°1510228
DrOctopus
Posté le 02-02-2007 à 19:14:18  profilanswer
 

bah je ne sais pas, ca m'affiche le bon truc, mais en 4 fois, comme ceci:
valeur1
c'est cette ligne qui contient un P:Paleur2
valeur3
valeur1
c'est cette ligne qui contient un P:Paleur2
valeur3
valeur1
c'est cette ligne qui contient un P:Paleur2
valeur3
valeur1
c'est cette ligne qui contient un P:Paleur2
valeur3  
 
alors que ca devrait etre:
valeur1
c'est cette ligne qui contient un P:Paleur2
valeur3  
 
héhé

n°1510229
sielfried
Posté le 02-02-2007 à 19:19:18  profilanswer
 

Tu lis ce que j'écris ? [:pingouino]  
 
Je t'ai écrit le code complet, y a rien d'autre à mettre (juste à remplacer les commentaires par ce dont t'as besoin), si t'arrives pas à faire un simple copier-coller je n'y peux rien...
 
edit: mais si ta méthode marche tant mieux, je ne dis pas que j'ai la solution parfaite... c'est juste nettement plus propre et concis selon moi.


Message édité par sielfried le 02-02-2007 à 19:20:15

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar

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

  probleme pour lire un fichier texte avec script php

 

Sujets relatifs
Recherhce d'une valeur dan un fichier texte[ASP.net] Texte en diagonale
Recuperer le texte de la consoleProblème caractère "?" à la place des "é"
Problème de comparaison.Flash Problème Clip dans un Clip
requête sql+php: problème de syntaxe[C] Construire un tableau à partir d'un fichier
Flash Texte déroulant au survol de la souris 
Plus de sujets relatifs à : probleme pour lire un fichier texte avec script php


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