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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Récupérer données fichier texte pour futures stats

par spirou » 08 nov. 2005, 14:17

J'ai regardé tout ça, mais pour l'instant, je vais faire un truc relativement simple, voici ce que j'ai actuellement, (dans l'ordre: la journée, l'équipe qui reçoit, l'équipe qui se déplace, le nbre de buts(equipe 1), le nbre de buts(equipe 2) et le nbre de spectateurs), ça n'a pas été trop difficile :mrgreen:

Est-ce correct ?

Mais je voudrais en même temps faire un classement par meilleurs buteurs ( championnat et par équipe), et je n'arrive pas trop à visualiser comment je pourrais faire ça.

Il faut que je fasse, je pense une seconde table, qui aura comme correspondance avec la 1ère le n° de la journée (jour) et (peut-être ?) l'appartenance du joueur à telle ou telle équipe, mais ensuite, je ne vois pas trop comment faire, sachant que le nombre de buteurs sera non définis (de 0 à X), le nbre de buts marqués par un même joueur peut aussi varier (selon les doublés, triplés), donc certains champs pourront rester vides selon le score de chaque match :?

Auriez-vous une petite idée pour la façon dont je pourrais construire cette deuxième table, ou il faut peut-être en faire qu'une seule réunissant tout les paramètres ?

:merci:

par ouckileou » 06 nov. 2005, 00:45

la modélisation c'est l'organisation des tables en fait, ce que tu va stocker comme données dans chaque

pour cela il y a quelques règles à respecter pour avoir une base de données bien construites et donc fonctionnelle et évolutive

tu peux regarder les cours sur développer.com si tu le sens, ou essayer de faire ça au feeling, les membres du forum pourront te faire des remarques ensuite
Mais l'idéal restant de lire des cours, sur la méthode Merise par exemple, afin de comprendre la démarche. On se pose des questions sur ce que vont stocker comme données, à quoi elles correspondent, comment elles s'organisent, et à partir de là on a des règles qui permettent de construire les tables facilement.
C'est peut-être un peu vague comme ça mais avec un exemple concret tu devrais mieux comprendre.

par spirou » 06 nov. 2005, 00:16

Ok, si cela peut me simplifier la façon de faire mes calculs et en faire des plus complexes, ça, ça m'intéresse :D
Donc à ta place je commencerai à réfléchir sérieusement à la façon de bien modéliser ma base de données. Regarder sur le site du zéro est une bonne idée.
Tu pourras poster ici ta modélisation pour que l'on te donne un avis si tu veux :Wink:
Comme, je ne vois pas encore trop encore à quoi correspond une modélisation, je vais me renseigner, et je vous posterais ce que j'aurais fais, afin d'avoir vos avis.

Merci :wink:

par ouckileou » 05 nov. 2005, 23:29

Maintenir la base ne sera pas compliqué, et à peine plus emmerdant que d'éditer des fichiers textes :lol:

Par contre tu pourras bien plus facilement effectuer des calculs et sortir des stats sur l'ensembles des journées par exemple, chose quasi infaisable avec ton système actuel.

Donc à ta place je commencerai à réfléchir sérieusement à la façon de bien modéliser ma base de données. Regarder sur le site du zéro est une bonne idée.
Tu pourras poster ici ta modélisation pour que l'on te donne un avis si tu veux ;)

Ensuite tu auras tout un tas de tutoriels à disposition pour apprendre les manipulations de base sur une base de données : sur le site du zéro ou sur www.phpdebutant.org , et il restera tjrs ce forum ;)

par spirou » 05 nov. 2005, 22:45

Oui, j'y ai pensé, j'ai d'ailleurs commencé à regarder sur le site du zéro, mais je sais pas pourquoi, cela me semble compliqué, surtout pour maintenir à jour la bdd(à chaque matchs), mais peut-être que je me trompe.

Je vais quand même m'y intéressé de plus près :)

par ouckileou » 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 :)

par spirou » 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:

par spirou » 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:

par Truc » 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

par spirou » 01 nov. 2005, 22:34

Pas mal le truc pratique !!!

:merci:

par Cyrano » 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

par spirou » 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.

par Truc » 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) != "")

par Invité » 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.

par Truc » 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 ?