Recuperer une partie d'une chaine de caratère

Résolu
cs_miriame Messages postés 40 Date d'inscription jeudi 11 août 2005 Statut Membre Dernière intervention 18 novembre 2005 - 16 sept. 2005 à 17:10
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 21 sept. 2005 à 16:04
Au secour au secour

voici mon probleme je suis novice en prog et j'aimerai récuperer une partie d'une chaine de caractère:

Voici ma chaine initiale : tototoosjhlfh_dkh [Srcipt toto]
je veux récuperer la partie entre [] soit "Script toto"

Comment faire svp aider moi....

Merci d'avance

16 réponses

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
16 sept. 2005 à 17:47
Salut, s'il n'y a qu'UN "[" et qu'UN "]" dans ta chaine, tu peux faire comme ça :

Dim s As String
s = "tototoosjhlfh_dkh [Script toto]" 'ta chaine


MsgBox Mid(s, InStr(s, "[") + 1, InStrRev(s, "]") - (InStr(s, "[") + 1))

Ca doit t'afficher : "Script toto".

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
17 sept. 2005 à 14:53
salut
le code de CanisLupus est correct.
je montre juste une autre méthode détaillée (puisque "voici mon probleme je suis novice en prog ")


Private Sub Command1_Click()
Dim MaChaine As String
MaChaine = "tototoosjhlfh_dkh [Script toto]" 'ta chaîne

Dim Pos1 As Integer, Pos2 As Integer
Dim MaVal As String

'on cherche la position du 1er "["
'à partir de la 1ere position, dans MaChaine
Pos1 = InStr (1, MaChaine, "[") '<- va retourner 19

'on cherche la position du 1er "]"
'à partir de Pos1, dans MaChaine
'(à savoir que de toute manière, c'est le dernier caractère, donc inutile!!!)
Pos2 = InStr(Pos1, MaChaine, "]") '<- va retourner 31

'on récupère maintenant la chaîne entre ces 2 positions, moins la taille des crochets
MaVal = Mid(MaChaine, Pos1 + 1, Pos2 - Pos1 - 1) '<- va retourner "Script toto"

'de cette manière, MaChaine pourraît être "shdkfhgs[bonjour]skjedhfl us"
'"bonjour" serait également trouvé...

MsgBox MaVal, 32
End Sub


<SMALL> Coloration syntaxique automatique [AFCK]</SMALL>


@+
PCPT
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
17 sept. 2005 à 14:54
oups, VBA.....
pareil, sans la déclaration des variables
PCPT
0
cs_miriame Messages postés 40 Date d'inscription jeudi 11 août 2005 Statut Membre Dernière intervention 18 novembre 2005
19 sept. 2005 à 10:44
merci c'est vraiment sympas
0

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

Posez votre question
cs_miriame Messages postés 40 Date d'inscription jeudi 11 août 2005 Statut Membre Dernière intervention 18 novembre 2005
19 sept. 2005 à 11:14
Re bonjour

Je viens de m'apercevoir que par moment j'ai des chaine qui on cette forme la

aadfjdhjhf [toto] [2]

je veux récupere uniquement "toto" ce qu'il y a entre le prmeire groupe de []

merci de me répondre
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
19 sept. 2005 à 11:21
alors utilise ma p'tite procédure
PCPT
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
19 sept. 2005 à 13:36
Je confirme, dans ce cas le code de PCPT est meilleur.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
cs_miriame Messages postés 40 Date d'inscription jeudi 11 août 2005 Statut Membre Dernière intervention 18 novembre 2005
20 sept. 2005 à 15:18
Bonjour,

Pour commencer merci à tous pour votre ça m'apermi de résoudre mon probleme, c'est super sympas.

Je suis en ce moment sur une macro qui doit permettre de migrer des tests automatique QTP (QTP est une application d'automatisation de test) à partir de mon disque dur vers une appli (Quality Center) hebergée sur un serveur distant.

Je vous explique ce que fais ma macro, elle lit le chemin source du test à ouvrir dans l'application QTP et fais un save as du test dans quality center en lisant dans un fichier excel le chemin de destination. Donc il y une boucle qui dit pour chaque test repertorié dans le fichier excel il faut ouvrir ce test et l'enregistrer dans quality Center. Ma macro tourne bien mais au bout de quelques tests migrés elle plante et m'affiche un message d'erreur:
*******************************************
Run time error! *
*
Program: c:\Program\mercury\...\QTpro.exe *
*
R6025 *
*
- pure virtual function call *
*******************************************

puis quand je clique sur ok un second message s'affiche

*****************************************************************************
l'instruction à 0x08033f72 emploi l'adresse memoire ......la memoire ne peut* être "read" *
*****************************************************************************

J'ai compris qu'il s'agissait d'un probleme de memoire je me suis donc documenté à ce sujet et j'ai vui qu'il fallait faire des Set object = nothing mais l'erreur survient comme meme
Pourvez vous m'aider SVP!!!!!

PS: voici mon code:

********************************************************************************
Sub MigrationScriptLocalVersQC()
'
' MigrationScriptLocalVersQC Macro
' Macro recorded 25/08/2005 by x014424

Dim AppQTP
Dim Source
Dim Dest

'##############Ouvrir l'application QTP##################
Set AppQTP = CreateObject("QuickTest.Application")
AppQTP.Launch
AppQTP.Visible = True

'############### Connexion à Quality Center#############
AppQTP.TDConnection.Connect "http://rmfrdefa266/qcbin", _
"QUALIFICATION", "TRAINING", "felkhaldi", "01Dancing", False

'########Parcoure la feuille exel ouvre et enregistre les scripts dans QC################

Set Source = Range("CSource")
Set Dest = Range("CDestination")

For n = 1 To Source.Rows.Count
DoEvents

If Source.Cells(n, 1) <> "" And Dest.Cells(n, 1) <> "" Then

AppQTP.Open (Source.Cells(n, 1).Value)
AppQTP.Test.SaveAs Dest.Cells(n, 1).Value, False
AppQTP.Test.Close
Set AppQTP = Nothing
Set Source = Nothing
Set Dest = Nothing
Set AppQTP = CreateObject("QuickTest.Application")
Set Source = Range("CSource")
Set Dest = Range("CDestination")

End If

Next n

AppQTP.Quit
MsgBox ("Fin de la migration")

End Sub
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
20 sept. 2005 à 19:35
If Source.Cells(n, 1) <> "" And Dest.Cells(n, 1) <> "" Then

AppQTP.Open (Source.Cells(n, 1).Value)
AppQTP.Test.SaveAs Dest.Cells(n, 1).Value, False
AppQTP.Test.Close
Set AppQTP = Nothing
Set Source = Nothing
Set Dest = Nothing
Set AppQTP = CreateObject("QuickTest.Application")
Set Source = Range("CSource")
Set Dest = Range("CDestination")

End If
oulaaa non

tu décharges quand tu n'en as plus besoin
PCPT
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
20 sept. 2005 à 19:36
(donc juste avant ton msgbox)
0
cs_miriame Messages postés 40 Date d'inscription jeudi 11 août 2005 Statut Membre Dernière intervention 18 novembre 2005
21 sept. 2005 à 09:27
merci pcpt d'avoir répondu rapidement

je me doute qu'il faille décharger juste avant le msg box mais le run time error survient avant la fin de ma boucle à partir du 15eme voir 20 itération grand max, mais en mettant mes st object = nothing dans ma boucle j'ai l'impression que ça soulage et j'arrive à 35-40 itération avant le run time error....

Peut-etre que c'est ma facon de codé qui sollicite trop de memoire...???
Y'at-il un moyen d'optimiser ce code ???

PS: le run time error survient toujours au moment du Save As ???
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
21 sept. 2005 à 11:59
désolé, c'est du VBA.... pas trop mon domaine du tout^^
je me demande si c'est pas QTP qui sature...., et VBA qui bloque parce que process en attente...
PCPT
0
cs_miriame Messages postés 40 Date d'inscription jeudi 11 août 2005 Statut Membre Dernière intervention 18 novembre 2005
21 sept. 2005 à 12:44
Possible j'y ai pensé dans ce cas la tu sais comment faire pour dire:

fermer QTP toutes les 20 itérations par exemple....

Aussi le chemain de destination c'est une appli web donc un serveur réseau, peut être que ça joue aussi....
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
21 sept. 2005 à 12:52
as-tu la possibilité de faire tes appels manuellement?
c'est-à-dire ... appuyer sur un bouton pour générer une seule itération?

çà serait un bon test de voir si manuellement, il plante tout de même au bout de 20.
dans quel cas (si pas d'erreur) çà peut être un code à mettre dans un timer pour donner moins d'efforts. certes plus long, mais on a rien sans rien....
PCPT
0
cs_miriame Messages postés 40 Date d'inscription jeudi 11 août 2005 Statut Membre Dernière intervention 18 novembre 2005
21 sept. 2005 à 15:55
je ne vois le code à taper: ça serait un truc du style un msgbox dans ma boucle entre le open et le save as par exemple

Si non je test la migration d'un disque dur vers un disque dur et la je n'ai pas de run time error

peux tu me donner le code pour executer ma macro la nuit par exemple
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
21 sept. 2005 à 16:04
comment veux-tu que je te donne un code de macro, je clame haut et fort que je ne connais pas VBA...
c'est sur la logique que je peux peut-être t'aider.
ou sur des ressemblances de code VB6.....
donc macro, nada, désolé
PCPT
0
Rejoignez-nous