oui mais dans le cas d'une chaine commeEnvoyé par Tofalu
à 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.Envoyé par texas2607
oui mais dans le cas d'une chaine commeEnvoyé par Tofalu
à 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.Envoyé par texas2607
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)
@+
re,
Non, mais dans ce cas la, la chaine commence bien par K4V,Envoyé par User
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"
Envoyé par texas
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.
@+
et dans ton 1er cas:
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 ?à partir de :
declareCurrentMovieFile.as : S:\4. \1. Information\K4V22S15H27\K4V28J88P94G123
jusqu'à la fin
@+
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.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 ?
Bref, toujours la M......![]()
é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
@+![]()
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
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 !
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
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 ???
@+
Le 10 n'est pas conforme car il n'est pas sous la forme :
X9X99X99X99X999
alors que le 14 lui il y est.
Ca je commence à y croire. Mais je ne perds pas espoirA priori c'est trop complexe![]()
![]()
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
Salut,
Je vais tester ca de suite. Par contre juste une question sur cette partie du code :
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 :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
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.
@+
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager