Utilisation de la fonction max

Eléphant du PHP | 92 Messages

21 juin 2005, 09:49

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

21 juin 2005, 09:58

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 92 Messages

21 juin 2005, 12:05

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

21 juin 2005, 12:25

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 92 Messages

21 juin 2005, 13:15

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

21 juin 2005, 13:23

Comment sont séparé tes champs dans tes fichiers ?

Donnes moi une ligne que je puisse voir
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 92 Messages

21 juin 2005, 13:27

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

21 juin 2005, 13:35

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];
    }
}
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 92 Messages

21 juin 2005, 13:45

Je te remercie pour ton aide, je teste et je te tiens au courant

Eléphant du PHP | 92 Messages

21 juin 2005, 14:07

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

21 juin 2005, 15:33

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;    
        }
    }
}
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 92 Messages

21 juin 2005, 15:45

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.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

21 juin 2005, 15:54

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à
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 92 Messages

22 juin 2005, 09:45

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

22 juin 2005, 09:56

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer