|
|
|
|
ladj59, le jeudi 3 avril 2008 à 10:58:10Configuration: Linux Fedora Firefox 1.5.0.7
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
|
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 |
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 |
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
|
eventuellement aussi si tu ad un ou plusieurs bon tuto a me proposer ca pourrait m'interesser... |
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 |
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; ?> |
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
|
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...
|
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
|
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 - loloProverbes bretons : Si les mouettes ont pied, il est temps de virer Il vaut mieux être saoul que con, ça dure moins longtemps |
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?? |
bonjour,
quelqu'un aurait une idée??? |
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 |
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 |
quelqu'un sait?? |
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 |