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. #21
    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
    Citation Envoyé par Tofalu
    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
    oui mais dans le cas d'une chaine comme
    Citation Envoyé par texas2607
    K4V44L23P28_Info33, première partie : "Définition de l'information"
    à partir de K4V il y à plus de 15 caractères mais il faut l'extraire entièrement cette chaine et pas seulement les 15 caractères.

  2. #22
    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,

    ton cas n°2

    tu veux dire que à chaque fois que ta chaine commence par "K4V" tu la ressort entièrement
    (comme dans ton cas n°2)

    @+

  3. #23
    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,
    Citation Envoyé par User
    tu veux dire que à chaque fois que ta chaine commence par "K4V" tu la ressort entièrement
    Non, mais dans ce cas la, la chaine commence bien par K4V,
    K4V44L23P28_Info33,
    mais elle n'est pas complète car elle fait 11 caractères (K4V44L23P28) donc c'est un cas ou je dois ressortir la totalité du "texte" c'est à dire :
    K4V44L23P28_Info33, première partie : "Définition de l'information"

    Citation Envoyé par texas
    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

    Par contre je suis en train de tester InStrRev qui est idem à InStr mais il débute en fin de chaine.
    j'ai mis le code suivant :

    Public Function extract_chaine(Occ As String)
    Dim d As Integer

    d = InStrRev(Occ, "L1M")

    If d <> 0 Then
    If Mid(Occ, d, 15) Like "?#?##?##?##?###" Then
    extract_chaine = Mid(Occ, d, 15)
    Else
    extract_chaine = Occ
    End If
    Else
    extract_chaine = Occ
    End If

    End Function

    A prioris cela va pas mal car la recherche se fait mais à partir de la fin de la chaine et le plus souvent c'est la que se situe celle que je recherche et de plus cela evite l'erreur de tomber d'abord sur une chaine commencant par K4V mais qui n'est pas conforme,
    Je continue de tester avant de mettre en résolu.
    @+

  4. #24
    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
    et dans ton 1er cas:

    à partir de :
    declareCurrentMovieFile.as : S:\4. \1. Information\K4V22S15H27\K4V28J88P94G123
    jusqu'à la fin
    est-ce que c'est toujours la 2ème chaine commencant par "K4V" que tu ressort ou peut-il y avoir 3, ou 4 chaines commencant par "K4V" et tu dois ressortir la dernière ?


    @+

  5. #25
    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
    est-ce que c'est toujours la 2ème chaine commencant par "K4V" que tu ressort ou peut-il y avoir 3, ou 4 chaines commencant par "K4V" et tu dois ressortir la dernière ?
    Il peut y en avoir plusieurs mais 1 seule dispose de 15 caractères sous la forme que je mentionnais plus haut. Effectivement dans mon exemple elle se situe à la fin mais ce n'est pas toujours le cas. Et comme je disais tout à l'heure avec la fonction InStrRev cela ne m'a pas résolu le problème mais seulement inversé : Des chaines qui étaient "mal" sorties avec InStr le sont correctement avec InStrRev et inversement.
    Bref, toujours la M......

  6. #26
    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
    écoute le mieux c'est que tu fasse 1 tableau avec 2 colonnes, 1 colonne pour [ta chaine de départ] et 1 colonne pour [la chaine à extraire]...

    ce tableau contiendra 1 maximum de valeurs et avec tous les cas possibles..

    tu peux aussi lier 1 image d'1 table Access (par exemple) contenant tous les cas possibles.

    Après on pourra te dire si c'est possible ou pas

    @+

  7. #27
    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
    Ok, je prépare ca pour demain car ce soir j'en ai un peu de partout.
    En tout cas merci pour tout.
    Bonne soirée
    Fred

  8. #28
    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
    Pour moi ma solution était bonne

    K4V99X99X99X999 retourne K4V99X99X99X999
    K4V99X99X99_Info retourne K4V99X99X99_Info
    K4V99X99X99X999\test retourne K4V99X99X99X999
    K4V99X99X99X999\K4V retourne K4V99X99X99X999
    K4V\K4V99X99X99X999 retourne K4V99X99X99X999
    K4V\K4V retourne K4V\K4V

    Evidement a\K4V99X99X99X_aaa\b retourne K4V99X99X99X_aaa puisque le délimiteur de fin de chaine est \. Si c'est pas le cas, y aurait fallu être plus précis dés le début !

  9. #29
    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,
    Désolé Tofalu j'ai effectivement manqué de précision au départ mais je me suis apercu de pas mal de chose au fur et à mesure des posts.

    Concernant la demande de USER, voici un résumé des sources actuelles dont je dispose, sachant que cette liste n'est pas fermée,
    J'ai mis en bleu ce que je désirerais extraire. Et encore pour Tofalu, je viens de m'apercevoir (N°13 et 18) qu'il y a encore eu un manque de précision car là ou la chaine apparait plus de 1 fois il me faudrais tout le texte.

    1) 1M03S01A03\K4V03S01A03E010
    2) Clic sur la panneau "Périmètre"
    3) à partir de :
    declareCurrentMovieFile.as : S:\4. Conduite\1. Livraison\K4V03S01A03\K4V03S01A03E018
    jusqu'à la fin

    4) page d'information K4V92E44G56 sur interface (La totalité car chaine non conforme elle n'a pas 15 caractères)
    5) Dans toutes les pages de contenus où l'on trouve des boites infos
    6) File : S:\4. Conduite\1. Formation\060703\K4V05S01A03\K4V05S01A03E015
    7) File : S:\4. Conduite\1. Formation\060703\ROOT\root_modSeqActE000
    8) File : S:\4. Conduite\1. Formation\060710\K4V_v0.840\v0.840 [delivered 10-07-2006 00h15]\START\start_SeqActF098
    9) K4V03S01A03_Info 50 huitième page
    10) K4V03S01A03_info30
    11) K4V03S01A03_info30 et K4V03S01A03_info31
    12) K4V03S01A03E008
    13) K4V03S01A03E012 à K4V03S01A03E024 (2X la chaine et donc il me faudrais tout le texte )
    14) K4V03S01A03E018, première partie
    15) N/A
    16) page de sommaire : K4V03S01A03E003
    17) page information K4V03S01A03_info21
    18) Passage de K4V03S01A03E020 première partie à K4V03S01A03E020 deuxième partie.
    + inactivité du bouton 'Avancer'
    (Idem N°13, toute la chaine à sortir)
    19)page information K4V03S01A03R654 pour info revoir 21
    20) Toutes les pages de contenu

    Ouf, je crois que tous les cas sont présents.
    FRED

  10. #30
    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
    A priori c'est trop complexe:

    cela dit pour distinguer le 10) du 14) est-ce que tu peux dire que la chaine extraite du 14) commence par "K4V" et le 15ème caractère est 1 chiffre , contrairement au 10) ou c'est une lettre ???

    @+

  11. #31
    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
    Le 10 n'est pas conforme car il n'est pas sous la forme :
    X9X99X99X99X999
    alors que le 14 lui il y est.

    A priori c'est trop complexe
    Ca je commence à y croire. Mais je ne perds pas espoir

  12. #32
    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
    Resalut,

    essaie ca dans 1 module:

    une fonction pour tester si c'est une chaine recherchée:

    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
    Public Function test_format(Occ As String) As Boolean
    Dim i As Integer
    Dim str As String
     
    str = "K4V99X99X99X999"
     
       If Len(Occ) = 15 Then
       i = 4
     
       For i = 4 To 15
     
          If Mid(str, i, 1) = "9" Then
     
             If Not (IsNumeric(Mid(Occ, i, 1))) Then
             test_format = False
             Exit Function
             End If
     
          Else
     
             If Asc(Mid(Occ, i, 1)) < 65 Or Asc(Mid(Occ, i, 1)) > 90 Then
             test_format = False
             Exit Function
             End If
     
          End If
     
       Next i
     
       Else
       test_format = False
       Exit Function
       End If
     
    test_format = True
     
    End Function

    et la fonction d'extraction de la chaine:

    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
    Public Function extract_chaine(Occ As String)
    Dim i1 As Integer, i2 As Integer
     
    i1 = InStr(1, Occ, "K4V")
     
       If i1 = 0 Then
       extract_chaine = Occ
       Else
       i2 = InStr(i1 + 1, Occ, "K4V")
     
          If i2 = 0 Then
     
             If test_format(Mid(Occ, i1, 15)) Then
             extract_chaine = Mid(Occ, i1, 15)
             Else
             extract_chaine = Occ
             End If
     
          Else
     
             If test_format(Mid(Occ, i1, 15)) Then
     
                If test_format(Mid(Occ, i2, 15)) Then
                extract_chaine = Occ
                Else
                extract_chaine = Mid(Occ, i1, 15)
                End If
     
             Else
     
                If test_format(Mid(Occ, i2, 15)) Then
                extract_chaine = Mid(Occ, i2, 15)
                Else
                extract_chaine = Occ
                End If
     
             End If
     
          End If
     
       End If
     
    End Function
    @+

  13. #33
    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,
    Je vais tester ca de suite. Par contre juste une question sur cette partie du code :
    Dim str As String

    str = "K4V99X99X99X999"

    If Len(Occ) = 15 Then
    i = 4

    For i = 4 To 15

    If Mid(str, i, 1) = "9" Then
    Comme tu déclare str="K4V99X99X99X999" la condition if sera toujours vrai, non ? car str sera toujours égal à K4V99X99X99X999. Si c'étais par rapport à mon dernier post j'avais marqué X9X99X99X99X999 simplement pour signaler le format de la chaine. Il est toujours :
    L1M chiffre chiffre lettre chiffre chiffre lettre chiffre chiffre lettre chiffre chiffre chiffre

    Mais j'ai peut être tord en disant ca car je n'ai pas encore étudié ton code en profondeur aussi ce post n'a peut être aucun intérêt.
    Bref d'avance merci et je test.
    @+

  14. #34
    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
    Oups ,
    Désolé pour mon dernier post mais à première vu cela marche nickel.
    Un grand à tous pour votre aide et en particulier pour User.

    Encore merci.
    Amicalement
    Fred

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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