Utilisation de la fonction max

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 : Utilisation de la fonction max

par speddy1406 » 23 juin 2005, 16:05

Encore merci.
c'est bon j'ai mis la balise résolu.

par zeus » 23 juin 2005, 15:59

D'où l'importance de faire un code claire, aéré et commenté

Tu pense à la balise [RESOLU]

par speddy1406 » 23 juin 2005, 15:57

Merci beaucoup pour ton aide qui m'a été très précieuse.

Tout fonctionne parfaitement et je te rassure j'ai bien compris ton code (il faut dire que les commentaires sont très clair).

donc après deux jours de galère le problème est résolu.
Encore merci

par zeus » 23 juin 2005, 15:30

J'espère que tu comprendra mon code

Si tu prend les explications que je t'ai donné avant et que tu étudie mon code, tu devrais comprendre

Mais je suis là sinon
//Tu mets tout les noms de tes fichiers ici
$a_fichier = array(
    "moy_8h_hier_O3_prev.txt");

//Cette variable va mémoriser le max de tous les fichiers
$a_max = array();

//Cette variable contient le chemin d'acces jusqu'au répertoire qui contient les fichiers textes
$chemin = "C:\Mes docs" ;

//Permet de parcourir les noms de fichiers
foreach($a_fichier as $moy_8h) {

    //Met le contenu du fichier désigné par $moy_8h dans fichier. une ligne par case
    $a_file = file($chemin."/".$moy_8h);

    //Permet de parcourir chaque ligne du tableau
    foreach($a_file as $ligne) {
        //Découpe la ligne selon les espaces et met le résultats dans un tableau
        $a_ligne = explode("\t", $ligne);

        //On construit le couple (X,Y)
        $index = $a_ligne[0]."\t".$a_ligne[1];
        
        //On teste si ce couple est présent dans le tableau
        if (isset($a_max[$index])) {
            //On teste si la valeur de la 3eme colonne est supérieure à la valeur max associé à ce couple
            if ($a_ligne[2] > $a_max[$index]) {
                $a_max[$index] = $a_ligne[2];
            }
        } else {
            $a_max[$index] = $a_ligne[2];
        }
    }
}

//On ouvre ou on créé le fichier
$fp = fopen("REPERTOIRE_DONNEES_SORTIE_O3_max_hier_8h.txt","w");
//On parcours tout le tableau des couples afin de le tranférer dans le fichier
foreach ($a_max as $index => $val) {
    fputs($fp,$index."\t".$val."\n");
}

par speddy1406 » 23 juin 2005, 15:23

donc si je comprend bien pour créer un tableau qui stocker chaque est ce que je écrire cela :
$a_coord=array($aligne[0],$a_ligne[1])

Puis pour parcourir le tableau est ce que je fais :

foreach($a_coord as $moy_8h)

Mais pour tester si la ligne existe dans le fichier et comparer la valeur j'ai du mal à voir comment le faire....

par zeus » 23 juin 2005, 15:12

Dans le code que je t'ai donné, je ne teste que si la valeur de la 3eme colonne est supérieure à toutes les autres

Dans ton code, il faut que tu trouve le maximum par couple (X, Y)

Il faut donc que tu créer un tableau qui va stocker chacun de ces couples

A chaque fois que tu parcours une ligne, tu doit regarder si cette ligne existe déjà dans le tableau
Si c'est le cas tu compare la valeur max la plus grande et tu ne conserve que la plus grande
Sinon tu ajoute ce couple et cette valeur max à ton tableau

A la fin du parcours, ton tableau va contenir une fois chaque couple et la valeur max qui lui est associée

Tu insère ce tableau dans le fichier texte

par speddy1406 » 23 juin 2005, 15:06

j'ai du mal à voir ce que tu me dis donc si tu pouvais m'expliquer un peu plus çà serait gentil

Merci

par zeus » 23 juin 2005, 15:00

Excuse moi je suis parti plus longtemp que prévu

Je pense qu'il faut que tu modifie mon code de la manière suivante :

$max doit devenir un tableau dont l'index est la combinaison des 2 1eres colonnes

pour chaque ligne tu regarde si l'index existe est dans le tableau
si il existe
tu compare le max et tu récupère si supérieur
sinon
tu crée une nouvelle case

et à la fin, tu écrit tout le tableau dans le fichier

Si tu veux plus de précision, hésite pas

par speddy1406 » 23 juin 2005, 10:43

je veux toutes les coordonnées (comme dans le fichier que je t'ai envoyé)et en face les valeurs max.
Donc par exemple si j'ai deux fichiers textes comportant :
2 45.8 117.8 (X, Y, valeur) 1er fichier
2 45.8 120.4 (X,Y, valeur) 2eme fichier

Dans mon fichier final je souhaite voir apparaitre

2 45.8 120.4

Ainsi de suite pour toute les coordonnées.

J'espère que je suis plus clair

par zeus » 23 juin 2005, 10:25

Je n'ai pas compris ce que tu veux dans ton fichier final ?

Tu veux toutes les coordonnées et toutes les valeurs de tous tes fichiers ?

par speddy1406 » 23 juin 2005, 10:18

çà fonctionne mais malgré tout il y a encore un petit problème ; dans le fichier crée il me met seulement les coordonnées et la valeurs max.
Il ne me met pas toutes mes cordonnées et la valeur max pour chacune des coordonnées.

Je souhaite que mon fichier final ait la même structure que le fichier texte que je t'ai envoyé hier.
Je reflechit de mon coté et si tu as une solution aussi.
Merci

par zeus » 23 juin 2005, 09:09

Donc je me suis penché sur le problème et j'ai trouvé l'erreur : je pensais que dans le fichier texte, il y avait un espace entre les valeurs alors qu'il y avait une tabulation

donc quand je découpais ma ligne, toutes les colonnes étaient sélectionnées et il ne trouvait jamais le max donc il ne passait jamais dans le if qui teste le max

il faut que tu remplace cette ligne
$a_ligne = explode(" ", $ligne);
par celle-ci
$a_ligne = explode("\t", $ligne);

par speddy1406 » 22 juin 2005, 16:51

ok pas de problème je t'nevoie çà de suite.
Merci pour ton aide en tout cas

par zeus » 22 juin 2005, 16:39

Tu as lu mon MP ?

En faisant des tests chez moi, je pourrais te dire ce qui ne va pas

par speddy1406 » 22 juin 2005, 16:28

erreur de ma part echo $a_ligne[2] n'affiche rien.