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

Access Discussion :

Extraction de chaine de caractaires


Sujet :

Access

  1. #1
    Membre habitué Avatar de texas2607
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 344
    Points : 159
    Points
    159
    Par défaut Extraction de chaine de caractaires
    Salut,
    J'ai une table liée nommé "Bugs" et celle ci comporte 10 Champs avec env 400 enregistrements. L'un des champs se nomme "Steps" mais il contient soit une chaine brut du style L1MSOA3M02S4 (celle la m'interresse au plus au point), soit il dispose d'un texte mais ou il y à toujours cette fameuse chaine à l'interieur du style "file S:\4\report\L1MER45FDE..." (il y à toujours une chaine à l'interieur mais differente à chaque fois.), mon problème c'est de creer une autre table en ne ressortant que cette chaine sans les grigri qui sont de part et d'autre afin que dans la nouvelle table je n'est que LA CHAINE QUI M'INTERRESSE.
    Dur, je ne sais pas si j'ai été clair, mais help me please.
    Merci

  2. #2
    Membre éclairé Avatar de stéphane_ais2
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 792
    Points : 891
    Points
    891

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Sinon tu peux utiliser les isntructions :

    Like, Mid, Instr, Left, Right, Trim, LTrim, RTrim

    qui sont des fonctions de manipulation de chaînes.

    A+

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 371
    Points : 19 774
    Points
    19 774
    Billets dans le blog
    65
    Par défaut
    Salut,

    peux tu nous donner un listing précis de valeurs prises par ton champ [Steps]

    et en fasse de chaque valeur ce que tu souhaite avoir à la place et ou tu souhaite stocker ces nouvelles valeurs...

    Merci d'avance,

    @+

  5. #5
    Membre habitué Avatar de texas2607
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 344
    Points : 159
    Points
    159
    Par défaut
    concernant le champ STEPS il est de type MEMO. Il peut ëtre sous differente formes :
    1) Il peut contenir (par ex) seulement le texte : K4V89E432FR87U9
    2) il peux etre sous la forme : declareCurrentMovieFile.as:S:\4.Conduite\1.K4V89EPSD437U9\K4V89E433DR788
    3) ou alors : File : S:\4. Conduite\1.\9.\GT605S01FGT\K4V812ZSD4345Y
    4) ou alors il n'y est pas du tout, le champs est vide ou dispose d'une phrase sans importance

    Lors de l'importation de ma table j'utilise la fonction DROP et SELECT * INTO a l'ouverture de mon formulaire nommé "START" afin de creer une nouvelle table à jour avec les nouveaux enregistrement. Mais la fonction SELECT * INTO.... importe la totalité des champs et des valeurs sans que je puisse faire ce fameux tri, car seul ces "Chaines" m'interresent pour le champs STEPS les autres champs doivent eux, bien être importés entièrement. La seule choses sur ces chaines c'est qu'elles commencent toutes par K4V
    Voilà, j'espère avoir été clair
    Merci

  6. #6
    Membre actif
    Avatar de GAGNON
    Inscrit en
    Septembre 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 201
    Points : 201
    Points
    201
    Par défaut
    salut

    si je comprend bien tu veux récuperer tous les enreg dont le champs STEPS contient ...K4V...

    un simple LIKE ne suffit-il pas ?

  7. #7
    Membre habitué Avatar de texas2607
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 344
    Points : 159
    Points
    159
    Par défaut
    Je ne sais pas mais voici ce que "j'aimerais" :
    1) j'ouvre access et la table liée se mets à jour
    2) Cette table est copiée vers une nouvelle table avec l'ensemble des champs et des valeurs sauf pour STEPS ou je doit avoir dans cette nouvelle table uniquement la chaine "K4V.... si elle existe ou alors la totalité du champ si effectivement K4V... n'y est pas. (car dans ce cas, le memo est important dans sa totalité). Bref pour résumer sur le champ STEPS :
    1) champ vide -> nouvelle table= champ vide
    2) chaine contenant K4V.... -> nouvelle table =uniquement K4V....
    3) chaine ne contenant pas K4V... -> nouvelle table =chaine complete

    pour reprendre ce que tu me dis, comment utiliser LIKE alors que je crée la table avec SELECT INTO. Là je ne connais pas.

  8. #8
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 371
    Points : 19 774
    Points
    19 774
    Billets dans le blog
    65
    Par défaut
    dans ton exemple ta chaine "K4V.. (en bleu) est toujours à la fin ???

    Si c'est le cas alors tu peux essayer avec la fonction split(str,"\") ou tu sort la dernière valeur du tableau généré...

    Sinon sert toi du tuto de caféine...

  9. #9
    Membre habitué Avatar de texas2607
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 344
    Points : 159
    Points
    159
    Par défaut
    Non, impossible car effectivement j'ai omis mais cette chaine peut etre à n'importe quel endroit puisque elle est ecrite par des utilisateurs et suivant la tournure de leurs phrases ils ne l'ecrive pas au même endroit. de plus lorsque cette chaine est inexistante dans le texte il me faut le totalité du texte afin d'en prendre note. La seule chose c'est que effectivement elle débute toujours par K4V
    Bref, dur dur. Voilà x temps que j'y suis dessus et rien de vraiment top.
    Fred

  10. #10
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 371
    Points : 19 774
    Points
    19 774
    Billets dans le blog
    65
    Par défaut
    Dans ton exemple les chaine recherchées sont elle toujours précédée de \ exemple: "File : S:\4. Conduite\1.\9.\GT605S01FGT\K4V812ZSD4345Y"

    (et sinon elle sont toutes seules: exemple: "K4V89E433DR788")

    @+

  11. #11
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Utilise instr pour savoir si ta chaîne contient le morceau qui t'interesse. Cela te retrourne la 1ère position si cela existe et 0 sinon.

    À partir de là, Mid est utilisable pour découper la chaine sur une longueur donnée.

    Instr et Mid sont le instruction les plus utiles dans ce cas.

    A+

  12. #12
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 371
    Points : 19 774
    Points
    19 774
    Billets dans le blog
    65
    Par défaut
    Oui Marot_r j'ai eu la même idée que toi, mais il me semble que les chaines recherchées ne sont pas toutes de la même longueur.

    Donc déterminer la longueur sur laquelle extraire la chaine à partir de la position repéré par instr n'est pas évident.

    Il faudrait un délimiteur de fin de chaine
    car la chaine peut-être au milieu.

    Donc un délimiteur de début genre "\K4V8" (pour le cas ou la chaine n'est pa seule) et 1 délimiteur de fin s'il existe...
    tous deux repérés par instr

    ou alors la fonction t=split(str,"\") et une recherche sur les élément du tableau pour trouver la bonne chaine ...

    @+

  13. #13
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Sans taille fixe ni delimiteur de part et d'autres, ça risque d'être impossible

  14. #14
    Membre habitué Avatar de texas2607
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 344
    Points : 159
    Points
    159
    Par défaut
    Salut à tous,
    J'avais meme pas prété attention.
    Elles commencent par K4V (quand elles sont présentes!!), et ont 15 caractères., par contre leur emplacement peut etre n'importe où ( quand elles y sont)

    Désolé pour cette omission.
    Fred

  15. #15
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Il suffit donc de chercher la position de K4V avec inStr et ensuite prendre les 15 caractères suivant avec Mid

  16. #16
    Membre habitué Avatar de texas2607
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 344
    Points : 159
    Points
    159
    Par défaut
    Re à tous,
    ok pour la fonction Instr mais comment l'inserer dans mon code, actuellement j'ai celui-ci pour créer ma nouvelle table :

    Private Function Mise_a_Jour()

    DoCmd.SetWarnings False
    DoCmd.RunSQL "DROP TABLE Nveau_Bugs" 'Supprime la table Nveau_Bugs existante
    DoCmd.RunSQL "SELECT * INTO Nveau_Bugs FROM Bugs" ' "Clone" la table Bugs vers Nveau_Bugs
    DoCmd.SetWarnings True

    End Function

    Comment insérer la fonction Instr pour la création de la table "Nveau_Bugs" tout en modifiant l'importation du champ "STEPS" afin qu'il devienne "conforme" sans toucher aux autres ?

  17. #17
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 371
    Points : 19 774
    Points
    19 774
    Billets dans le blog
    65
    Par défaut
    Salut,

    Tu définis dans 1 module à part ta fonction d'extraction de chaine:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Function extract_chaine(Occ As String)
    Dim d As Integer
     
    d = InStr(Occ, "K4V")
     
       If d <> 0 Then
       extract_chaine = Mid(Occ, d, 15)
       Else
       extract_chaine = Occ
       End If
     
    End Function

    Puis ta requête création de table:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "SELECT champ1, champ2,..., extract_chaine(Bugs.Steps) As Steps INTO Nveau_Bugs FROM Bugs"

    les champ1,champ2,Champ3... désigne les autres champs de ta table...


    @+

  18. #18
    Membre habitué Avatar de texas2607
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 344
    Points : 159
    Points
    159
    Par défaut
    Salut,
    Tout d'abord merci car la fonction marche par contre y à t'il un moyen de corriger un bug dans cette fonction.
    Je m'explique, je viens de m'apercevoir apres avoir lancé le code que "User" viens de donner que sur certaine donnée les extractions ne sont pas bonnes et elles concernent des lignes qui à l'origine sont du format :
    1) ex ci-après, les données commencent bien par "à partir de" puis un retour chariot et un autre retour chariot apres la chaine que je cherche pour finir par "jusqu'à la fin"
    à partir de :
    declareCurrentMovieFile.as : S:\4. \1. Information\K4V22S15H27\K4V28J88P94G123
    jusqu'à la fin

    avec la formule de "User" cela me donne :K4V22S15H27\K4V alors que cela devrait etre : K4V28J88P94G123
    2) une deuxième chaine :
    K4V44L23P28_Info33, première partie : "Définition de l'information"
    Avec la formule elle ressort comme :K4V44L23P28_Inf alors que ce type de chaine ne devrait pas être coupée mais donnée entièrement.


    Sinon à prioris le reste fonctionne nickel. Je continue de tester et je vous tiens au courant.
    Merci encore pour cette réponse, c'est déjà génial
    FRED

  19. #19
    Membre habitué Avatar de texas2607
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 344
    Points : 159
    Points
    159
    Par défaut
    Houps,
    Peut être difficile à comprendre le dernier post que j'ai mis.
    Pour résumer je doit sortir cette fameuse chaine qui est :
    - Commence toujours par : K4V
    - 15 caractères (certaines chaines dans le texte commencent également par K4V mais n'ont pas 15 caractères)
    - Format : K4V99X99X99X999
    Si autre alors sortir la totalité du texte

    Voilà j'espère avoir reussi à être plus "clair" dans mes explications. J'aurais du m'apercevoir de ces caractéristiques avant mais c'est en fouillant que....
    désolé.

  20. #20
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Dans ce cas, le plus simple serait de :

    1 Splitter la chaine en fonction des \
    2 Si aucune occurence alors :
    On retourne toute la chaine
    3 Si au moins une occurence,
    3.1 Pour chaque occurence, vérifier si commence par K4V et si la chaine fait 15 caractère on retourne l'occurence et on sort de la boucle
    3.2 Sinon, on retourne la chaine de départ

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Extraction de chaine de caractères
    Par asterix76-rouen dans le forum Langage
    Réponses: 4
    Dernier message: 20/12/2006, 23h17
  2. Extraction de chaine
    Par Daniel MOREAU dans le forum VBA Access
    Réponses: 6
    Dernier message: 14/02/2006, 09h01
  3. Requete avec extraction de chaine
    Par bestall666 dans le forum Access
    Réponses: 8
    Dernier message: 04/02/2006, 18h17
  4. [String]Extraction de chaîne
    Par sangei dans le forum Langage
    Réponses: 6
    Dernier message: 19/12/2005, 11h25
  5. [XSLT] Extraction de chaine de caractere
    Par Hugo001 dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 28/10/2004, 08h27

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