Sélectionner Texte, compris entre deux chaines de caractères. URGENT !!!

z980x Messages postés 897 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 26 juillet 2007 - 26 juin 2004 à 15:36
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 - 26 juin 2004 à 18:52
Bonjour à tous !

Si vous pouviez m'aider rapidement ca serait cool parce que c'est assez urgent !!!

Voici mon problème:

J'ai un fichier texte avec des chiffres et des lettres.

Certaines fois on a:

@120 ou @100 Enfin des @ suivis de 3 chiffres FIXES (je veux dire que ce n'est pas TOUS les nombres, mais des suites précises...)

Je voudrais que:

Quand le prog trouve dans la textbox une suite de nombre comme ca, il le sélectionne jusqu'au prochain @ suivi de trois chiffres.

La sélection, j'aimerais aussi la récupérer dans une listbox.

Merci à tous !

Merci !

10 réponses

cs_RDX Messages postés 117 Date d'inscription samedi 26 juin 2004 Statut Membre Dernière intervention 27 août 2005
26 juin 2004 à 16:24
salut!

deja je penses que tu devrait te servir de la fonction
instr(chaine, caractere)
Elle permet de renvoyer la position du 1er élément dans une chaîne, ex :

instr("test@233@500@004","@") = 5

tu peux aussi t'en servir pour trouver des expressions entière :

instr("test@233@500@004","@500") = 9

en gros avec ca tu devrais y arriver

----------------------------------------
dim position as long 'position du prochain @
dim strTemp as string 'string temporaire
dim intTemp as integer 'temporaire pour la valeur a récuperer

strtemp=text1.text
'si c'est bien text1 qu'elle s'appelle...

position=1
do
position=instr(mid(strtemp,position+1,len(strtemp)),"@")

if position=0 then exit do
'si ca renvoie 0 ca veut dir que ya plus d'@ dans le reste de la chaine
intTemp=cint(mid(strtemp,position+1,3))

list1.additem intTemp
'g mis list1 mais tu changera le nom si c pas ca

loop
----------------------------------------

bon voila je l'ai pas tésté, mais ca devrait aller.
Ya peut etre plus simple aussi mais alors je connais pas.
0
z980x Messages postés 897 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 26 juillet 2007 2
26 juin 2004 à 16:44
Tout d'abord, merci de ton aide, mais:

J'obtiens une erreur:
"Type incompatible", et il me sélectionne cette ligne :

intTemp = CInt(Mid(strTemp, position + 1, 3))

Tu peux me dire pourquoi?
0
cs_RDX Messages postés 117 Date d'inscription samedi 26 juin 2004 Statut Membre Dernière intervention 27 août 2005
26 juin 2004 à 16:56
Dim position As Long 'position du prochain @
Dim strTemp As String 'string temporaire
Dim intTemp As Integer 'temporaire pour la valeur a récuperer

strTemp = Text1.Text
'si c'est bien text1 qu'elle s'appelle...

position = 0
Do
position = position + InStr(Mid(strTemp, position + 1, Len(strTemp)), "@")

'si ca renvoie 0 ca veut dir que ya plus d'@ dans le reste de la chaine
intTemp = CInt(Mid(strTemp, position + 1, 3))

List1.AddItem intTemp
'g mis list1 mais tu changera le nom si c pas ca

If InStr(Mid(strTemp, position + 1, Len(strTemp)), "@") = 0 Then Exit Do

Loop

g tésté cette fois ca marche, tu recupère les 3 chiffres deriere le @.
0
z980x Messages postés 897 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 26 juillet 2007 2
26 juin 2004 à 16:59
Ouais, mais moi je veux pas récupérer les chiffres après le @.

Je veux récupérer TOUT le texte compris entre deux @### (Les ### étant des chiffres définis, par exemple 120, 110 etc...) MAIS PAS TOUS ! Par exemple, avec ton code, j'obtiens des trucs 999, mais en fait, j'en veux pas de ceux la...

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_RDX Messages postés 117 Date d'inscription samedi 26 juin 2004 Statut Membre Dernière intervention 27 août 2005
26 juin 2004 à 17:12
Dim position1 As Long 'position du prochain @
Dim position2 As Long 'position du prochain @
Dim strTemp As String 'string temporaire
Dim strTemp2 As String 'temporaire pour la valeur a récuperer

strTemp = Text1.Text
'si c'est bien text1 qu'elle s'appelle...

position1 = InStr(strTemp, "@")
Do
position2 = position1 + InStr(Mid(strTemp, position1 + 1, Len(strTemp)), "@")

'si ca renvoie 0 ca veut dir que ya plus d'@ dans le reste de la chaine
strTemp2 = Mid(strTemp, position1 + 4, position2 - position1 - 4)

position1 = position2

List1.AddItem strTemp2
'g mis list1 mais tu changera le nom si c pas ca

Loop Until InStr(Mid(strTemp, position2 + 1, Len(strTemp)), "@") = 0

ca insere exclusivement les chaine entre 2 @, sans mettre les nombre, c'est bien ca ke tu veux?
0
z980x Messages postés 897 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 26 juillet 2007 2
26 juin 2004 à 17:17
Je voulais aussi les @ et les numéros, mais c'eszt bon, je l'ai fait tout seul.

En tous cas, merci beaucoup pour ton aide efficace et rapide, c'est bien ce que je voulais !
0
cs_RDX Messages postés 117 Date d'inscription samedi 26 juin 2004 Statut Membre Dernière intervention 27 août 2005
26 juin 2004 à 17:23
si tu as un truc du genre ca :

@512grut1@256grut2 @128grut5

ca marche.

si il y a plus d'@, il prend le texte de la derinere position jusqu'a la fin de la chaine. (tout ca ca depend si tu veux caser ton @*** avant ou après la selection. ca c'est le code pour quand il est placé avant la selection.

Ouf.....Voila

---------------------------------------
Dim position1 As Long 'position du prochain @
Dim position2 As Long 'position du prochain @
Dim strTemp As String 'string temporaire
Dim strTemp2 As String 'temporaire pour la valeur a récuperer

strTemp = Text1.Text
'si c'est bien text1 qu'elle s'appelle...

position1 = InStr(strTemp, "@")

Do
position2 = position1 + InStr(Mid(strTemp, position1 + 1, Len(strTemp)), "@")

If position1 = position2 Then
position2 = Len(strTemp)
strTemp2 = Mid(strTemp, position1, position2 - position1 + 1)
List1.AddItem strTemp2
Exit Do
End If

'si ca renvoie 0 ca veut dir que ya plus d'@ dans le reste de la chaine
strTemp2 = Mid(strTemp, position1, position2 - position1)

position1 = position2

List1.AddItem strTemp2
'g mis list1 mais tu changera le nom si c pas ca

Loop
---------------------------------------
0
z980x Messages postés 897 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 26 juillet 2007 2
26 juin 2004 à 17:25
Dans ma listbox, j'ai un truc comme ca:

@07002250604
@08003220604
@15004AS
@10005

C'est bien ce que je voulais, donc c'est parfait!

(Apres je n'ai plus qu'a faire le tri de ce que je veux et de ce que je veux pas)

Encore une fois, je te remercie !
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
26 juin 2004 à 17:57
je n'ai pas tout suivis, mais une eventuelle façon de faire :

le "Split"
c'est simple et court de coding

dim Splitage() as string

splitage() = split(text1.text,"@")

for i = lbound(splitage()) to ubound(splitage())
if splitage(i) <> "999" then
splitage(i) = "@" & splitage(i)
list1.additem = splitage(i)'facultatif pour les tests
end if
next i


bonne prog
liquide
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
26 juin 2004 à 18:52
Tu as raison liquide,

C dingue ça, que la fonction split est carrément ignorée la plupart du temps. C pourtant bien pratique et plus rapide que de faire des manipulations de chaines à la façon des anciens basics.

Faudrait faire une section tuto sur le site pour toutes ces fonctions de base. Ca laisserait de la place dans le forum pour des trucs plus poussés.

Cordialement

CanisLupus
0