Bienvenue! Inscrivez-vous et rejoignez notre communauté :)
  • Login:

Bienvenue sur Forum SIG - Systèmes d'Information Géographique et Géomatique.

Bienvenue sur le forumSIG. S'il s'agit de votre première visite, assurez vous de faire une recherche préalable dans les FAQ SIG. Vous devez vous inscrire avant de pouvoir poster.

Affichage des résultats 1 à 11 sur 11
  1. #1

    Date d'inscription
    juillet 2007
    Messages
    184

    Thumbs down Isoler les "n" derniers mot d'un champs

    Bonjour,

    je travail sur la BDTOPO de ma commune afin de produire (entre autres) un plan de ville.
    Pour ce faire je pensais utiliser la couche "route", mais à ma grande surprise, le(s) champs "nom de rue(Droite et gauche)" n'ont pas du tout la structure que j'attendais.
    Là où je pensais récupérer une structure classique de type
    - Type de voie "Avenue du"
    - Nom patronymique "Gaulle (Général De)"
    je trouve un champ unique qui regroupe tout ça pour chaque coté de voie, et en plus les abréviations de voie ne sont pas les bonnes : "AVE DU GENERAL DE GAULLE"
    Grrrr
    Bref je cherche de passer de ce que m'a donnée l'IGN à ce que je voudrai.

    Mon problème est : comment faire pour isoler uniquement le dernier mot du champ ? (rue de la paix)
    Question subsidiaire pour les quelques cas particuliers : comment faire pour isoler uniquement les X derniers mots du champ ? (Place de la fontaine aux merles bleus)

    Ou alors, existe-t-il une solution plus pertinente ?
    Je serai surpris d'être le premier à avoir ce problème!!!

    Merci pour votre aide.

  2. #2

    Date d'inscription
    mars 2008
    Localisation
    Nancy
    Emploi
    Sans
    Messages
    4 464

  3. #3

    Date d'inscription
    juillet 2007
    Messages
    184

    Par défaut

    Bonjour,

    Merci Joël pour ces liens. En les parcourant il me semble que j'y trouverai des réponses.
    J'ai l'impression que sur ce genre de code je suis à la limite de mes connaissances et capacités , mais c'est le moment de les repousser .

    Je n'ai juste pas très bien cerné plusieurs choses :
    ce code permet t'il de travailler sur un champ où il y a plusieurs chaine de caractère et d'isoler chacune d'entre elle?

    Dans mon cas où je n'ai pas de structure fixe dans mon champs (à l'inverse de Kymahri) ex :"Avenue honoré de Balzac" ou "Place de la fontaine aux merles bleus" ou , Comment affecter aux bons champs les bonnes chaine de caractère?

    De toutes façon je ne pourrait pas m'immerger dedans avant demain matin. Je creuse et je reviendrai ici pour vous interroger de nouveau ou faire un suivi.
    Merci pour cette bouée.

  4. #4

    Date d'inscription
    mars 2008
    Localisation
    Nancy
    Emploi
    Sans
    Messages
    4 464

    Par défaut

    ce code permet t'il de travailler sur un champ où il y a plusieurs chaine de caractère et d'isoler chacune d'entre elle?
    Celà devrait être possible.
    Ai je bien compris ton problème?
    Tu cherches à sortir les types de voies et les mettre dans un autre champ?
    Ex: Av du Général De Gaulle donne "Av" dans un champ (Voies) et "du Général de Gaulle" dans le champ initial.
    A+
    Joël

  5. #5

    Date d'inscription
    juillet 2007
    Messages
    184

    Par défaut

    un peu plus plus compliqué que ça :
    mon objectif final serait d'avoir dans 3 champs séparés
    - "Av"
    - "du Général"
    - "De Gaulle"

    Au à défaut 2 champs
    - "Av du Général"
    - "De Gaulle"

    De manière à pouvoir afficher sur le plan "Av du Général De Gaulle" mais dans mon index de rue "De Gaulle (Avenue du général)"

    Mais en approfondissant, je me demande s'il ne serait pas plus pertinent d'acheter une couche de qualité renseignée de la manière idoine.
    Cependant d'après différents avis, ce que je cherche n'existe pas. Je risque donc d'être obliger de passer par ce travail infâme!

    Merci
    *******
    EDIT
    *******
    Voila, je m'y suis confronté plus concrètement,

    Merci Joël.

    Ca fonctionne pour "séparer" le type de voie du reste du champ (la première chaine de caractère).
    Comme dans ton exemple
    Ex: Av du Général De Gaulle donne "Av" dans un champ (Voies) et "du Général de Gaulle" dans le champ initial.
    En revanche je n'arrive pas à séparer la DERNIÈRE chaine de caractère du champ.
    Or dans 80% des cas l'entrée patronymique est juste le dernier mot.

    Il y a surement un "truc"... mais lequel ?
    Dernière modification par Timbal ; 12/07/2011 à 14h49. Motif: Fusion automatique des messages postés à la suite

  6. #6
    Rédacteur Supporter(rice)

    Date d'inscription
    octobre 2008
    Localisation
    Le caillou
    Emploi
    Développeur SIG
    Âge
    31
    Messages
    1 890

    Par défaut

    Salut,
    Essaie avec la fonction instrrev qui va "dans l'autre sens" que instr.
    Autre piste : utiliser explode.

    Jérémie

  7. #7

    Date d'inscription
    mars 2008
    Localisation
    Nancy
    Emploi
    Sans
    Messages
    4 464

    Par défaut

    Je comprends mieux le problème
    A essayer --> Split(expression[, delimiter[, count[, compare]]])
    Voici le lien --> http://www.commentcamarche.net/conte...aracteres.php3
    A+
    Joël

  8. #8
    Modérateur et rédacteur Supporter(rice)


    Date d'inscription
    octobre 2005
    Localisation
    Louvain-la-neuve
    Emploi
    Géologue
    Organisme
    Université Catholique de Louvain - Région Wallonne
    Messages
    2 617

    Par défaut

    sans vouloir froisser personne, mais c'est le domaine des "expressions régulières".
    http://www.forumsig.org/showthread.p...r%E9guli%E8res

    Dans ce cas ou aucune donnée n'est la même, le split va séparer la chaîne de caractère suivant un critère (espace par exemple) alors qu'un bonne expression règulière va faire exactement ce que vous voulez.

    Je ne connais pas ArcGIS, mais elles sont disponibles dans tous les langages comme Python ou Vbscript (http://www.addedbytes.com/lab/vbscri...r-expressions/) et même des traitements de texte comme Notepad++...
    Example d'expressions
    Tous les mots:
    \b\w+\b
    AVE DU GENERAL DE GAULLE
    Le dernier mot
    \b\w+\b$
    résultat
    AVE DU GENERAL DE GAULLE
    Le premier mot
    ^ \b\w+\b
    AVE DU GENERAL DE GAULLE
    Les 2 premiers mots
    ^( \b\w+\b)[ ]( \b\w+\b)
    AVE DU GENERAL DE GAULLE
    etc.

    un mot sur 2
    \w{2}\w
    AVE DU GENERAL DE GAULLE
    etc.
    Dernière modification par gene ; 12/07/2011 à 21h10.
    "Caminante, no hay camino, el camino se hace al andar" A. Machado

  9. #9

    Date d'inscription
    mars 2008
    Localisation
    Nancy
    Emploi
    Sans
    Messages
    4 464

    Par défaut

    Excellent Gene (avec le complément et les compliments)
    Hier soir je ne voyais pas comment utiliser ces expressions dans le cas qui préoccupe notre ami .
    Par contre je pensais que le "split" était bien adapté dans ce cas.
    Je ne connais pas ArcGIS, mais elles sont disponibles dans tous les langages comme Python ou Vbscript
    Particulièrement bien adapté car ce logiciel interprète trés bien ces 2 languages.
    Notament VBscript pour la calculette en mode avancé (ce que je conseille à Timbal).
    Merci à toi pour ces précisions
    A+
    Joël

  10. #10

    Date d'inscription
    juillet 2007
    Messages
    184

    Par défaut [résolu]

    Bonjour,

    J'ai réussi à obtenir un résultat probant grâce aux fonctions Len et instr.
    Je n'ai pas pu m'affranchir d'un travail de vérif de chacun de mes enregistrements. En fin de compte cela revenait à épurer le champs patronymique des articles (les, du , etc) ou alors les prénoms des personnalité (ce cas me semble impossible à automatiser)
    Pour éviter de faire ce travail sur 25000 enregistrements correspondant à mes 2500 tronçon j'ai préalablement "récapitulé" mes "nom de voie" de sorte à n'en avoir plus que 200. par la suite je procéderai avec une jointure pour réaffecter les champs souhaité.

    Merci pour votre aide sans laquelle je n'aurai pas réussi.

    par ailleurs, juste histoire d’être sur de bien comprendre :
    Ce que me présente GENE est un autre langage ou une écriture synthétisant la démarche?
    S'il s'agit d'un autre langage,, joel tu me confirme qu'il fonctionne sous arc view?
    (si oui, il faudra que je voie comment il s'utilise car la syntaxe semble différente de ce que je connaissais)

    En tt cas ça m'intéresse bien mais la discussion risque peut être de dévier de la question d'origine. Ne comprenant encore pas toutes les info qui arrivent à moi je propose au modérateur d'intervenir en cas de besoin.

  11. #11
    Modérateur et rédacteur Supporter(rice)


    Date d'inscription
    octobre 2005
    Localisation
    Louvain-la-neuve
    Emploi
    Géologue
    Organisme
    Université Catholique de Louvain - Région Wallonne
    Messages
    2 617

    Par défaut

    Ce que me présente GENE est un autre langage ou une écriture synthétisant la démarche?
    Ce n'est ni un langage ni une écriture mais un motif de recherche pour la simple manipulation du texte. Il permet de rechercher avec précision un élément donné dans une chaine de caractères avec des règles précises. Ces expressions sont utilisées partout, même sans le savoir. Les règles de construction des motifs sont détaillées dans http://fr.wikipedia.org/wiki/Express...9guli%C3%A8res, par exemple
    ^ \b\w+\b
    signifie recherche un mot (\b..\b) composé de plusieurs lettres majuscules ou minuscules (\w+) situé en début de la phrase (^)

    Pour bien comprendre ce que sont les expressions régulières, commençons par une chose simple en Python
    Code:
    import re
    regexp='ForumSig'
    chaine = 'abcdefghijklmnopqrstuvwxyzForumSigabcdefghijklmnopqrstuvwxyz'
    match = re.search(regexp, chaine)
    match.start(), match.end()
    (26, 34)
    chaine[match.start():match.end()]
    'ForumSig'
    regexp est l'expression régulière recherchée. Ici elle est simple, littérale mais je peux remplacer tous ces éléments par des motifs spécifiques.
    Code:
    regexp='F\w+Sig'
    match = re.search(regexp, chaine)
    match.start(), match.end()
    (26, 34)
    chaine[match.start():match.end()]
    'ForumSig'
    # ou plus simplement
    re.findall(regexp, chaine)
    ['ForumSig']
    #mais 
    regexp='F\w+S\w'
    re.findall(regexp, chaine)
    ['ForumSi']
    
    # ou
    regexp='F\w+S\w+'
    re.findall(regexp, chaine)
    ['ForumSigabcdefghijklmnopqrstuvwxyz']
    Comme on le voit, l'utilisation des ces motifs permet d'arriver à des résultats de recherche (et de remplacement) d'une précision diabolique
    Avec votre exemple :
    Code:
    import re
    # expression régulière pour trouver le premier mot
    regexp= r"^\b\w+\b"
    chaine = 'AVE DU GENERAL DE GAULLE'
    re.findall(regexp, chaine)
    ['AVE']
    
    # pour le dernier mot
    regexp2 = r"\b\w+\b$"
    re.findall(regexp2, chaine)
    ['GAULLE']
    
    # un peu plus complexe : recherche du 2e mot
    regexp3 = r"^\w+\s(\w+)"
    re.findall(regexp3, chaine)
    ['DU']
    
    # 2e et 3e mot
    regexp4 = r"^\w+\s(\w+)\s(\w+)"
    re.findall(regexp4, chaine)
    [('DU', 'GENERAL')]
    
    # 3e mot seul
    regexp5 = r"^\w+\s\w+\s(\w+)"
    re.findall(regexp5, chaine)
    ['GENERAL']
    
    et ainsi de suite
    Ces motif peuvent aussi être utilisé dans Microsoft Word, Open Office, etc...

    Vous pouvez aussi les tester en ligne
    http://www.regular-expressions.info/...ptexample.html
    vous rentrez ^\b\w+\b dans le champs "Regexp" et AVE DU GENERAL DE GAULLE dans le champs "Subject String" et vous appuyez sur le bouton "Show match"
    Dernière modification par gene ; 13/07/2011 à 20h36.
    "Caminante, no hay camino, el camino se hace al andar" A. Machado

 

 

Discussions similaires

  1. [QGIS X.x] Calculatrice de champs, "compilation" de colonnes
    Par Douglas dans le forum Assistance et Programmation
    Réponses: 4
    Dernier message: 11/12/2013, 10h33
  2. [ArcGIS 10.x] Précision des champs x,y calculés avec "calculer la géométrie"
    Par bgaelle dans le forum Assistance Technique
    Réponses: 1
    Dernier message: 22/06/2013, 23h44
  3. [ArcGIS 9.x] Gestion des champs "null" dans un model builder
    Par anais4008 dans le forum Assistance Technique
    Réponses: 4
    Dernier message: 11/07/2011, 12h05
  4. [ArcGIS 9.x] Menu "Calcul de valeurs de champs" : problème de somme
    Par oyapock dans le forum Assistance Technique
    Réponses: 1
    Dernier message: 18/03/2011, 15h49
  5. [Access] Requête "création": attribuer une valeur unique à l'ensemble d'un champs
    Par Séb le dingue dans le forum Assistance et Programmation
    Réponses: 7
    Dernier message: 03/02/2011, 00h37

Les tags pour cette discussion

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •