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 :

Récupérer code postal [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 46
    Par défaut Récupérer code postal
    Bonjour,
    J'ai un petit problème avec mon code, je dois récupérer tous les codes postaux présent dans un document Word. Mais sa ne marche pas, sa me met une Array vide. Ou dans certain cas en changeant d'expression régulière j'ai l’erreur Undefined offset: 0.
    Merci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $monfichier = fopen('C:\wamp\www\test\mailing - invitation 8-1-2013-port 263-groupe 1.doc', 'r+');
    $content= fread($monfichier,8000);
    //echo $content;
    preg_match_all('/^0[1-9]|[1-8][0-9]|9[0-8]|2A|2B[0-9]{3}$/',$content,$result, PREG_OFFSET_CAPTURE,0);
    print $result[0][0]; 
     
    fclose($monfichier);
    ?>

  2. #2
    Membre expérimenté
    Avatar de crozet.magenta
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 208
    Par défaut
    Si je ne m'abuse fread lit. Le fichier en mode binaire...
    Essaye d'ouvrir ton document avec notepad tu verras que c'est pas la même chose que quand tu l'ouvres avec word. Ton probleme vient peut-être de là.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 46
    Par défaut
    Merci pour ta réponse,
    effectivement quand je l'ouvre avec le notepad le résultat n'est pas le même. Les entêtes et pied de pages disparaissent. Mais je ne pense pas que cela soit la cause de mon problème :
    J'arrive à récupérer le Code postal de manière "manuelle" en entrant la position exacte de celui dans le fseek en faisant comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $monfichier = fopen('C:\wamp\www\test\mailing - invitation 8-1-2013-port 263-groupe 1.doc', 'r+');
    $content= fread($monfichier,8000);
    fseek ($monfichier,2678);
    $cp = fread($monfichier,5);
    mais comme les adresses sont différente je ne peut pas utiliser cette méthode car la position est différente pour chaque adresses.

  4. #4
    Membre expérimenté
    Avatar de crozet.magenta
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 208
    Par défaut
    si tu recherches uniquement des codes postaux, ils sont tous sous forme d'une série de 5 chiffres même pour les dom tom qui ont 3 chiffres pour le département et pour la corse (2A et 2B sont remplacés par 20)
    il me semble que cette requête devrait fonctionner :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all('/^[0-9]{5}$/',$content,$result, PREG_OFFSET_CAPTURE,0);

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 46
    Par défaut
    Je viens de tester avec ton code. Mais il me retourne toujours l'erreur Undefined offset sur le print.
    J'ai lu que cet erreur était un problème d'index qui n'existe pas et en effet quand je fait un :
    J'obtiens Array ( [0] => Array ( ) ).
    Donc le preg_match ne marche pas.
    Si quelqu'un a une autre méthode pour les récupérer je suis preneur.

  6. #6
    Membre expérimenté
    Avatar de crozet.magenta
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 208
    Par défaut
    ah alors en enlevant le "PREG_OFFSET_CAPTURE,0" ça devrait fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all('/^[0-9]{5}$/',$content,$result);

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 46
    Par défaut
    même en enlevant le "PREG_OFFSET_CAPTURE,0" sa ne marche pas, toujours ce problème de Undefined offset et d'Array vide.
    Je vous joint une version lite du document en question si sa peut vous aider (normalement le document officiel comporte une cinquantaine de page comme celle la).
    Et je vous remet le code qui me permettais d'avoir le code postal de maniere manuelle pour ce doc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $monfichier = fopen('C:\wamp\www\test\test1.doc', 'r+');
    $content= fread($monfichier,8000);
    fseek ($monfichier,2648);
    $cp = fread($monfichier,5);
    echo $cp;
    fclose($monfichier);
    ?>
    En tout cas un grand merci à vous pour le temps que vous passez sur mon problème.
    EDIT : j'ai découvert qu'il y avait d'autres fonctions similaire à fread (je débute), je vais les essayer (en attendant de trouver une solution) pour être sur que le problème ne vient pas du fread.

  8. #8
    Membre expérimenté
    Avatar de crozet.magenta
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 208
    Par défaut
    Je viens de percuter : tu ouvres un fichier en donnant une adresse absolue dans ton ordinateur mais php ne sait pas faire il me semble, c'est langage serveur et ton serveur est dans le répertoire www donc la racine est www
    Remplace C:\wamp\www\test\test1.doc par une adresse absolue ("./test.doc" si ton fichier php et ton doc sont dans le même répertoire)

  9. #9
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Non, fopen() est tout à fait capable de lire dans le système de fichiers, en revanche, il faut échapper les antislash !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  10. #10
    Membre expérimenté
    Avatar de crozet.magenta
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 208
    Par défaut
    ah ok merci pour la précision Bovino

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 46
    Par défaut
    Ma question va peut être paraitre idiote mais je dois échapper les antislash du chemin ? ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fopen('C:\\wamp\\www\\test\\test1.doc', 'r+');
    EDIT : Après plusieurs essaies sa ne marche pas.

  12. #12
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Oui mais comme déjà dit, fopen() n'est certainement pas la bonne façon pour un fichier Word !
    Regarde plutôt du côté de COM...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 46
    Par défaut
    Merci pour l'information.
    Je viens de tester avec COM et j'ai encore le problème de Undefined offset et l'array vide. Le problème doit surement venir du preg_match. Existe t'il une fonction du même type que preg_match ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    $word = new COM("word.application") or die ("Impossible");
    $word->Documents->Open(realpath("C:\\wamp\\www\\test\\test1.doc"));
    $content = (string) $word->ActiveDocument->Content;
    echo $content;
    preg_match_all('/^[0-9]{5}$/',$content,$result);
    print_r($result); 
    echo $result[0][0]; 
    $word->ActiveDocument->Close(false);
    $word->Quit();
    $word = null;
    unset($word);
    ?>

  14. #14
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all('/^[0-9]{5}$/',$content,$result);
    Là, ça semble être ta compréhension des expressions régulières qui semble être à revoir.

    • / : début de l'expression
    • ^ : on recherche au début de la chaine
    • [0-9] : tout caractère entre 0 et 9
    • {5} : cinq fois la classe précédente
    • $ : on recherche la fin de la chaine
    • / : fin de l'expression

    Donc ton motif ne fonctionnera que si $content ne comporte que 5 caractères et qu'ils sont tous numériques !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 46
    Par défaut
    Il va falloir que je révise les expressions régulières c'est encore du chinois pour moi et l'erreur venait bien de la.
    Mais j'ai réussi à régler mon problème grace à vous
    Merci

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/03/2014, 15h43
  2. Récupérer code postal dans une adresse
    Par shaddy dans le forum SAS Base
    Réponses: 4
    Dernier message: 21/06/2012, 12h29
  3. Récupérer le département à partir du code postal
    Par galigori dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/05/2010, 23h37
  4. récupérer un code postal dans une adresse
    Par knice dans le forum Langage
    Réponses: 4
    Dernier message: 30/07/2008, 17h47
  5. Réponses: 5
    Dernier message: 24/01/2006, 15h25

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