rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

[PHP] boucle pr lire txt & recup les chiffres

Posté par maverick56, le mercredi 25 avril 2007 à 13:36:40
bonjour
je voudrais depuis une pages php faire une boucle qui chercher une chaine de caractere, qui récupère la ligne et ensuite me rend uniquement les chiffres de cette ligne

ex de ligne :
resultat : 1000

je chercher resulat, et ce me rend 1000 (les chiffre de la ligne).
merci pour l'aide
Configuration: Windows 2000
Firefox 2.0.0.3
Répondre à maverick56  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Bj0, le mercredi 25 avril 2007 à 13:52:17
<? $nomFichier = "mon_dossier/mon_fichier.ext";
if (file_exists($nomFichier)) { // Si le fichier existe
$Fichier = fopen($nomFichier,"r"); //ouverture du fichier
while (!feof($Fichier)) { // tant que l'on est pas a la fin du fichier
//Traitement
}
fclose($Fichier); // fermeture du fichier
} ?>

avec la méthode substr tu peux découpé une chaine de caractere

$variable=substr(chaine de caractere, place du 1er caractere-1, longueur de la chine voulu);


exemple : echo substr('abcdef', 1, 3); // résultat : bcd
Répondre à Bj0

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
maverick56, le mercredi 25 avril 2007 à 13:57:46
oui d'accord je vois comment lire un fichier, faire la boucle.
pour recup le chiffre je ne peux pas utiliser substr etant donnée que la disposition sur la ligne n'est pas tjs la meme ...

un exemple :
Puissance (max) en MWth : 2707
haut | 4.382e+004 | 2.812e+002 |
milieu | 3.725e+007 |

rechercher puissance, heut ou milieu et recup la ligne je voi à peux pret, mais comment récupérer les variable associer qui sont des chiffres, souvent écrit en valeur scientifique ...
Répondre à maverick56

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Bj0, le mercredi 25 avril 2007 à 14:15:55
autrement tu détecte les ':' ou les '|' et tu coupe apres ...
pour les repéré tu utilise la methode strpos

exemple :


$ligne ="resultat : 1000";

$pos = strpos($ligne,":");

//$pos = 9

apres tu peu faire ton substr :p

$valeur=substr($ligne, $pos+1);

//$valeur=1000 normalement :p
Répondre à Bj0

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
maverick56, le mercredi 25 avril 2007 à 14:33:08
merci pour cette soluce je vais regarder de plus pret.
mais à priori ca marche que si on connait la position de la valeur apres | ou : et si on connais sa taille.
or je connais ni l'un ... ni l'autre !
je sais meme pas si c'est en fin de ligne!

il n'y a aucun moyen de faire plus générale ?

voila, sans trop rentrer dans les detail ce que je peu avoir :

val1 : 6.16e+008
val2 : 5560
val3 : 4.80e+008 | 15635
val4 : 2707
val5 : 2335
val6 : 2660

avec les val qui sont des chaine de carac
je ne connais pas la "distance" entre : et la valeur
Répondre à maverick56

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Bj0, le mercredi 25 avril 2007 à 14:46:40
$valeur=substr($ligne, $pos+1);
quant tu fai ca sa prend toute la ligne a partir de la position donc pa besoin de connaitre la taille de la valeur ...
si elle n'est pa sur la meme ligne c plus problématique...
mais si tu ne détecte pa de ":" dans la ligne suivante cela vezut peu etre dire que c la suite de la valeur précédente?


Ensuite pour le probleme de la distance en les ":" et la valeur ...
roh c chiant :p ... tu compte avec une fonction récursive le nombre d'espace apres tes ":";

et tu doit avoir une fonction pour connaitre le nombre de caractere dans une chaine genre : strlen

exemple :
$str = 'abcdef';
$length= strlen($str); //$length= 6


c un peu du bidouillage ... mais bon :p ca marchera c'est lessentiel :D




val3 : 4.80e+008 | 15635
et si tu veu le 15635 de cette ligne...
tu fai la meme chose mais en cherchant les "|"

si tu a une ligne du genre :


valeur : A| B |C|D|E|F

et ke tu veu la valeur E la c tré tré chiant :p mais encore possible avec du bidouillage made by Bj0 :D
Répondre à Bj0

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
maverick56, le mercredi 25 avril 2007 à 15:32:30
comment je peux faire pour chercher si une ligne contient une chaine de caractere ?

j'ai essayé if ($ligne[$i]) == %$chaine% ) mais ca ne marche pas ...
Répondre à maverick56

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Bj0, le mercredi 25 avril 2007 à 15:38:42
essaye ca :D

if (ereg($ligne[$i],$chaine){

}
Répondre à Bj0

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
maverick56, le mercredi 25 avril 2007 à 15:49:25
je vois pas trop ce que fait cette fonction ereg ...

j'ai rentré ca :

for($i=0;$i<200;$i++)
if (ereg($ligne[$i]),'Fluence en dpa') {echo "$ligne[$i]";break;}

et j'ai ce message d'erreur dans mon navigateur :

Parse error: parse error, unexpected ',' in D:\SOFTS\EasyPHP\www\tafia\nico\nico2.php on line 39 ...

comme je comprend pas la fonction je sais pas d'ou peux venir l'erreur!
Répondre à maverick56

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Bj0, le mercredi 25 avril 2007 à 15:59:25
tu a mal placé tes parenthese :D

for($i=0;$i<200;$i++)
if (ereg($ligne[$i],'Fluence en dpa')) {
echo "$ligne[$i]";
break;
}


la fonction ereg recherche si la chaine1 contient la chaine2

ereg ("abcdef","bde") renvoi true

ereg ("abcdef","bdg") renvoi false
Répondre à Bj0

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
maverick56, le mercredi 25 avril 2007 à 16:16:01
bon je vais abuser encore en peu mais ca me renvoie une erreur :

Warning: ereg() [function.ereg]: REG_BADRPT in D:\SOFTS\EasyPHP\www\tafia\nico\nico2.php on line 39

j'ai ca dans mon code :

for($i=1;$i<50;$i++)
if (ereg("$ligne[$i]",'palier')==true) {
echo "$ligne[$i]";
break;}

encore merci pour ton aide Bj0 !
Répondre à maverick56

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Bj0, le mercredi 25 avril 2007 à 16:19:58
essaye comme ca

for($i=1;$i<50;$i++)
if (ereg($ligne[$i],'palier')) {
echo "$ligne[$i]";
break;}

si ca ne marche pas je test chez moi ce soir et je te redit ca
Répondre à Bj0

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
maverick56, le jeudi 26 avril 2007 à 08:30:26
bon je viens de test, tjs la meme chose ...
pourtant la boucle boucle bien !

for($i=1;$i<50;$i++)
{ if (ereg($ligne[$i],'palier')) {
echo "$ligne[$i]";
break;} }
echo"i : $i";

me donne :
Warning: ereg() [function.ereg]: REG_BADRPT in D:\SOFTS\EasyPHP\www\tafia\nico\nico2.php on line 39
i : 50

alors que dans les 50 premiere ligne de mon fichier j'ai la ligne :
palier | CP0

je devrais donc verifier le if, afficher la ligne, et sortir du for ...

j'ai tester avec if (ereg('le palier vaut','palier')) et la condition n'est pas verifiée, rien ne s'affiche, pourtant ca devrais non ?
Répondre à maverick56

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
maverick56, le jeudi 26 avril 2007 à 08:53:11
je crois que j'ai trouver prk ca marche pas !

les variable dans le ereg sont inversés! c'est d'abord le mot qu'on recherche et ensuite la chaine entière ...

ceci :
for($i=1;$i<50;$i++)
{ if (ereg('palier',$ligne[$i])) {
echo "$ligne[$i]";
break;} }
echo"i : $i";

me renvoie cela :
palier | CP0 i : 10
donc a priori ca marche !
Répondre à maverick56

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Bj0, le jeudi 26 avril 2007 à 08:58:24
ok merci pour ta précision
Répondre à Bj0

15


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
maverick56, le jeudi 26 avril 2007 à 09:29:29
j'ai un peu de mal à parcourir mon tableau du debut à la fin ...
pour le parcourir je fais :

while ($ligne[$i])
{
//recup ligne de duree sous flux en jours
if (ereg('Duree sous flux en jours',$ligne[$i])) //si la premiere chaine est dans la seconde ...
{
$pos = strpos($ligne[$i],":");
$tmp_ss_flux=substr($ligne[$i], $pos+1);
echo "nico1 : $pos <br>";
echo "nico2 : $tmp_ss_flux <br>";
break; //on sort du while
}
else {$i=$i+1;}
}

ca marche nickel si le ereg trouve la ligne, par contre si il la trouve pas la boucle s'arret sur une erreur :

Notice: Undefined offset: 189 in D:\SOFTS\EasyPHP\www\tafia\nico\nico2.php on line 42

il s'arrete dès qu'il ne trouve plus de ligne et renvoie une erreur koi, comment je peux eviter ca ?
Répondre à maverick56

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Bj0, le jeudi 26 avril 2007 à 11:10:16
la place de :
else {$i=$i+1;}
}

essaye :

else{
next;
}
Répondre à Bj0

17


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
maverick56, le jeudi 26 avril 2007 à 11:38:27
en fait j'ai fait comme ca : (remplacer le while)

$lenght = count($ligne); //donne taille du tableau

//parcours le tableau de ligne du fichier resultat
for($i=0;$i<$lenght-1;$i++)
{
...
}

merci
je t'embete plus Bj0 !
merci pour ton aide
Répondre à maverick56

18


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Bj0, le jeudi 26 avril 2007 à 13:27:51
tu ne membete pas tkt :p
Répondre à Bj0

19


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
marie42, le mardi 4 septembre 2007 à 21:28:42
bonsoir
pouveQuand les lettres se mélangent aux chiffres, il est temps de changer de base !!!z
10 -> 16
ABCDEF -> ?
pouvez vous m aider
je vous remercie
Répondre à marie42
Logiciels pertinents trouvés dans les téléchargements
Télécharger PHP Edit 0.6PHP Edit - PHPEdit est un environnement de développement intégré (IDE) sous Windows pour le langage PHP. Il offre un grand nombre de...Catégorie: PHP
Licence: Freeware/gratuit
Télécharger PC Inspector File Recovery 4.0PC Inspector File Recovery - Tout comme SoftPerfect File Recovery ou HandyRecovery , ce logiciel est capable de récupérer des fichiers effacés, mais...Catégorie: Sauvegarde
Licence: Freeware/gratuit
Télécharger SoftPerfect File Recovery 1.2SoftPerfect File Recovery - SoftPerfect File Recovery (seulement 253 ko) permet de récupérer des fichiers effacés par inadvertance, même après vidage de...Catégorie: Sauvegarde
Licence: Freeware/gratuit
Télécharger IsoBuster 2.4IsoBuster - IsoBuster est un outil de récupération de CD, DVD, HD-DVD et BD prenant en charge tous les formats et tous leurs système de...Catégorie: Gravure
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « [PHP] boucle pr lire txt & recup les chiffres »