Récupérer données fichier texte pour futures stats

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

30 oct. 2005, 16:10

C'est laquelle la ligne 63 ? parceque là comme ça je vois pas d'où peut venir l'erreur

Tu as raison, fais avec le code que tu comprends et fais tout suel, tu changeras des trucs après si tu veux

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

30 oct. 2005, 16:28

J'ai essayé ton système avec les array, mais j'ai pas tout compris, je n'arrive pas à affecter une variable à chaque catégories :?
Ma méthode construit un tableau a 2 dimsensions
Il faut accéder aux éléments de la 1ere ligne coupé par les espaces comme suite:
//le compteur de ligne commence a 2 puisque les 2 premières lignes ne correpondent pas aux résultats des matchs
$match[2][0] // ville 1
$match[2][1] // score 1
$match[2][3] // score 2
$match[2][4] // ville 2
Mais laisse cette méthode de coté puisque tu peut modifier les fichier et y ajouter des caractères de séparation.

Donc pour ton code tu fait un explode sur " | " hors dans les 2 1ere lignes il n'y a pas ce caractère et tu veut affecter quand meme au tableau:
list($equipe1, $score, $equipe2) = explode("|", $ligne);
c'est ok si le caractère s'y trouve mais provoque ces erreurs sinon.

Ajoute ce test avant l'ajout a la liste (ligne de code précédente) et qui englobe aussi l'affichage:
if(substr_count($ligne, '|') >0 )
substr_count() compte le nombre d'occurences de ' | " si ce nombre est supperieur a 0 (donc on se trouve sur une ligne de résultats) alors on ajoute a la liste :wink: [/code]

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 172 Messages

31 oct. 2005, 11:19

Merci Truc,

J'ai fait ceci :

Code : Tout sélectionner

if(substr_count($ligne, '|') > 0 ) // si le caractère | est présent dans la ligne { list($equipe1, $score, $equipe2) = explode("|", $ligne); // défni chaque variable séparé par le symbole | echo " <tr> <td>$equipe1</td> <td>$score</td> <td>$equipe2</td> </tr>"; } elseif (!empty($ligne)) // si la ligne n'est pas vide { echo "<tr><th colspan=\"3\">$ligne</th></tr>"; // inscrit la ligne } else { $ligne = ""; } }
Cela ne fonctionne pas, les lignes vides ne sont pas considérées vides, comment je dois lui dire ?
Un retour à la ligne est-il considéré comme un caractères ?
Si c'est pas possible, je vais m'arranger pour les supprimer.

Ensuite, j'ai essayé de mettre deux journées, donc en mettant tout le code dans une autre boucle infinie, j'ai fait planté mon navigateur à chaque fois :mrgreen:

Ensuite pour commencer à faire un peu de calcul, il va falloir que je divise la variable $score en deux autres variables afin de récupérer chaque chiffre, j'avais pensé à faire la même chose que précédemment en utilisant explode("-"),puisque chaque chiffre est séparé par ce caractère, est-ce une bonne solution ?

Merci de vos précieux conseils.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

31 oct. 2005, 15:45

Cela ne fonctionne pas, les lignes vides ne sont pas considérées vides, comment je dois lui dire ?
Un retour à la ligne est-il considéré comme un caractères ?
oui un retour a la ligne correspond a ceci => "\r\n". Tu dois donc remplacer ton test avec empty() par
elseif ($ligne != "\r\n")
Ensuite, j'ai essayé de mettre deux journées, donc en mettant tout le code dans une autre boucle infinie, j'ai fait planté mon navigateur à chaque fois :mrgreen:
ah ben oui, pas besoin de tester pour savoir que ça va planter en boucle infinie, ton fichier ne l'est pas donc pourquoi faire une boucle qui est infinie :wink:.
Il faut englober ta boucle while (avec le compteur)par une autre qui se termine en fin de fichier
while (!feof($statfoot))
{
..
   while ($compteur < 15
   {
       ...
   }
}
Tu est parti sur cette voie donc tu as 2 boucles, mais en mettant en condition la lecture de ligne tu aurai pu te contenter d'une boucle:
while ($ligne = fgets($statfoot))
a toi de voir ce que tu comprends le mieux.
il va falloir que je divise la variable $score en deux autres variables(...) j'avais pensé à faire la même chose que précédemment en utilisant explode("-"),

c'est exactement ça :wink: [/quote]

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 172 Messages

31 oct. 2005, 18:41

Yes !!!
Encore merci Truc !!

J'ai opté pour ta deuxième solution, en mettant la boucle sur les lecture de lignes, tout marche à merveille !!!

J'ai encore des questions, après je vous embêterais plus :mrgreen:

1- Maintenant que mes tableaux fonctionnent, que je sais comment faire pour séparer une chaine de caractères, j'aurais besoin d'une piste afin de pouvoir affecter une variable à une autre, dans mon code cela voudrait dire que la variable $equipe1 recevra toujours comme variable $score1 qui représentera donc le 1er chiffre du score.

2- Comment faire une addition de chaque ligne pour la variable $score1 et $score2, qui représenteront le 1er et 2ème chiffre du score, faire une opération sur la même ligne, ça je saurais je pense le faire, mais sur plusieurs lignes ?
faudrait-il que je créé encore une nouvelle variable ?

Voici le code pour l'instant que j'obtiens grâce à vous :
$fichierFootD2 = 'resultatsD2.txt';  
echo "<table id=\"resultats\">";
  if (file_exists($fichierFootD2)) // si le fichier est accessible
  {
    $statfoot = fopen("resultatsD2.txt", "r");  // ouverture du fichier en lecture
    while ($ligne = fgets($statfoot))  // tant qu'il y a des lignes à lire dans le fichier
    {
        if(substr_count($ligne, '|') > 0 ) // si le caractère | est présent dans la ligne
          {
            list($equipe1, $score, $equipe2) = explode("|", $ligne);  // défni chaque variable séparé par le symbole |
            echo "
            <tr>
              <td>$equipe1</td>
              <td>$score</td>
              <td>$equipe2</td>
            </tr>";
          }
        elseif ($ligne != "\r\n") // si la ligne ne contient pas de retour à la ligne
          {
            echo "<tr><th colspan=\"3\">$ligne</th></tr>";    // inscrit la ligne      
          }
        else  // sinon $ligne ne vaut rien
          {
            $ligne = "";
          }
    }
    fclose($statfoot);  // fermeture du fichier
  }
  else
  {                // sinon retourne cette erreur
    echo "<tr><td>Erreur 10 (accès au fichier)</td></tr>";
  }
echo "</table>";
Après, j'essaierais de me débrouiller tout seul ^^

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

01 nov. 2005, 03:22

1- Maintenant que mes tableaux fonctionnent, que je sais comment faire pour séparer une chaine de caractères, j'aurais besoin d'une piste afin de pouvoir affecter une variable à une autre, dans mon code cela voudrait dire que la variable $equipe1 recevra toujours comme variable $score1 qui représentera donc le 1er chiffre du score.
Euh .. j'ai pas trop compris la :-k
affecter le contenu d'un variable a une autre:
$equipe1=$score1 ou $equipe1.=$score1 :shock:
tu peut donner un exemple ou préciser ?
2- Comment faire une addition de chaque ligne pour la variable $score1 et $score2, qui représenteront le 1er et 2ème chiffre du score, faire une opération sur la même ligne, ça je saurais je pense le faire, mais sur plusieurs lignes ?
faudrait-il que je créé encore une nouvelle variable ?

Encore une fois je vois pas ou tu veut en venir... ajouter des scores :shock:
Mais tu as une variable ($score) qui contient les 2 scores séparés par "-", tu peut donc faire un explode dessus comme tu l'avais dis dans le message d'avant.
list($score1, $score2) = explode("-", $score);
$score1+=$score2; // revient a faire $score1=$score1+$score2;
//tu aura le total dans $score1
non, c'est pas ce que tu voudrai ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Invité
Invité n'ayant pas de compte PHPfrance

01 nov. 2005, 13:17

Euh .. j'ai pas trop compris la :-k
affecter le contenu d'un variable a une autre:
$equipe1=$score1 ou $equipe1.=$score1 :shock:
tu peut donner un exemple ou préciser ?
En fait c'est pas vraiment une affectation, mais une correspondance, $equipe1 sera vérifier pour déterminer si c'est telle ou telle équipe (ça je saurais le faire), et ensuite après identification, récupérer donc la valeur de $score1 ou $score2 selon si elle dans la variable $equipe1 ou $equipe2.
Encore une fois je vois pas ou tu veut en venir... ajouter des scores :shock:
Mais tu as une variable ($score) qui contient les 2 scores séparés par "-", tu peut donc faire un explode dessus comme tu l'avais dis dans le message d'avant.
list($score1, $score2) = explode("-", $score);
$score1+=$score2; // revient a faire $score1=$score1+$score2;
//tu aura le total dans $score1
non, c'est pas ce que tu voudrai ?
Oui, pour ça j'avais compris, mais ce que je voudrais, c'est récupérer la valeur de $score1 et $score2 de chaque lignes, et qu'une autre variable en récupère la valeur et ainsi en fasses l'addition, un tableau normal quoi, avec la somme des $score1 et $score2 pour avoir le nombre de but de chaque journée.

J'ai un nouveau souci, c'est que mon code précédemment mis fonctionne bien en local (easyphp), mais je viens de mettre en ligne(free.fr), et les lignes vides sont affichées dans des <th>, comment faire pour obtenir le même résultat qu'en local, et ainsi que les lignes vides ne soient pas affichées ?
Voici ce que j'obtiens.

Merci.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

01 nov. 2005, 14:32

et ensuite après identification, récupérer donc la valeur de $score1 ou $score2 selon si elle dans la variable $equipe1 ou $equipe2.
Je ne voit pas le probleme dans tous les cas $score1 contiendra le scrore de l'equipe 1 ($equipe1) respectivement $score2 et equipe 2.
(...) et ainsi en fasses l'addition, un tableau normal quoi, avec la somme des $score1 et $score2 pour avoir le nombre de but de chaque journée.
La c'est plus clair :wink:
Donc il faut que tu initialise une variable a 0 avant la boucle qui prend sur chaque ligne le total de but (avec le code montré précédemment, par exemple). Mais l'addition ne doit se faire que sur les 10 lignes de scores ensuite affiché et remis a 0 pour les journées suivantes.
J'ai un nouveau souci, (...) et les lignes vides sont affichées dans des <th>, comment faire pour obtenir le même résultat qu'en local, et ainsi que les lignes vides ne soient pas affichées ?
tu as certainement un ou des espaces sur ces lignes, pour que le teste fonctionne correctement il ne faut y avoir qu'un saut de ligne. Mais tu peut faire autrement avec trim() et ainsi remplacer:
elseif ($ligne != "\r\n")
par
elseif (trim($ligne) != "")

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 172 Messages

01 nov. 2005, 21:52

Je ne voit pas le probleme dans tous les cas $score1 contiendra le scrore de l'equipe 1 ($equipe1) respectivement $score2 et equipe 2.
Oui en fait j'étais parti sur quelquechose de compliqué, en faisant comme tu dis, c'est effectivement plus simple :p
La c'est plus clair :wink:
Donc il faut que tu initialise une variable a 0 avant la boucle qui prend sur chaque ligne le total de but (avec le code montré précédemment, par exemple). Mais l'addition ne doit se faire que sur les 10 lignes de scores ensuite affiché et remis a 0 pour les journées suivantes.
J'ai essayé, mais je n'arrive pas à réinitialiser la variable à 0, et l'inscrire dans mon tableau à chaque fois qu'elle a atteint 10, qu'est ce que je fais de travers ? :?
<?php

$fichierFootD2 = 'resultatsD2.txt';  
echo "<table id="resultats">";
  if (file_exists($fichierFootD2)) // si le fichier est accessible
  {
    $statfoot = fopen("resultatsD2.txt", "r");  // ouverture du fichier en lecture
    $totalScore1 = 0;
    while ($ligne = fgets($statfoot))  // tant qu'il y a des lignes à lire dans le fichier
    {
        if(substr_count($ligne, '|') > 0 ) // si le caractère | est présent dans la ligne
          {
            list($equipe1, $score, $equipe2) = explode("|", $ligne);  // défni chaque variable séparé par le symbole |
            echo "
            <tr>
              <td >$equipe1</td>
              <td>$score</td>
              <td>$equipe2</td>
            </tr>";
            list($score1, $score2) = explode("-", $score);  // separe les chiffres de $score en deux variables
            $compteur = 1;
            for ($compteur; $compteur <= 10; $compteur++)  // compteur pour chaque journée
            {
              $totalScore1 = $totalScore1 + $score1;    //  additionne le nombre de $score1 de chaque ligne
              if ($compteur = 10)
              {
                echo "<tr><td colspan="3">Total buts à domicile : $totalScore1</td></tr>";
                $totalScore = 0;
              }
            }
          }
        elseif (trim($ligne)!= "") // si la ligne ne contient pas de retour à la ligne
          {
            echo "<tr><th colspan="3">$ligne</th></tr>";    // inscrit la ligne      
          }
        else  // sinon $ligne ne vaut rien
          {
            $ligne = "";
          }
    }
    fclose($statfoot);  // fermeture du fichier
  }
  else
  {                // sinon retourne cette erreur
    echo "<tr><td>Erreur 10 (accès au fichier)</td></tr>";
  }
echo "</table>";

?>
tu as certainement un ou des espaces sur ces lignes, pour que le teste fonctionne correctement il ne faut y avoir qu'un saut de ligne. Mais tu peut faire autrement avec trim() et ainsi remplacer:
PHP:
elseif ($ligne != "\r\n")
par
PHP:
elseif (trim($ligne) != "")
Merci, ça fonctionne impec :D
Pourtant il n'y a pas d'espace dans mes lignes.

Ah oui, j'aurais une autre p'tite question, comment rechercher efficacement une fonction dont j'aurais besoin sur php.net, car je suis un peu perdu dans la jungle, il y en a tellement :D

Merci.

Mammouth du PHP | 19672 Messages

01 nov. 2005, 21:57

Tu as l'index des fonction et sinon, un truc pratique à mettre sur ton serveur qui te liste les fonctions disponibles selon ta configuration
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 172 Messages

01 nov. 2005, 22:34

Pas mal le truc pratique !!!

:merci:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

01 nov. 2005, 23:42

La boucle for() est de trop, la boucle while() fait exactement ce qu'il faut :wink:

avant la boucle while tu dois initialiser 2 variables
. une pour compter le nombre de buts ($totalScore)
. une qui va servir a remettre la variable $totalScore a 0 ($cpt)

ensuite dans la boucle tu lis ligne par ligne donc pas besoin de for(), a chaque passage (et dans le cas ou la ligne contient un "|") tu sépare bien le score en 2 puis tu affecte le score1 a la variable $totalScore et tu incrémente le compteur de 1.

Ensuite pour remettre le compteur a 0 tu inclus une simple condition qui teste la valeur du compteur ($cpt) s'il vaut 10 alors $totalScore=0 et affichage du total des scores.

Voila pas bien difficile

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 172 Messages

02 nov. 2005, 10:39

Oups en fait, j'avais déjà essayé en testant l'égalité, mais cela ne fonctionnait pas, tout comme avec la boucle for aussi, car j'avais omis qu'il fallait 2 signes = afin de vérifier la valeur. :sleeping:

Voilà, ça fonctionne comme je veux, je suis sûr qu'il y a moyen d'alléger mon code, mais le principal est que j'en comprenne le fonctionnement.

Merci beaucoup Truc et ouckileou de m'avoir aider à réaliser mon projet, sans vous je crois que je n'aurais pas réussi à faire tout ceci, j'espère devenir aussi balèze que vous en php, il y a du boulot je sais :D

:merci:

Ps: je ne manquerais pas de repasser par ici pour mes futurs problèmes :mrgreen:

Eléphant du PHP | 172 Messages

05 nov. 2005, 21:43

Salut !!!!

Me revoilou !!!
Ca n'a pas traîné :D

J'ai un nouveau problème.
Je souhaites récupérer la plus grande valeur d'une variable d'une colonne de mon tableau (par exemple le plus grand nbre de but marqué par une équipe dans un match) j'ai trouvé la fonction max(), mais ça ne fonctionne pas, il m'indique une erreur :

Warning: Wrong parameter count for max() in ...................
j'ai l'impression qu'il faut utiliser les array, est-ce le cas ?

Comment je pourrais faire, y'a t-il une autre fonction pour faire ceci ?

Merci :wink:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 nov. 2005, 22:24

Si tu commences à vouloir faire tout un tas d'opérations sur tes infos, il faudrait peut-être étudier la mise en place d'une base de données... parceque avec les fichiers tu risques de galérer pas mal :)