Flux rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

Lire dans un fichier et recuperer du contenu

ladj59, le jeudi 3 avril 2008 à 10:58:10
Bonjour,
j'ai un ficher .txt de la forme suivante:
<au> james
<au>robert
<ti>les atomes
<page> 4

et je voudrais (en php si possible) pouvoir lire ce fichier texte et retranscrire ce qui est lu sous la forme : james-robert,les atomes,4

en gros il faut faire while la ligne commence par <au> ca représente ce qu'il y a avant la 1ere , ...
mais je ne sais pas comment faire ni quelles fonctions utilisées...

est-ce que quelqu'un a une idée?
Configuration: Linux Fedora
Firefox 1.5.0.7
Répondre à ladj59  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sly-bzh, le jeudi 3 avril 2008 à 16:47:44
Bonojur,
tu peux toujours utiliser les expressions régulières. Je te donne un p'tit exemple :
$contenuFichier = file_get_contents("ton_fichier.txt");
$expressionRationnelle = "#<au>([a-zA-Z ]*)\r\n<au>([a-zA-Z ]*)\r\n<ti>([a-zA-Z ]*)\r\n<page>([0-9 ]*)\r\n#";
$resultat = Array();

preg_match_all($expressionRationnelle, $contenuFichier, $resultat, PREG_PATTERN_ORDER);
// On affiche le tableau pour voir si tout se passe bien
echo "<pre>";
print_r($resultat);
echo "</pre>";

echo $resultat[1][0]."-".$resultat[2][0].", ".$resultat[3][0].", ".$resultat[4][0];


Après, je suppose que tu as de nombreuses lignes comme celle là... Sinon tu ne te ferais pas ch... pour rien n'est ce pas.
Donc tu peux créer une boucle très rapidement, regarde la structure du tableau créé pour voir comment la faire Proverbes breton : 
Si les mouettes ont pied, il est temps de virer
Il vaut mieux être saoul que con, ça dure moins longtemps
Répondre à sly-bzh

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ladj59, le jeudi 3 avril 2008 à 19:52:43
j'ai regardé ce code et essayé de le comprendre et aussi de faire une boucle pour tenter d'afficher ce que je veux mais je n'aboutis a rien
pouras tu me montrer un peu plus précisement comment faire stp

merci d'avance
Répondre à ladj59

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sly-bzh, le vendredi 4 avril 2008 à 19:06:16
Bonjour, désolé de répondre plus tard
Je vais essayer de t'expliquer plus précisemment mais je risque de ne pas être très clair. Si tu ne comprend pas tu pourra toujours aller voir sur un site de tuto...
Donc :
$contenuFichier = file_get_contents("ton_fichier.txt");
Tu charges le contenu de ton fichier .txt dans une variable. Ce fichier doit être dans le même dossier que ton script php, sinon tu dois inscrire le chemin depuis le dossier dans lequel se situe ton script php
$expressionRationnelle = "#<au>([a-zA-Z ]*)\r\n<au>([a-zA-Z ]*)\r\n<ti>([a-zA-Z ]*)\r\n<page>([0-9 ]*)\r\n#";
Je suppose que c'est cette partie que tu n'as pas bien comprise. C'est elle l'expression régulière. En gros ça va rechercher dans ton fichier .txt toutes les écritures ayant la structure suivante :
<au> : commence par "<au>"
[a-zA-Z]* : tu as ensuite un certain nombre (*) de lettres minuscules ou majuscules
\r\n : on a ensuite un retour a la ligne
<ti> : ensuite on a une balise "<ti>"
etc...
[0-9]* : tu as un certains nombre de chiffres
les parenthèses permettent de sélectionner certaines parties du texte, dans le cas qui nous intéresse, il s'agit de "james", puis "robert" puis "les atomes" et enfin "4"
$resultat = Array();
On crée une variable $resultat qui est un tableau
preg_match_all($expressionRationnelle, $contenuFichier, $resultat, PREG_PATTERN_ORDER);
On va insérer dans le tableau $resultat les valeurs recueillies par l'expression régulière
echo "<pre>";
print_r($resultat);
echo "</pre>";
On affiche le tableau qui a été créé afin de vérifier que le tout a correctement fonctionné. Bien évidemment, dès que ça marche tu supprimes ces libres qui ne servent que de "débuggage" si bug il y a...
echo $resultat[1][0]."-".$resultat[2][0].", ".$resultat[3][0].", ".$resultat[4][0];
On affiche enfin les valeurs du tableau qui nous intéressent. Si tu veux afficher d'autres valeurs que "james-robert, les atomes, 4" c'est à cet endroit que tu devra insérer ta boucle :
$i=0;
while ($i<nombre_d'entrées_que_tu_souhaites_étudier)
{
echo $resultat[1][$i]."-".$resultat[2][$i].", ".$resultat[3][$i].", ".$resultat[4][$i]."<BR />";
$i++;
}

Et bien évidemment, tout cela ne fonctionnera QUE si la structure de ton texte est rigoureusement la même durant tout ton texte
J'espère avoir été clair, sinon n'hésites pas à demander des précisions
Proverbes breton :
Si les mouettes ont pied, il est temps de virer
Il vaut mieux être saoul que con, ça dure moins longtemps
Répondre à sly-bzh

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ladj59, le mardi 8 avril 2008 à 17:10:22
ok j'ai essayé cela marche bien
en revanche, il y a un probleme qu'il faudrait gérer qui est le suivant :

on ne sait pas à l'avance combien il y a de <au>, <ti>... dans le fichier .txt donc il faudrait que dans le expressionrationnelle cela s'adapte en fonction de ce nombre, de meme pour l'affichage du resultat il faut qu'il s'adapte en fonction du nombre de <au>,<ti>...


merci d'avance
Répondre à ladj59

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sly-bzh, le mardi 8 avril 2008 à 18:37:50
Si je comprend bien, parceque je vais pas non plus bosser pour rien ;-)
Ton fichier .txt peut par exemple être ainsi :

<au> james
<au>robert
<ti>les atomes
<page> 4

<au> moi
<au> monnom
<ti> l'expression de l'aromatase alcaline bovine dans les cellules placentaires droguées à la tertadotoxine
<ti> volume 3
<page> 76

etc...
Et tout ça toujours dans le même ordre : <au> puis <ti> puis <page>?
Proverbes breton :
Si les mouettes ont pied, il est temps de virer
Il vaut mieux être saoul que con, ça dure moins longtemps
Répondre à sly-bzh

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ladj59, le mercredi 9 avril 2008 à 17:24:41
oui toujours dans le meme ordre
d'abord <au> puis <ti> puis <page> mais il peut y avoir plusieurs <au> on ne sait pas combien a l'avance donc ca doit gérer le probléme

merci d'avance

le .txt ne eput pas etre de la forme
<au>
<au>
<ti>
<page>

<au>
...


les <au> sont toujours avant <ti>...
Répondre à ladj59

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ladj59, le mercredi 9 avril 2008 à 17:32:11
eventuellement aussi si tu ad un ou plusieurs bon tuto a me proposer ca pourrait m'interesser...
Répondre à ladj59

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sly-bzh, le mercredi 9 avril 2008 à 17:42:08
Euh ouais on va faire ça parceque là aujourd'hui et demain je serais débordé...
donc le tuto de m@teo du site du zéro sur le php contient une partie sur les expressions régulières il me semble.

Si j'ai le temps j'essayerais de regarder mais là franchement pas le temps, désolé Proverbes bretons :
Si les mouettes ont pied, il est temps de virer
Il vaut mieux être saoul que con, ça dure moins longtemps
Répondre à sly-bzh

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ladj59, le jeudi 10 avril 2008 à 11:12:29
ok je vais essayer de regarder la j'ai essayé un truc mais je comprends pas ca ne marche pas car cela m'affiche meme les lignes qui commencent par <ti> si quelqu'un sait pourquoi

<?php

$forme = "#<au>([a-zA-Z ]*)\r\n#";

if (!$fp = fopen("essai/essai.txt","r")) {
echo "Echec de l'ouverture du fichier";

exit;

}

else {

while(!feof($fp)) {
$Ligne = fgets($fp,255);
if($forme) {
$Fichier .= $Ligne;
}

}
fclose($fp);
}

echo $Fichier;
?>
Répondre à ladj59

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sly-bzh, le jeudi 10 avril 2008 à 13:28:48
Je pense que tu n'as pas bien compris le fonctionnement général :( ... Par contre ton expression régulière est bonne :D (le $forme)
Mais ton if ($forme) ne veut absolument rien dire, tu cherches si $forme... Ce qui est complètement idiot étant donné que tu déclares $forme avant, dans tout les cas $forme existe.
En fait le problème dans le cas précis est que tu n'utilises tout simplement pas à un seul endroit dans ton script les expressions régulières.
Normalement pour ce soir (je considère le soir comme jusqu'à 3-4H du mat') je t'aurais fait un truc potable, pas forcément beau mais ça devrait marcher (faut juste que je trouve le temps de m'y mettre) Proverbes bretons :
Si les mouettes ont pied, il est temps de virer
Il vaut mieux être saoul que con, ça dure moins longtemps
Répondre à sly-bzh

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ladj59, le jeudi 10 avril 2008 à 15:16:57
ok je te remercie
moi je peux pas repondre tout le temps trés vite car je n'ai pas toujours le net en ce moment

merci encore
Répondre à ladj59

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ladj59, le vendredi 11 avril 2008 à 15:12:36
j'ai fait ca ca marche a peu prés mais j'ai un probleme (voir aprés le code)



<?php

if (!$fp = fopen("essai/essai.txt","r")) {
echo "Echec de l'ouverture du fichier";

exit;

}

else {

while(!feof($fp)) {
$Ligne=fgets($fp,4096);
if(ereg("^<au>",$Ligne)){

echo $Ligne;
echo "-";
}
if(ereg("^<ti>",$Ligne)){
echo $Ligne;
echo ";";

}
if(ereg("^<pa>",$Ligne)){
echo $Ligne;
echo ";";
}
if(ereg("^<an>",$Ligne)){
echo "(";
echo $Ligne;
echo ")";
}
}
}
?>


en revanche j'ai besoin de faire une autre
chose , en effet, quand je passe de <au>
à <ti>, le signe entre les deux doit changer.
Or dans ce que j'ai fait,cela met a chaque
fois un signe en trop. Il faudrait que je fasse
un truc du genre while(a la ligne d'après il y
a <au> echo "-") et quand cela change alors on
echo autre chose ou alors je ferai un autre
echo dans le if suivant(if <ti>)..
exemple avec ce code a un moment je me retrouve
avec un ;( alors que je ne veux pas du dernier ;
j'espere etre assez clair..
merci de votre aide...
Répondre à ladj59

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sly-bzh, le samedi 12 avril 2008 à 00:08:57
Excuse moi de ne pas t'avoir répondu hier soir mais fiesta oblige je suis pas rentré chez moi de la soirée XD mais je vois que tu t'es très bien démerdé sans moi
Pour ton problème, j'avoue ne pas comprendre très bien ton problème. Encore une fois un exemple vaut mieux qu'un long discours : tu ne veux pas me mettre ce que tu obtiens et ce que tu voudrais obtenir stp (et là je répondrais vite, je n'ai rien de prévu ce WE) Proverbes bretons :
Si les mouettes ont pied, il est temps de virer
Il vaut mieux être saoul que con, ça dure moins longtemps
Répondre à sly-bzh

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ladj59, le vendredi 11 avril 2008 à 15:13:03
Maintenant j'ai un autre point important.
en gros il faudrait qu'il y un prog qui fasse :
rentrer votre fichier .txt : xxxx.txt

et la il faudrait que le prog prenne le .txt
et fasse la "traduction" comme vu precedemment
Répondre à ladj59

15


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sly-bzh, le samedi 12 avril 2008 à 00:14:58
En gros, si je comprend bien, tu voudrais que ton script lise dans le fichier essai1.txt un texte de la forme <au>... etc
Et qu'il remplace ce fichier essai1.txt par un texte de la forme de ce que tu veux obtenir.

Si c'est bien cela je te conseillerais personnellement de créer un fichier essai2.txt qui stockerai tes valeurs "traduite" et sous la forme que tu souhaites obtenir.
Une fois toute la "traduction" effectué, tu lis ce fichier essai2.txt et tu réécris exactement le contenu de ce fichier dans le essai1.txt que tu auras bien évidemment vidé de son contenu auparavant. J'espère être clair...

Si ça te va, la fonction fwrite sera ton amie, mais je pense que tu la connait déjà...
Bonne continuation Proverbes bretons :
Si les mouettes ont pied, il est temps de virer
Il vaut mieux être saoul que con, ça dure moins longtemps
Répondre à sly-bzh

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ladj59, le lundi 14 avril 2008 à 15:25:29
je vais regarder.
Répondre à ladj59

17


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ladj59, le lundi 14 avril 2008 à 18:04:24
Bonjour, comment faire si je veux récupérer que lolo dans un fichier texte dont la premiére ligne est : AU - lolo
J'arrive à récupérer toute la ligne mais comment faire pour récupérer simplement lolo ?

Si j'ai un fichier texte de la forme suivante :
TI - kaka
AU - lolo
Comment faire pour afficher d'abord la 2e ligne (sans parcourir le fichier par la fin)
Répondre à ladj59

18


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sly-bzh, le lundi 14 avril 2008 à 19:18:30
Pour récupérer lolo (ça fait drôle dit comme ça...) tu peux utiliser la fonction explode() par exemple.
Un exemple :
 $auteur = "AU - lolo";
$tab = explode(" - ",$auteur);
Dans ce cas là : echo $tab[2]; affichera lolo, c'est à dire ce que tu veux.


Sinon pour afficher d'abord la 2ème ligne tu peux par exemple utiliser la fonction strstr() : elle va te retourner la chaine qui commence par la chaine que tu veux
Exemple :
$txt = "TI - kaka \r\n AU - lolo";
print( strstr($txt,"AU")); //Ca devrait t'afficher : AU - lolo
Proverbes bretons :
Si les mouettes ont pied, il est temps de virer
Il vaut mieux être saoul que con, ça dure moins longtemps
Répondre à sly-bzh

19


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ladj59, le jeudi 17 avril 2008 à 11:51:32
ok pour afficher le 3eme terme de la ligne mais comment faire pour afficher le 3éme terme jusqu'au dernier terme de la ligne
je me doute qu'il faut faire un while différent fin de ligne mais je ne connais pas la syntaxe
par contre pour afficher d'abord AU ... il n'y a pas un autre moyen??
Répondre à ladj59

20


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ladj59, le dimanche 20 avril 2008 à 14:17:42
bonjour,

quelqu'un aurait une idée???
Répondre à ladj59

21


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sly-bzh, le dimanche 20 avril 2008 à 21:38:39
Excuse moi je t'avais oublié XD

En fait j'aurais voulu savoir exactement ce que tu voulais dire par "afficher le troisième terme". C'est quoi ton 3ème terme ? Tu ne pourrais pas utiliser simplement strstr() pour ça ?

et pourquoi elle ne te convainc pas ma façon d'afficher ton AU ? Parceque si tu veux que je te trouve un autre moyen de l'afficher faudrait d'abord que tu me dises pourquoi celle-ci ne va pas...

Encore une fois désolé de t'avoir oublié Proverbes bretons :
Si les mouettes ont pied, il est temps de virer
Il vaut mieux être saoul que con, ça dure moins longtemps
Répondre à sly-bzh

22


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ladj59, le dimanche 20 avril 2008 à 22:59:12
ben en fait je ne veux pas afficher que le 3éme terme je veux afficher toute la ligne a parrtir du 3eme terme donc il faudrait un truc qui affiche tant que la ligne n'est pas finie....

pour ta méthode du strstr je sais pas si c'est possible en fait mon .txt commence toujours par :

TI - titre
AU - les auteurs
AU - les auteurs...
et je dois toujours afficher d'abord les auteurs et ensuite le titre sachant qu'a chaque fois il n'y a que un TI - mais qu'il peut y avoir plusieurs AU - mais ce n'est pas toujours le meme nombre donc je dois gerer ca
Répondre à ladj59

23


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ladj59, le lundi 21 avril 2008 à 13:05:03
quelqu'un sait??
Répondre à ladj59

24


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 sly-bzh, le lundi 21 avril 2008 à 14:21:07
dans ce cas là je pense que tu pourrais utiliser la fonction split comme ça :
$contenuFichier = file_get_contents("ton_fichier.txt");
$tab = split( "[-'\r\n']","$contenuFichier");
Dans ton tableau $tab tu va obtenir 0->AU, 1->"nom de l'auteur", etc
Ensuite tu testes : if($tab[n] =="AU"){echo $tab[n+1];} par exemple et tu fais une boucle comme ça...

Et j'avoue que si ça ne te va pas je commence à être à court de solution... Proverbes bretons : 
Si les mouettes ont pied, il est temps de virer
Il vaut mieux être saoul que con, ça dure moins longtemps
Répondre à sly-bzh
Problème pour lire fichier de Open office org (Résolu)Bonjour, j'ai besoin d'envoyer un fichier (traitement de texte) par mail. Mais la personne à qui je dois l'envoyer n'arrive pas à lire (fichier odt) Avez vous des idées ? (à part faire copier coller : s merci www.commentcamarche.net/forum/affich-8545716-probleme-pour-lire-fichier-de-open-office-org
Lire les données d'un fichier .sql.gz (Résolu)Bonjour, Je suis en possession d'un fichier xxx.sql.gz. Comment lire les données contenues dans ce fichier ? Merci. Paul www.commentcamarche.net/forum/affich-3107952-lire-les-donnees-d-un-fichier-sql-gz
Extraire des lignes dans plusieurs fichiers (Résolu)Bonjour, j'ai un dossier contenant plusieurs fichier comme toto20070101, toto20070108 ... et je souhaite pour chacun d'entre eux les lires et recupérer les lignes, à part les 2 1eres (header) pour les stocker dans un autre fichier. Voila mon... www.commentcamarche.net/forum/affich-6731368-extraire-des-lignes-dans-plusieurs-fichiers
[Pratique] Gérer les profils Firefox, Thunderbird, SeamonkeyGérer les profils de Firefox, Thunderbird, Seamonkey 1 - Gestionnaire de profils 1.1 - Windows 1.2 - Linux 2 - Les fichiers récupérables 2.1 - Où les trouver ? 2.2 - Quels fichiers sont intéressants ? 3 - Compléments... www.commentcamarche.net/faq/sujet-3304-pratique-gerer-les-profils-firefox-thunderbird-seamonkey
Comment lire un fichier ligne par ligneComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier... www.commentcamarche.net/faq/sujet-5027-comment-lire-un-fichier-ligne-par-ligne
[Python] Lire et écrire des fichiers CSVLIRE ET ÉCRIRE DES FICHIERS CSV Python www.python.org, dans sa version 2.4 supporte de facto le format CSV (comma-separated values: valeurs séparées par des virgules). La Library Reference est certes très explicative à ce... www.commentcamarche.net/faq/sujet-2382-python-lire-et-ecrire-des-fichiers-csv
Rpm sous Ubuntu (Résolu)bonjour voila je dois travailler sur des rpm je souhaite donc récupérer dans un fichier le contenu de mon rpm rpm -qpl "redhat-release-3AS-13.5.1.i386.rpm">/home/mboulord/test/stok1/fich1 j'obtient l'erreur suivante rpm: To install rpm... www.commentcamarche.net/forum/affich-3086346-rpm-sous-ubuntu
Lire le DD d'un PC sur un portable (Résolu)Bonjour, Quelles sont les solutions pour lire/copier le contenu d'un vieux (OS win98) disque dur, actuellement installé sur une tour, sur un portable en USB ? J'ai bien trouvé cette solution un peu ancienne, mais pas d emise à jour récente,... www.commentcamarche.net/forum/affich-4944534-lire-le-dd-d-un-pc-sur-un-portable
Nettoyage du disque C (Résolu)Bonjour, j ai besoin de votre aide lorsque je fais le nettoyage de mon disque C J AI XP 2000 PACK2 lorsque je lance le nettoyage avant une défragmentation, pour le nettoyage une fenetre s ouvre lorsque le nettoyage est terminé je peux lire fichiers... www.commentcamarche.net/forum/affich-4049027-nettoyage-du-disque-c
Télécharger PowerPointImageExtractorPowerpointImageExtractor est un logiciel gratuit qui permet d'extraire les images et les fichiers wave contenus dans les présentations et les diapor