Manipulation de fichier

Eléphanteau du PHP | 35 Messages

25 mars 2006, 22:57

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 :)

ViPHP
ViPHP | 1380 Messages

26 mars 2006, 10:08

// 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.
ripat

Eléphanteau du PHP | 35 Messages

26 mars 2006, 18:27

merci j'essaie qd g le temps et je redis quoi

Eléphanteau du PHP | 35 Messages

26 mars 2006, 20:09

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?

ViPHP
ViPHP | 1380 Messages

26 mars 2006, 20:32

... 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);
}
ripat

Eléphanteau du PHP | 35 Messages

26 mars 2006, 20:41

merci j'avais trouvé une description de la fonction for, mais mal documenté :)

Eléphanteau du PHP | 35 Messages

26 mars 2006, 22:12

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.

ViPHP
ViPHP | 1380 Messages

27 mars 2006, 08:42

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().
ripat

Eléphanteau du PHP | 35 Messages

27 mars 2006, 11:37

merci c'est parfait :)

Eléphanteau du PHP | 35 Messages

27 mars 2006, 19:46

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 :)

Eléphanteau du PHP | 35 Messages

28 mars 2006, 11:49

up

Eléphanteau du PHP | 35 Messages

28 mars 2006, 14:54

up

(désolé j'ai pas trouvé la solution)

ViPHP
ViPHP | 1380 Messages

28 mars 2006, 15:52

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.
ripat

Invité
Invité n'ayant pas de compte PHPfrance

28 mars 2006, 16:24

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

Eléphanteau du PHP | 35 Messages

28 mars 2006, 16:35

oops ma session avait expiré,

voila j'ai up ca ici

http://dtom.hd.free.fr/fichiers/temp/club.html
Modifié en dernier par dtom le 28 mars 2006, 17:12, modifié 1 fois.