Page 1 sur 5

Utilisation de la fonction max

Posté : 21 juin 2005, 09:49
par speddy1406
J'ai plusieurs fichiers textes dans lesquels sont enregistrés des valeurs et je souhaiterai obtenir la valeur maximum sur plusieurs fichiers.
Je ne sais pas trop comment écrire ce programme si quelqu'un avait une solution à mon problème et si possible un petit programme à me conseiller çà serait gentil.

Merci

Posté : 21 juin 2005, 09:58
par zeus
Il faut que tu nous donnes plus de détails :
- comment sont formatés tes fichiers
- de quelle forme sont ces valeurs
- sous quelle forme tu veux la récupérer

Posté : 21 juin 2005, 12:05
par speddy1406
Mes fichiers sont des fichiers .txt ils sont constitués de trois colonnes, les deux premières sont les coordonnées en X et en Y et les troisième colonne correspond à des valeurs numériques décimales.

Donc à partir de ces fichiers texte, je souhaite créer un fichier texte dans lequel sera répertorié le max de mes valeurs.

En espérant que ces indications permettent de m'aider.
Merci

Posté : 21 juin 2005, 12:25
par zeus
Avec la fonction file() tu peut récupérer le contenu de ton fichier dans un tableau

Ensuite pour chaque case de ton tableau, tu fait un explode, tu récupère la dernière colonne et tu compare avec la valeur max (préalablement initialisé à 0) et si elle est plus grande, tu la remplace.

A la fin du parcours de tout tes fichiers, la variable max va contenir le max de tous tes fichiers

Posté : 21 juin 2005, 13:15
par speddy1406
les fichiers dans lesquels je dois extraitre mes valeurs se nomment ainsi :

moy_22h_auj_O3
moy_23_auj_O3

etc...
Donc je ne vois pas comment utiliser la fonction file pour tous les ouvrir
et ensuite comment extraire que la dernière colonne
Est-ce que tu aurais un exemple ?
Merci

Posté : 21 juin 2005, 13:23
par zeus
Comment sont séparé tes champs dans tes fichiers ?

Donnes moi une ligne que je puisse voir

Posté : 21 juin 2005, 13:27
par speddy1406
voici une ligne de mon fichier :



-0.65 45.9 103.075

Première colonne les X, seconde les Y et troisième les valeurs sur lesquelles je souhaite récupérer les max.

Merci

Posté : 21 juin 2005, 13:35
par zeus
Essaye ça et tiens moi au courant
//Tout met tout les noms de tes fichiers ici
$a_fichier = array(
"nom_fichier1.txt",
"nom_fichier2.txt")

//Cette variable va mémoriser le max de tous les fichiers
$max = -1;

//Cette variable contient le chemin d'acces jusqu'au répertoire qui contient les fichiers textes
$chemin = "fichiers"

//Permet de parcourir les noms de fichiers
foreach($a_fichier as $nom) {
    //Met le contenu du fichier désigné par $nom dans fichier. une ligne par case
    $a_file = file($chemin."/".$nom)
    
    //Permet de parcourir chque 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(" ", $ligne);
        
        //On teste si la valeur de la 3eme colonne est supérieure à la valeur stockée
        if ($a_ligne[2] > $max)
            $max = $a_ligne[2];
    }
}

Posté : 21 juin 2005, 13:45
par speddy1406
Je te remercie pour ton aide, je teste et je te tiens au courant

Posté : 21 juin 2005, 14:07
par speddy1406
malheuresement çà ne fonctionne pas il me met une erreur (parse error) sur la ligne
$max=-1;

Une autre petite question, je souhaiterai à la fin de la recherche du max mettre les valeurs max dans un fichier avec les coordonnées correspondantes aux valeurs en clair avoir la même structure que les fichiers dans lesquels je recherche les valeurs max.

Merci

Posté : 21 juin 2005, 15:33
par zeus
J'avais oublié un ; à la fin du tableau

Tu aurais pu chercher un peu :roll:

Sinon je te donne la réponse mais avec la trame que je t'ai donné, tu devrais pouvoir trouver les améliorations.

Je serais évidemment là pour t'aider si tu bloques mais ce n'est pas une solution que je te donnes du code tout fait
//Tout met tout les noms de tes fichiers ici
$a_fichier = array(
"nom_fichier1.txt",
"nom_fichier2.txt");

//Cette variable va mémoriser le max de tous les fichiers
$max = -1;

//Cette variable contient le chemin d'acces jusqu'au répertoire qui contient les fichiers textes
$chemin = "fichiers"

//Permet de parcourir les noms de fichiers
foreach($a_fichier as $nom) {
    //Met le contenu du fichier désigné par $nom dans fichier. une ligne par case
    $a_file = file($chemin."/".$nom)
    
    //Permet de parcourir chque 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(" ", $ligne);
        
        //On teste si la valeur de la 3eme colonne est supérieure à la valeur stockée
        if ($a_ligne[2] > $max) {
            $max = $a_ligne[2];
            $ligne_max = $ligne;    
        }
    }
}

Posté : 21 juin 2005, 15:45
par speddy1406
je te remercie pour ton aide. mais j'ai un peu de mal à trouver des infos.
avec ce que tu m'as donné je devrais m'en sortir.

Posté : 21 juin 2005, 15:54
par zeus
Je te dit pas de travailler en autiste :lol:

Je voulais juste te faire comprendre que pour progresser, il faut chercher par soi même

Je suis évidemment là pour t'aider mais pas pour faire à ta place

En cas de problème, je serais là

Posté : 22 juin 2005, 09:45
par speddy1406
excuses moi mais j'ai encore une petite question par rapport au programme que tu m'as envoyé, j'ai du mal à comprendre le premier foreach.
Par rapport à ce que j'ai trouvé sur la doc PHP j'ai cru comprendre qu'il lisait mes fichiers textes et qu'il mettait les valeurs dans $nom mais ensuite je ne comprend comment on les répucupère afin de récupérer que les max pour chacune de mes coordonnées.
Peux tu éclairer ma lanterne car j'ai vraiment du mal comprendre cette partie du programme et la doc que je trouve me semble peu clair.

Merci

Posté : 22 juin 2005, 09:56
par zeus
foreach($a_fichier as $nom) {
    }
}
En fait, cette focntion récupére le tableau crée par la fonction file() (je part du fait que tu a compris comment elle fonctionne) et parcours toutes les cases de ce tableau en les mettant une à une dans la variable $nom

A chaque itération, foreach prend la case suivante dans le tableau $a_fichier et met la valeur correspondante dans la variable $nom

En espérant avoir pû eclairer ta lanterne