Construire un fichier texte

Eléphant du PHP | 92 Messages

06 juil. 2005, 14:03

j'ai déjà rajouté les " " autour de mes noms de fichiers.
çà fonctionne, il me crée des fichiers mais il me met quand des erreurs :

Warning: fopen(assimile_06/07/2005 03.txt): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\assimile\carte_assimile.php on line 34

Notice: Undefined offset: 5 in c:\program files\easyphp1-8\www\assimile\carte_assimile.php on line 36

Warning: fputs(): supplied argument is not a valid stream resource in c:\program files\easyphp1-8\www\assimile\carte_assimile.php on line 38

Warning: fclose(): supplied argument is not a valid stream resource in c:\program files\easyphp1-8\www\assimile\carte_assimile.php on line 40

De plus les fichiers qu'il me crée sont bizarre, d'une part leur nom assimile_nom station et d'autre part voici leur contenu :

1,97 47,9
271,97 47,9
151,97 47,9
141,97 47,9
1,97 47,9
Voici le fichier concernant Chambord
Je ne comprend pourquoi il crée cela et à quoi çà correspond de plus le nom des fichiers est bizarre sachant que dans ton code tu mets bien assimile_heure.

Eléphant du PHP | 92 Messages

06 juil. 2005, 14:18

j'ai regardé à nouveau le programme et je ne vois pas pourquoi çà créer des fichiers par stations. Normalement on devrait avoir 5 fichiers (par rapport aux heures) avec 22 lignes chacun.
Je bloque vraiment

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 juil. 2005, 14:22

remplace
    //Mise en tableau de la ligne
    $a_ligne = explode(";", $ligne);
par
    //Mise en tableau de la ligne
    $a_ligne = explode(";", $ligne);
    print_r($a_ligne);
Et donnes nous ce que le print_r affiche dans le CODE SOURCE

Et remplace
    $a_date = explode(" ", $a_ligne[4]); 
par
    $a_date = explode("\t", $a_ligne[4]); 
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

06 juil. 2005, 14:44

Voici ce que le print retourne

Array ( [0] => Organisme [1] => Station [2] => Constituant [3] => Unité [4] => Date [5] => Valeur [6] => Etat ) Array ( [0] => LIGAIR [1] => Chambord [2] => Ozone [3] => microg/m3 [4] => 06/07/2005 03:00 [5] => 27 [6] => A ) Array ( [0] => LIGAIR [1] => Chambord [2] => Ozone [3] => microg/m3 [4] => 06/07/2005 04:00 [5] => 15 [6] => A ) Array ( [0] => LIGAIR [1] => Chambord [2] => Ozone [3] => microg/m3 [4] => 06/07/2005 05:00 [5] => 14 [6] => A ) Array ( [0] => LIGAIR [1] => Chambord [2] => Ozone [3] => microg/m3 [4] => 06/07/2005 06:00 [5] => [6] => - ) Array ( [0] => LIGAIR [1] => Chambord [2] => Ozone [3] => microg/m3 [4] => 06/07/2005 07:00 [5] => [6] => - ) Array ( [0] => LIGAIR [1] => Prefecture [2] => Ozone [3] => microg/m3 [4] => 06/07/2005 03:00 [5] => 33 [6] => A ) Array ( [0] => LIGAIR [1] => Prefecture [2] => Ozone [3] => microg/m3 [4] => 06/07/2005 04:00 [5] => 20 [6]

Par contre il fait la lecture du fichier2 qu'à partir de la seconde ligne et les données que l'on a besoin ne commence qu'à la troisième ligne

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 juil. 2005, 14:54

alors remplace
foreach($a_fichier2 as $ligne) { 
par
foreach($a_fichier2 as $num => $ligne) { 
  if ($num == 1 || $num == 2)
    continue;
Et est-ce que tu as fait ça :
Et remplace
$a_date = explode(" ", $a_ligne[4]);
par
$a_date = explode("\t", $a_ligne[4]);
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

06 juil. 2005, 14:55

oui j'ai remplacé
$a_date = explode(" ", $a_ligne[4]);  

par
$a_date = explode("\t", $a_ligne[4]);  

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 juil. 2005, 14:59

Et tu as toujours les problèmes de constructions de fichiers ou pas ?
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

06 juil. 2005, 15:00

pas d'amélioration....je ne comprend vraiment pas.

Je te met malgré tout le fichier d'erreur qu'il me met :

Array ( [0] => 06/07/2005 07:20 [1] => 06/07/2005 03:00 [2] => 06/07/2005 07:00 [3] => Horaire [4] => APOR Validé sinon Brut )
Warning: fopen(assimile_06/07/2005 03.txt): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\assimile\carte_assimile.php on line 37

Notice: Undefined offset: 5 in c:\program files\easyphp1-8\www\assimile\carte_assimile.php on line 39

Warning: fputs(): supplied argument is not a valid stream resource in c:\program files\easyphp1-8\www\assimile\carte_assimile.php on line 41

Warning: fclose(): supplied argument is not a valid stream resource in c:\program files\easyphp1-8\www\assimile\carte_assimile.php on line 43
Array ( [0] => LIGAIR [1] => Chambord [2] => Ozone [3] => microg/m3 [4] => 06/07/2005 04:00 [5] => 15 [6] => A ) Array ( [0] => LIGAIR [1] => Chambord [2] => Ozone [3] => microg/m3 [4] => 06/07/2005 05:00 [5] => 14 [6] => A ) Array ( [0] => LIGAIR [1] => Chambord [2] => Ozone [3] => microg/m3 [4] => 06/07/2005 06:00 [5] => [6] => - ) Array ( [0] => LIGAIR [1] => Chambord [2] => Ozone [3] => microg/m3 [4] => 06/07/2005 07:00 [5] => [6] => - ) Array ( [0] => LIGAIR [1] => Prefecture [2] => Ozone [3] => microg/m3 [4] => 06/07/2005 03:00 [5] => 33 [6] => A ) Array ( [0] => LIGAIR [1] => Prefecture [2] => Ozone [3] => microg/m3 [4] => 06/07/2005 04:00 [5] => 20 [6] => A ) Array ( [0] => LIGAIR [1] => Prefecture [2] => Ozone [3] => microg/m3 [4] => 06/07/2005 05:00 [5] => 17 [6]

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 juil. 2005, 15:07

Et tu as fait ça ?

parce qu'il prend toujours en compte les 2 premieres lignes
alors remplace
foreach($a_fichier2 as $ligne) { 
par
foreach($a_fichier2 as $num => $ligne) { 
  if ($num == 1 || $num == 2)
    continue;
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

06 juil. 2005, 15:11

oui j'ai rajouté la modification que tu m'as trasmise et aucune amélioration les fichiers textes crées ont toujours la tête.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 juil. 2005, 15:13

Essaye comme ça parce que je suis pas sûr de mon continue
foreach($a_fichier2 as $num => $ligne) {
    if (($num <> 1) && ($num <> 2)) {
        //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("\t", $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);
    }
}
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

06 juil. 2005, 15:24

J'ai modifié le code avec ce que tu viens de me fournir et pas de changement voir les erreurs qu'il met :

Warning: fopen(assimile_06/07/2005 03.txt): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\assimile\carte_assimile.php on line 35

Notice: Undefined offset: 5 in c:\program files\easyphp1-8\www\assimile\carte_assimile.php on line 37

Warning: fputs(): supplied argument is not a valid stream resource in c:\program files\easyphp1-8\www\assimile\carte_assimile.php on line 39

Warning: fclose(): supplied argument is not a valid stream resource in c:\program files\easyphp1-8\www\assimile\carte_assimile.php on line 41

et les fichiers textes crées sont toujours pareils.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 juil. 2005, 15:36

Je suis un boulet : un tableau commence à 0, pas à 1 :axe: :tir2:

Donc, je t'explique les erreurs :

Code : Tout sélectionner

Warning: fopen(assimile_06/07/2005 03.txt): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\assimile\carte_assimile.php on line 35
Comme tu le vois, le nom de fichier contient des /, ce qui fait que php veut créer le dossier "2005 03.txt" sous l'arborescence de répertoire "assimile_06/07/", arbo qui n'existe pas

Code : Tout sélectionner

Notice: Undefined offset: 5 in c:\program files\easyphp1-8\www\assimile\carte_assimile.php on line 37
Il n'y a pas de case 5 dans le tableau => normal, la 1ere ligne n'a que 4 cases avec des ;

Code : Tout sélectionner

Warning: fputs(): supplied argument is not a valid stream resource in c:\program files\easyphp1-8\www\assimile\carte_assimile.php on line 39 Warning: fclose(): supplied argument is not a valid stream resource in c:\program files\easyphp1-8\www\assimile\carte_assimile.php on line 41
Ces 2 erreurs sont dues au fait qu'il n'a pas réussi à ouvrir le fichier texte
Elles disent que la ressource du fichier n'est pas valide

Et je te donne la boucle foreach qui devrait fonctionner
foreach($a_fichier2 as $num => $ligne) {
    if (($num == 0) || ($num == 1))
        continue;
        
    //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("\t", $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);
}
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

06 juil. 2005, 15:55

Avec ce nouveau code polus d'erreur mais les fichiers textes crées ne correspondent pas aux résultats attendus ; je ne comprend ce qu'il me met dans les fichiers, je ne vois pas de corresopndance avec les valeurs que j'ai dans le fichier2 de plus il ne met pas les coordonnées.
Donc je ne comprend vraiment pas.

Voici le contenu du fichier assimile_chambord :

1,91 47,9
271,91 47,9
151,91 47,9
141,91 47,9
1,91 47,9

Les valeurs du genre 271.91 je ne sais pas à quoi çà correspond?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 juil. 2005, 16:01

Je pense que ça doit être 27+1.91

Essaye de remplacer
    //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];
par
    //Construction de la ligne contenant la ligne du fichier 1 plus le 6eme champs du fichier 2
    $str_a_insere = $a_ligne[5]."\t".$a_fichier1[$index];
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