Page 1 sur 2
Manipulation de fichier
Posté : 25 mars 2006, 22:57
par dtom
Bonjour,
désolé de vous déranger avec mes questions,
voici mon fichier
http://dtom.hd.free.fr/nf/club.txt
Les données que je veux séparer se trouvent ligne 48, avec classement.
CLASSEMENT
Code : Tout sélectionner
Rang Pseudo Bons Liquide Total
60 * michel2b * 0 1 002 273 * 1 002 273 *
70 * pharmoboy * 272 878 531 111 * 803 989 *
74 * minolta </profile/homepage.html?accId=13997> * 0 700 626 * 700 626 *
563 * kikou83 * 0 61 475 * 61 475 *
6 184 * motx * 0 4 020 * 4 020 *
Il faudra donc niveau code se baser sur "si ligne = CLASSEMENT", et pas sur le numéro, si le code html change plus rien fonctionnera.
Je voudrais récuperer ( par ordre d'affichage ) :
- le rang
- le pseudo
- les bons
- le liquide
- le total
et ensuite faire une boucle pour enregistrer ces données dans une bdd.
seulement je me demande comment faire tout ca, j'ai encore jamais manipulé de fichier :/
merci d'avance à ceux qui' maideront

Posté : 26 mars 2006, 10:08
par Ripat
// ouverture du fichier
$txt = file_get_contents('http://dtom.hd.free.fr/nf/club.txt');
// extraction du bloc RESULTATS
preg_match('#Total\s+(.*?)\r\n\r\n#s', $txt, $out);
// extractions des lignes
$lignes = explode("\r\n", $out[1]);
// préparation tableau pour injection dans bdd
$aInserer = array();
foreach($lignes as $k => $v){
$aInserer[] = preg_split("#\t#", $v, -1, PREG_SPLIT_NO_EMPTY);
}
// affichage de contrôle
echo '<pre>';
print_r($aInserer);
echo '</pre>';
Après, c'est une simple insertion classique en utilisant une boucle sur $aInserer.
Posté : 26 mars 2006, 18:27
par dtom
merci j'essaie qd g le temps et je redis quoi
Posté : 26 mars 2006, 20:09
par dtom
je te remerci bcp pour ton aide,
seulement comment je fais pour ecrire comme ceci :
- dans une table différente pour chaque pseudo
- retirer les étoiles (mon pb c'est pas la fonction, mais de manipuler les variables dans le tableau)
-
Dois-je travailler dans le array?
Posté : 26 mars 2006, 20:32
par Ripat
... dans une table différente pour chaque pseudo
Là, c'est du domaine du tuto de base dans la manipulation de bdd. Une table par pseudo, t'es sûr??:-k
...retirer les étoiles
Rajoute un str_replace() dans:
foreach($lignes as $k => $v){
$v = str_replace('*', null, $v); // à rajouter
$aInserer[] = preg_split("#\t#", $v, -1, PREG_SPLIT_NO_EMPTY);
}
Posté : 26 mars 2006, 20:41
par dtom
merci j'avais trouvé une description de la fonction for, mais mal documenté

Posté : 26 mars 2006, 22:12
par dtom
j'ai un pb dans mon traitement
je sais pas comment récuperer les lignes des arrays séparément pour pouvoir les insérer dans ma base.
Code : Tout sélectionner
//traitement
foreach ($lignes as $k)
{
$i++;
//echo $lignes[$i];
list($rang, $pseudo, $bons, $liquide, $total) = explode("#\t#", $lignes[$i]);
echo "<br>";
echo "<br>Rang : $rang";
echo "<br>";
}
si je veu une table pour pseudo, c'est pour la lisibilité dans phpmyadmin, je pourrai faire une clé nommé pseudo mais de toute facon je fais une base et 20 table, ca fait pas lourd.
Posté : 27 mars 2006, 08:42
par Ripat
Ton utilisation de foreach() est confuse. La boucle marchera mais ce n'est pas de cette manière qu'on utilise cette structure de contrôle.
Regarde ici:
http://be2.php.net/manual/fr/control-st ... oreach.php
Tu comprendras mieux ce qui suit:
// $k est l'indice d'une ligne du tableau (pas utilisé ici) et $v sa valeur
foreach($lignes as $k => $v){
$v = str_replace('*', null, $v);
list($rang, $pseudo, $bons, $liquide, $total) = explode("\t", $v);
echo "<br>Rang: $rang -- Pseudo: $pseudo -- Bons: $bons -- Liquide: $liquide -- Total: $total<br>";
}
Il ne fallait pas de délimiteurs dans le premier argument d'explode().
Posté : 27 mars 2006, 11:37
par dtom
merci c'est parfait

Posté : 27 mars 2006, 19:46
par dtom
c'est encore moi
j'ai un petit probleme.
quand quelqu'un à un lien sur son pseudo, les données qui suivent vont a la ligne, et l'array disfonctionne.
Code : Tout sélectionner
CLASSEMENT
Rang Pseudo Bons Liquide Total
2 *lthierry* 0 34 828 850 *34 828 850*
3 *xaraud* 0 27 117 986 *27 117 986*
8 *starfighter </profile/homepage.html?accId=21884>* 490 770
7 912 930 *8 403 700*
19 *trickyz </profile/homepage.html?accId=15495>* 552 647 3 393 044
*3 945 691*
28 *westward* 64 2 466 067 *2 466 131*
47 *daze* 34 103 1 227 803 *1 261 906*
49 *jean-no* 0 1 165 013 *1 165 013*
65 *pharmoboy* 292 749 606 015 *898 764*
78 *minolta* 0 611 405 *611 405*
99 *michel2b* 0 462 673 *462 673*
113 *tofio* 0 395 801 *395 801*
129 *tchoute* 0 353 422 *353 422*
143 *dok* 0 324 941 *324 941*
234 *lack* 53 743 118 965 *172 708*
253 *hoocker* 0 155 761 *155 761*
997 *docteurslump </profile/homepage.html?accId=2765>* 0 34 902
*34 902*
1 438 *motx* 0 25 348 *25 348*
3 892 *aliastor </profile/homepage.html?accId=9605>* 0 9 988 *9 988*
4 837 *ziggy* 0 6 532 *6 532*
8 920 *monforty* 0 2 000 *2 000*
merci d'avance

Posté : 28 mars 2006, 11:49
par dtom
up
Posté : 28 mars 2006, 14:54
par dtom
up
(désolé j'ai pas trouvé la solution)
Posté : 28 mars 2006, 15:52
par Ripat
Il faudra travailler plus finement avec les regex.
Il faudrait nous donner l'exemple avec les vrais séparateurs de champs. Dans le lien que tu donnes dans ton premier post, il s'agissait de tab, ici c'est devenu des espaces.
Mets-nous un lien avec le vrai format de fichier.
Posté : 28 mars 2006, 16:24
par Invité
en fait j'enregistre une page html en format txt, tu veux le code html ( je peux pas donner de lien, il faut s'authentifier
Posté : 28 mars 2006, 16:35
par dtom
oops ma session avait expiré,
voila j'ai up ca ici
http://dtom.hd.free.fr/fichiers/temp/club.html