IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

oucle qui ne lit pas la premiere ligne du fichier?


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 76
    Points : 48
    Points
    48
    Par défaut oucle qui ne lit pas la premiere ligne du fichier?
    Bonjour,
    Petit probleme sur la lecture d'un fichier (a ce qu'il me semble)

    1) j'uploade un fichier txt
    2) je le renomme
    3) je cree un fichier vide
    4) j'ouvre ces 2 fichiers
    5) je stocke le fichier uploadé ds un tableau
    6) grace a une boucle, j'essaye d'ecrire, suivant differents criteres, certaines lignes du fichier uploadé vers le fichier crée

    Voici le script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    if(move_uploaded_file($_FILES['fichier']['tmp_name'], $dossier.$fichier)) {
    			// le fichier doit avoir ete uploade. on le lit, le parse afin de verifier la validite de ce dernier
    			// si OK, alors insertion du nom ds la DB
    			// si pas OK, pas d'insertion et affichage message d'erreur, effacement du fichier nvellement cree
     
    			// renomme le fichier uploade (l'original)
    			rename($dossier.$fichier, $dossier."ori_".$fichier);
     
    			// on cree un fichier vide
    			$cop_file= "pgn/parties_commentees/membres/".$_SESSION['login']."/".$fichier;
     
    			// on ouvre les 2 fichiers l'original (qui a ete renomme) et la copie (vide pour le moment)
    			$ori_file_opened= fopen($dossier."ori_".$fichier, "r");
    			$cop_file_opened= fopen($cop_file, "w");
     
    			// tableau contenant le fichier d'origine
    			$ori_tab= file($dossier."ori_".$fichier);
     
    			// les compteurs
    			$compteur_TAG= 0;
    			for($i= 0; $i< count($ori_tab); $i++) {
    				// compte le nbre de caracteres de chaque ligne (le retour chariot est compte comme un caractere)
    				$compteur_caracteres= strlen($ori_tab[$i]);
     
    				//--------------------------------------------------------------------------------------------------------------------------------
    				// permet de trouver toutes les lignes debutant par un crochet ET DT L'AVANT DERNIER caractere est un ], autrement dit un TAG et dernier caractere= nouvelle ligne
    				if(substr($ori_tab[$i], 0, 1)== "[" && substr($ori_tab[$i], ($compteur_caracteres- 2), 1)== "]" && substr($ori_tab[$i], ($compteur_caracteres- 1), 1)== "\n") {
    					$compteur_TAG++;
     
    					// detruire les guillemets et remplacer les nouvelle ligne par des balises <br>
    					for($j= 0; $j<= $compteur_caracteres; $j++) {
    						if($ori_tab[$i][$j]== '"') {
    							$ori_tab[$i]= str_replace("\"", "", $ori_tab[$i]); // les guillemets
    							$ori_tab[$i]= trim($ori_tab[$i]); // enlever espaces en debut et fin de chaines
    							$ori_tab[$i].= "<br>"; // ajouter la balise <br> en fin de chaine
    						}
    					}
    					// ecrire ds le fichier
    					fwrite($cop_file_opened, $ori_tab[$i]);
    				}
    			}
    }
    Voici le contenu du fichier txt d'origine
    -------------------------------------------
    [Event "FICS unrated standard game"]
    [Site "FICS, San Jose, California USA"]
    [Date "2010.01.15"]
    [Time "04:55:27"]
    [Round "-"]
    [White "areuh"]
    [Black "Ralleyrolf"]
    [WhiteElo "1731"]
    [BlackElo "1773"]
    [TimeControl "1200+0"]
    [Mode "ICS"]
    [Result "1/2-1/2"]

    1. e4 c6 2. Nf3 d5 3. Nc3 d4 4. Ne2 c5 5. Nf4 Nc6 6. d3 e5 7. Ne2 Bd6 8. Ng3
    Nge7 9. Be2 O-O 10. O-O f5 11. Bg5 Qc7 12. Nh4 h6 13. Bxe7 Nxe7 14. Bh5
    g5 15. Ng6 Nxg6 16. Bxg6 f4 17. Nf5 Bxf5 18. exf5 Rf6 19. Qf3 Qc6 20. Qxc6
    bxc6 21. c3 Rb8 22. cxd4 cxd4 23. b3 Ba3 24. Rfe1 Rb5 25. Re2 Rc5 26. h4
    gxh4 27. Rae1 Rc3 28. Rxe5 Rxd3 29. Re6 Kg7 30. Rxf6 Kxf6 31. Re6+ Kg7 32. Rxc6
    Rc3 33. Re6 d3 34. Re1 d2 35. Rd1 Rc1 36. Bh5 Rxd1+ 37. Bxd1 Kf6 38. Bc2
    a5 39. Kf1
    {Game drawn by mutual agreement} 1/2-1/2
    ----------------------------------------------------

    la premiere ligne du fichier d'origine n'est pas ecrite dans le fichier nouvellement crée, alors que les suivantes le sont bien.
    Je ne sais pas d'ou provient l'erreur
    - le fait d'uploader, renommer, lire, etc, etc, dans une meme page y est il pour quelque chose?
    - l'ecriture des conditions?

    voilà, si vous pouviez me filer un coup de main, je galere pas mal.
    En vous remerciant,
    areuh
    longue vie aux forums

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Est-ce que la premiere ligne passe ta condition de substr() ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 76
    Points : 48
    Points
    48
    Par défaut
    Bonjour,

    merci de la reponse.
    Ben il est la le probleme, si je ne cherche pas le crochet entrant ([), toutes les lignes sont bien ecrites ds le fichier nouvellement crée.
    si je recherche ce "[" alors la premiere ligne est ignoree.

    je ne sais pas si le script ignore la premiere ligne, ou s'il se passe autre chose. On dirait qu'elle est ignoree, mais pourquoi?

    merci
    a+
    areuh
    longue vie aux forums

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je dirais que ton fichier est ecrit en UTF8 avec BOM et que tu lis le BOM comme premier caractère et non le crochet.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 76
    Points : 48
    Points
    48
    Par défaut
    re,

    ton histoire a BOM a l'air ok, je viens de refaire un fichier avec un nouvel editeur texte et tous les tags [] sont bien lus et ecrits ds le nveau fichier.

    dc question subsidiaire:
    a l'upload d'un fichier, est il possible de connaitre son encodage et, si necessaire, la presence du BOM?

    Merci
    a+
    areuh
    longue vie aux forums

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    une fonction qui detecte le BOM au début de la chaine et le retire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function removeBOM($str=""){
            if(substr($str, 0,3) == pack("CCC",0xef,0xbb,0xbf)) {
                    $str=substr($str, 3);
            }
            return $str;
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 76
    Points : 48
    Points
    48
    Par défaut
    ok,

    merci encore

    areuh
    longue vie aux forums

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Supprimer le texte qui n'est pas entre deux lignes
    Par vibos dans le forum VBA Word
    Réponses: 11
    Dernier message: 11/06/2009, 23h44
  2. Réponses: 2
    Dernier message: 26/03/2009, 14h50
  3. ma boucle cat ne lit pas la derniere ligne
    Par dams78 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 31/05/2008, 15h13
  4. Réponses: 2
    Dernier message: 29/05/2006, 12h43
  5. Réponses: 12
    Dernier message: 29/04/2005, 14h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo