Page 1 sur 5

Construire un fichier texte

Posté : 06 juil. 2005, 10:36
par speddy1406
Voia je dois concevoir un fichier texte par rapport à deux autres fichiers textes :

Mon premier fichier texte est constitué d'une liste de coordonnées, en voici le fichier :

,57 47,6
1,91 47,9
1,93 47,8
1,97 47,9
0,76 47,4
0,67 47,4
0,65 47,3
0,68 47,4
2,41 47,1
2,41 47,1
2,36 47,1
1,51 48,5
1,47 48,4
1,95 48,4
1,37 48,8
1,70 46,8
1,70 46,8
1,40 47,6
1,33 47,6
2,84 47,5
2,29 46,6
1,21 46,7

Le second fichier est consitué ainsi :

06/07/2005 07:20;06/07/2005 03:00;06/07/2005 07:00;Horaire;APOR Validé sinon Brut
Organisme;Station;Constituant;Unité;Date;Valeur;Etat
LIGAIR;Chambord;Ozone;microg/m3;06/07/2005 03:00;27;A
LIGAIR;Chambord;Ozone;microg/m3;06/07/2005 04:00;15;A
LIGAIR;Chambord;Ozone;microg/m3;06/07/2005 05:00;14;A
LIGAIR;Chambord;Ozone;microg/m3;06/07/2005 06:00;;-
LIGAIR;Chambord;Ozone;microg/m3;06/07/2005 07:00;;-
LIGAIR;Prefecture;Ozone;microg/m3;06/07/2005 03:00;33;A
LIGAIR;Prefecture;Ozone;microg/m3;06/07/2005 04:00;20;A
LIGAIR;Prefecture;Ozone;microg/m3;06/07/2005 05:00;17;A
LIGAIR;Prefecture;Ozone;microg/m3;06/07/2005 06:00;;-
LIGAIR;Prefecture;Ozone;microg/m3;06/07/2005 07:00;;-

Pour chaque heure et à une station précise correspond une valeur.

Le résultat que je souhaite avoir c'est pour chaque heure identifiée ci
dessus avoir un fichier texte avec les coordonées du premier fichier et les valeurs en face.
Merci

Posté : 06 juil. 2005, 10:42
par zeus
Excuse moi mais je vais pousser mon coup de gueule :

On est pas des machines à coder auxquels tu donnes un problème et qui ressortent du code

Tu as un problème, tu en fait l'analyse, tu essaye et tu viens nous voir quand tu as un problème

C'est quoi la question ? Comment tu définis les noms des fichiers textes ? Comment on associs les données du 2ns avec celui du 1er ?

Je suis désolé mais je suis pas devin ... :evil:

Posté : 06 juil. 2005, 10:45
par speddy1406
je pensais faire ceci :
if (file_exists ("coord_station_o3.txt"))
$f=fopen (("coord_station_o3.txt","r");
while (! feof ($f))
{$s=fgets($f,20);
après je ne sais pas trop
}
fclose($f);
fputs ($f,$s);
Mais je ne sais pas comment récuperer que la colonne correspondant à valeur
Si quelqu'un peut m'aider. Merci[/php]

Posté : 06 juil. 2005, 10:50
par speddy1406
excuses moi si mon problème n'est pas clair....

Ce que je souhaite c'est combiné les deux fichiers

Avoir les coordonnées pour la colonnes correspondant aux valeurs

Exemple pour les deux premières lignes pour le fichier 3 heure:

1,57 47,6 27
1,91 47,9 23

en espérant que cela soit plus clair.
Je sais que vous n'êtes pas des machines à faire des codes, j'ai également réfléchi de mon coté, mais je bloque vraiment.

Posté : 06 juil. 2005, 10:50
par zeus
Tu as fait un effort et je t'en remercie beacoup mais par contre, je n'ai toujours pas compris :
- comment est-ce que tu définit les fichiers textes à créer ?
- Qu'est-ce qui doit se retrouver dans ces fichiers textes ?

Posté : 06 juil. 2005, 11:02
par Invité
Qu'est ce tu entends par "définir les fichiers textes à créer" car je ne vois pas ce que tu veux dire.
Concretement dans les fichiers finaux doit apparaitre les coordonées que j'ai mis dans mon premier message et en face la valeur de concentration (valeur de la 6ème colonne) comme l'extrait que j'ai mis dans mon premier message.

Comme tu l'as vu dans mon premier message, le second fichier se constitue avec le nom des stations (il y en a 22, comme le nombre des coordonnés). donc chaque heures et pour chaque station, je souhaite avoir un fichier texte comportant les coodonnées et les valeurs en face.

En espérant que je sois clair

Posté : 06 juil. 2005, 11:05
par speddy1406
Qu'est ce tu entends par "définir les fichiers textes à créer" car je ne vois pas ce que tu veux dire.
Concretement dans les fichiers finaux doit apparaitre les coordonées que j'ai mis dans mon premier message et en face la valeur de concentration (valeur de la 6ème colonne) comme l'extrait que j'ai mis dans mon premier message.

Comme tu l'as vu dans mon premier message, le second fichier se constitue avec le nom des stations (il y en a 22, comme le nombre des coordonnés). donc chaque heures et pour chaque station, je souhaite avoir un fichier texte comportant les coodonnées et les valeurs en face.

En espérant que je sois clair

Posté : 06 juil. 2005, 11:17
par zeus
1 - Dans ton 2nd fichier, je compte 12 lignes, pas 22

2 - Dans ton exemple : 1ere ligne du fichier 1 => 6eme valeur de la ligne 1 du fichier 2

exemple :
1,57 47,6 27 | 1ere ligne du fichier 1 : 1,57 47,6 | 6eme valeur de la ligne 1 du fichier 2 : 27 | OK
1,91 47,9 23 | 1ere ligne du fichier 1 : 1,91 47,9 | 6eme valeur de la ligne 1 du fichier 2 : 15 | :shock:

3 - Quel doit être le nom des fichiers générés ?

Posté : 06 juil. 2005, 11:31
par speddy1406
Tu ne vois que 12 lignes car je n'ai pas le fichier en entier ; le second fichier se constitue ainsi , il y a 5 lignes pour chaque station (chambord, prefecture,...) pour chaque heure . il y a bien 22 stations.

Par rapport à l'exemple que tu mets : la première ligne correspond à la valeur de 3h à Chambord et la seconde ligne correspond à la valeur de 3 h à la préfecture.

Le nom du fichier généré doit être par exemple assimile_3h.txt (pour l'heure de 3h), assimile_4h.txt (pour l'heure de 4h),etc

Posté : 06 juil. 2005, 11:55
par zeus
Exemple pour les deux premières lignes pour le fichier 3 heure:

1,57 47,6 27
1,91 47,9 23
Donc dans ton exemple, tu voulais dire 33 et non pas 23 ?

Si c'est le cas, je comprend ce que tu veux faire :

Reprend cette trame et adapte là à ta sauce, elle devrait t'aider
//Ouverture du fichier 1
$a_fichier1 = file($fichier1);
//Ouverture du fichier 2
$a_fichier2 = file($fichier2);

//Initialisation des variables de mémorisation
    //Derniere station parcouru
$lieu = ""
    //Ligne du fichier 1 correspondant à la station
$index = 0;

//On parcours chaque ligne du fichier 2
foreach($a_fichier2 as $ligne) {
    //Mise en tableau de la ligne
    $a_ligne = explode(";", $ligne);

    //Si on change de station
    if ($a_ligne[1] <> $lieu) {
        //On mémorise la dernière station parcourue
        $lieu = $a_ligne[1];
        //On met à jour la position de la ligne du fichier 1 à lire
        $index++;
    }
    //On récupère la date (5eme champ) et on la découpe
    $a_date = explode(" ", $a_ligne[4]);
    //On récupère l'heure (2nd champ) et on la découpe
    $a_heure = explode(":", $a_ligne[1]);
    //On ne conserve que l'heure
    $heure = $a_heure[0];
    //Ouverture du fichier assimile_heure.txt avec curseur à la fin pour ne pas écraser le contenu
    $fichier = fopen("assimile_".$heure.".txt", "a");
    //Construction de la ligne contenant la ligne du fichier 1 plus le 6eme champs du fichier 2
    $str_a_insere = $a_fichier1[$index]." ".$a_ligne[5];
    //Ecriture de cette ligne dans le fichier texte
    fputs($fichier, $str_a_insere);
    //fermeture du fichier texte
    fclose($fichier);
}

Posté : 06 juil. 2005, 11:58
par speddy1406
oui excuses moi c'était 33. Merci pour ton code je pense que je devrais m'en sortir avec.

Posté : 06 juil. 2005, 13:24
par speddy1406
j'ai complété ton code pour initialiser mes fichiers, donc voici ce que j'ai rajouté :
<?PHP
//Ouverture du fichier 1 
$fichier1=coord_station_O3.txt;
$a_fichier1 = file($fichier1); 
//Ouverture du fichier 2 
$fichier2=O3.txt;
$a_fichier2 = file($fichier2); 

//Initialisation des variables de mémorisation 
    //Derniere station parcouru 
$lieu = "" 
    //Ligne du fichier 1 correspondant à la station 
$index = 0; 

//On parcours chaque ligne du fichier 2 
foreach($a_fichier2 as $ligne) { 
    //Mise en tableau de la ligne 
    $a_ligne = explode(";", $ligne); 

    //Si on change de station 
    if ($a_ligne[1] <> $lieu) { 
        //On mémorise la dernière station parcourue 
        $lieu = $a_ligne[1]; 
        //On met à jour la position de la ligne du fichier 1 à lire 
        $index++; 
    } 
    //On récupère la date (5eme champ) et on la découpe 
    $a_date = explode(" ", $a_ligne[4]); 
    //On récupère l'heure (2nd champ) et on la découpe 
    $a_heure = explode(":", $a_ligne[1]); 
    //On ne conserve que l'heure 
    $heure = $a_heure[0]; 
    //Ouverture du fichier assimile_heure.txt avec curseur à la fin pour ne pas écraser le contenu 
    $fichier = fopen("assimile_".$heure.".txt", "a"); 
    //Construction de la ligne contenant la ligne du fichier 1 plus le 6eme champs du fichier 2 
    $str_a_insere = $a_fichier1[$index]." ".$a_ligne[5]; 
    //Ecriture de cette ligne dans le fichier texte 
    fputs($fichier, $str_a_insere); 
    //fermeture du fichier texte 
    fclose($fichier); 
} 

?>
et il me met une erreur (parse error) sur la ligne

$index = 0;
je ne comprend pourquoi cette et d'ailleurs à quoi sert cette ligne j'ai du mal voir à quoi elle sert ?

Posté : 06 juil. 2005, 13:33
par bzayid
$lieu = ""

il manque un point virgule

Posté : 06 juil. 2005, 13:34
par speddy1406
Merci, j'avais pas vu....

Posté : 06 juil. 2005, 13:53
par zeus
Tu as fait une autre erreur au début :
//Ouverture du fichier 1
$fichier1="coord_station_O3.txt";
$a_fichier1 = file($fichier1);
//Ouverture du fichier 2
$fichier2="O3.txt";
$a_fichier2 = file($fichier2);