2008-10-01 8 views
1

J'ai une colonne qui contient des chaînes. Les chaînes dans cette colonne ressemblent à ceci:Analyse du texte dans MS Access

FirstString/SecondString/ThirdString

J'ai besoin pour analyser ce donc j'ai deux valeurs:

Valeur 1: FirstString/SecondString Valeur 2: ThirdString

je pourrais avoir des chaînes plus longues en fait, mais je toujours nee il comme seperated [chaine1/chaine2/string3/...] [chaineN]

ce que je dois finir avec est la suivante:

Column1: [chaine1/chaine2/string3/etc ....] Colonne2: [chaineN]

Je ne peux pas trouver de toute façon dans l'accès à le faire. Aucune suggestion? Ai-je besoin d'expressions régulières? Si oui, y a-t-il un moyen de le faire dans le concepteur de requêtes?

Mise à jour: Les deux expressions me donnent cette erreur: "L'expression que vous avez entrée contient une syntaxe invalide, ou vous devez placer vos données de texte entre guillemets."

expr1: Left([Property] , InStrRev([Property] , "/") - 1), Mid([Property] , InStrRev([Property] , "/") + 1) 

expr1: mid([Property] , 1, instr([Property] , "/", -1)) , mid([Property] , instr([Property] , "/", -1)+1, length([Property])) 

Répondre

1

Dans une requête, utilisez les deux expressions comme colonnes suivantes:

Left(col, InStrRev(col, "/") - 1), Mid(col, InStrRev(col, "/") + 1) 

col est votre colonne.

Si dans VBA, utilisez les touches suivantes:

last_index= InStrRev(your_string, "/") 

first_part= Left$(your_string, last_index - 1) 
last_part= Mid$(your_string, last_index + 1) 
+0

Cela me donne une erreur avec des citations. Est-ce que "/" est une sorte de charater réservé? – Micah

+0

Où tapez-vous les colonnes et "/" vous donne une erreur? Veuillez mettre à jour votre question avec la déclaration SQL complète, afin de vous donner une réponse plus complète. – tzot

0

milieu (col, 1, instr (col, "/", -1)), le milieu (col, instr (col, "/", -1) 1, la longueur (col))

+0

Pouvez-vous me donner une idée de ce que vous faites? à quoi fait référence "col"? – Micah

+0

col est censé être votre colonne. – tzot

+0

SubClassName: mid ([Propriété], 1, instr ([Propriété], "/", -1)), mid ([Propriété], instr ([Propriété], "/", -1) +1, longueur ([Propriété])) indique qu'il contient des données invalides ou doit fermer le texte entre guillemets. – Micah

0

Est-il possible que vous pouvez fixer la structure de données sous-jacentes pour être correctement normalisée de sorte que vous pouvez éviter le problème en premier lieu? Avec la récupération des données vient un hôte entier ou des problèmes avec le maintenir avec précision, et cela serait amélioré si vous ne stockez pas plusieurs valeurs dans un seul champ.

0

Je sais que vous essayez de le faire dans une requête, donc les fonctions de chaîne SQL sont probablement votre meilleur pari.

Cependant, il est à noter qu'il existe un objet COM d'expression régulière accessible depuis VBA. Ajoutez simplement une référence à la bibliothèque Microsoft VBScript Regular Expressions dans votre code de macro.

Ensuite, vous pouvez faire des choses comme ça

Dim szLine As String 
Dim regex As New RegExp 
Dim colregmatch As MatchCollection 

With regex 
    .MultiLine = False 
    .Global = True 
    .IgnoreCase = False 
End With 

szLine = "FirstString/SecondString/ThirdString" 

regex.Pattern = "^(.*?\/.*?)/(.*?)$" 
Set colregmatch = regex.Execute(szLine) 

'FirstString/SecondString 
Debug.Print colregmatch.Item(0).submatches.Item(0) 
'ThirdString 
Debug.Print colregmatch.Item(0).submatches.Item(1)