BiGOuF
Messages postés90Date d'inscriptionvendredi 13 décembre 2002StatutMembreDernière intervention12 décembre 2007
-
24 janv. 2007 à 02:07
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
25 janv. 2007 à 12:32
Bonjour,
je suis débutant en VB6, et je suis à la recherche d'une petite astuce.
J'aimerai remplir des champs automatiquement à la récupération de données collées dans une textbox.
En gros, les données seraient du genre
TEXTE1 (Texte Numéro )
TEXTE2 (Texte Numéro )
...
Il me faudrait donc que une fois que j'ai remplis la textbox, et que je valide sur un bouton, il vérifie que si dans la textbox, il y a "TEXTE1 (Texte ", il récupère la valeur du numéro (dont je ne connais pas la longueur, mais un len devrait etre assez facile pour moi je pense) et remplisse la textbox Text1, et ainsi de suite pour le 2 avec Text2 etc.
J'espère avoir été assez clair, j'ai peur d'avoir oublié des élèments ;)
En vours remerciant d'avance, et je suis à votre entière disponibilité.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 25 janv. 2007 à 01:11
re,
perso j'ai toujours pas compris ce que tu voulais extraire, juste que c'était dans le début..
bref, analyse, normalement c'est clair.
cherche bien avant de demander, ensuite si t'as des questions, aucun souci
' text1 contient tout ton texte en italique
Option Explicit
Private Sub Form_Load()
Dim sRes1 As String, sRes2 As String
' on ne va conserver que le début qui
t'intéresse
Dim sText As String
sText = Mid$(Text1.Text, 111, 898)
' on découpe chaque ligne
(le fameux SPLIT), ah si seulement j'avais une touche F1
!!!
Dim aArray() As String
aArray = Split(sText, vbCrLf)
Function GetNumber(ByVal sLine As String) As Long
Dim iPos As Integer
iPos = InStr(1, LCase$(sLine), "(niveau")
GetNumber = Mid(sLine, iPos + 7, Len(sLine) - iPos - 7)
End Function
Sub GetMetalCristal(ByVal sSrc As String, ByRef s1
As String, ByRef s2 As
String)
sSrc = Right$(sSrc, Len(sSrc) - 32)
s1 = Left$(sSrc, InStr(1, sSrc, "
"))
s2 = Right$(sSrc, Len(sSrc) - InStrRev(sSrc, " "))
End Sub
Function GetDuration(ByVal sSrc As String) As String
GetDuration = Trim$(Right$(sSrc, Len(sSrc) - InStrRev(sSrc, ":")))
Dim iPos As Integer
iPos = InStr(1, GetDuration, " ")
If iPos > 0 Then GetDuration = Left$(GetDuration, iPos - 1)
End Function
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 24 janv. 2007 à 07:55
Si "Texte" ne comporte pas d'espaces en son sein, il te suffit d'aller chercher la position de l'espace entre Texte et Numéro (par Instr) puis d'utiliser Mid pour extraire Numéro à partir de cette position + 1
Si "texte" comporte un espace en son sein, ou encore qu'aucun espace ne sépare "Texte" de "Numéro", il te suffit d'utiliser, en boucle sur la longueur totale, Mid et Isnumeric. Dès que tu trouves un chiffre, tu fais comme dit précédemment, avec sa position et Mid
Tu peux également faire comme ceci, toutefois, juste pour t'amuser :
Private Sub Command1_Click()
toto = "ce que tu veux 0227"
For i = 1 To Len(toto)
toto = Mid(toto, i)
If Val(toto) <> 0 Then
Exit For
End If
Next
MsgBox Trim(toto)
End Sub
Iu encore utiliser Instrev, "capter la position de l'espace, etc...
Bref : une foule de solutions existent, selon tes goûts...
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 24 janv. 2007 à 10:42
salut,
plus précisément pour ton exemple (et adapté puisque tu as plusieurs zones de texte) :
'poser une zone de texte nommée Text1
Option Explicit
'
Private Sub Form_Load()
Text1.Text = "TEXTE1 (Texte 5
)"
MsgBox GetNombre(Text1) 'retournera
5
Unload Me
End Sub
'
Function GetNombre(oTB As TextBox) As Long
Dim iPos As Integer
iPos = InStr(1, LCase$(oTB.Text), "(texte")
GetNombre = Mid(oTB.Text, iPos + 7, Len(oTB.Text) - iPos - 8)
End Function
BiGOuF
Messages postés90Date d'inscriptionvendredi 13 décembre 2002StatutMembreDernière intervention12 décembre 2007 24 janv. 2007 à 13:43
Et ben ... on voit que je suis débutant, il me reste du temps avant de manipuler toutes ces solutions ;)
En fait, pour être sincère, il s'agit d'un petit soft perso pour un jeu online (Ogame, pour définitivement passer pour un geek), et donc, j'aimerai remplis des champs automatiquement si je selectionne le contenu de toute la page.
Or, il apparait également des nombres dans la pages qui ne m'interessent pas.
Un exemple pour que ca soit concrêt.
Métal Cristal Deutérium Energie
249.980 99.142 70.876 20/15.707
Mine de métal (Niveau 31)
Principal fournisseur de matières premières pour la construction de structures portantes et de vaisseaux.
Ressources nécessaires : Métal: 17.257.595 Cristal: 4.314.398
Durée de construction :1j 17h 29m 4s
Construction possible dans : 39j 15h 44m 29s Construction
du niveau 32
Mine de cristal (Niveau 27 )
Fournisseur principal de ressources pour les installations électroniques et pour les alliages.
Ressources nécessaires : Métal: 15.576.890 Cristal: 7.788.445
Durée de construction :1j 20h 56m
Construction possible dans : 45j 4h 40m 52s Construction
du niveau 28
C'est ce genre de texte qui serait rentré dans la TextBox, et comme vous pouvez le constater, il y a pas mal de nombres qui m'importent peu.
Vous n’avez pas trouvé la réponse que vous recherchez ?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 24 janv. 2007 à 14:03
Un exemple et des explications , donc, pour que l'on te comprenne et t'aide bien une fois pour toutes (car ta nouvelle explication s'écarte quelque peu de ta 1ère demande) :
1) que vient faire là-dedans :
Métal Cristal Deutérium Energie
249.980 99.142 70.876 20/15.707
que tu n'utilises apparemment pas ailleurs ?
2) mets entre guillemets la totalité de ce que tu as dans ta textbos et mets en rougece que tu veux en extraire 3) explique le raisonnement logique de cette "extraction" . une telle extraction ne peut être faite par un ordinnateur (un ordinnateur ne réféchit pas... il exécute) que si on lui indique ce raisonnement, qu'il répètera bêtement...
BiGOuF
Messages postés90Date d'inscriptionvendredi 13 décembre 2002StatutMembreDernière intervention12 décembre 2007 24 janv. 2007 à 14:23
1) Alors en fait, pour mon soft, je veux selectionner l'entièreté de ce qu'il y a dans la page, et donc, celà en fait partie
2) Ce qu'il y aura dans la TextBox, c'est ce que j'ai mis en italique dans le message précédent, et ce que je dois récuperer pour mes champs, c'est ce qu'il y a en gras et rouge (c'est-à-dire le niveau de la mine).
donc, en gros voici ce qui sera collé dans la textBox
Métal Cristal Deutérium Energie
3.633 7.575 72.639 20/15.707
Mine de métal (Niveau 31 )
Principal fournisseur de matières premières pour la construction de structures portantes et de vaisseaux.
Ressources nécessaires : Métal: 17.257.595 Cristal: 4.314.398
Durée de construction :1j 17h 29m 4s
Construction possible dans : 40j 5h 31m 37s Construction
du niveau 32
Mine de cristal (Niveau 27 )
Fournisseur principal de ressources pour les installations électroniques et pour les alliages.
Ressources nécessaires : Métal: 15.576.890 Cristal: 7.788.445
Durée de construction :1j 20h 56m
Construction possible dans : 45j 17h 35m 52s Construction
du niveau 28
Synthétiseur de deutérium (Niveau 26 )
Extrait la petite quantité de deutérium de l'eau d'une planète.
Ressources nécessaires : Métal: 8.522.269 Cristal: 2.840.756
Durée de construction :21h 51m 7s
Construction possible dans : 19j 20h 42m 2s Construction
du niveau 27
Centrale électrique solaire (Niveau 26 )
Les centrales électriques solaires transforment les rayons de soleil en énergie. Presque tous les bâtiments ont besoin d'énergie pour fonctionner.
Ressources nécessaires : Métal: 2.840.756 Cristal: 1.136.302
Durée de construction :7h 38m 53s
Construction possible dans : 6j 15h 13m 21s Construction
du niveau 27
Centrale électrique de fusion
La centrale électrique de fusion produit de l'énergie en fusionnant 2 atomes d'hydrogène en un atome d'hélium
Ressources nécessaires : Métal: 900 Cristal: 360 Deutérium: 180
Durée de construction :8s
construire
Usine de robots (Niveau 12 )
Les usines de robots produisent des robots ouvriers qui servent à la construction de l'infrastructure planétaire. Chaque niveau augmente la vitesse de construction des différents bâtiments.
Ressources nécessaires : Métal: 1.638.400 Cristal: 491.520 Deutérium: 819.200
Durée de construction :4h 5m 45s
Construction possible dans : 8j 9h 49m 41s Construction
du niveau 13
Usine de nanites (Niveau 4 )
C'est le perfectionnement de la technologie de robots. Chaque niveau augmente la vitesse de construction des vaisseaux et des bâtiments.
Ressources nécessaires : Métal: 16.000.000 Cristal: 8.000.000 Deutérium: 1.600.000
Durée de construction :1j 22h 9m 13s
Construction possible dans : 46j 23h 26m 26s Construction
du niveau 5
Chantier spatial (Niveau 14 )
Le chantier spatial permet de construire les vaisseaux et les installations de défense.
Ressources nécessaires : Métal: 6.553.600 Cristal: 3.276.800 Deutérium: 1.638.400
Durée de construction :18h 54m 16s
Construction possible dans : 19j 5h 10m 8s Construction
du niveau 15
Hangar de métal (Niveau 7 )
Hangar pour minerai avant le traitement.
Ressources nécessaires : Métal: 256.000
Durée de construction :29m 32s
Construction possible dans : 14h 7m 21s Construction
du niveau 8
Hangar de cristal (Niveau 5 )
Hangar pour cristal avant le traitement.
Ressources nécessaires : Métal: 64.000 Cristal: 32.000
Durée de construction :11m 4s
Construction possible dans : 3h 26m 44s Construction
du niveau 6
Réservoir de deutérium (Niveau 1 )
Réservoirs géants pour le stockage de deutérium.
Ressources nécessaires : Métal: 4.000 Cristal: 4.000
Durée de construction :55s
Construction possible dans : 1m 14s Construction
du niveau 2
Laboratoire de recherche (Niveau 11 )
Le laboratoire de recherche est nécessaire pour développer de nouvelles technologies.
Ressources nécessaires : Métal: 409.600 Cristal: 819.200 Deutérium: 409.600
Durée de construction :2h 21m 47s
Construction possible dans : 4j 18h 29m 27s Construction
du niveau 12
Terraformeur (Niveau 4 )
Le terraformeur permet d'agrandir la surface utile des planètes
Ressources nécessaires : Cristal: 800.000 Deutérium: 1.600.000 Energie: 16.000
Durée de construction :1h 32m 18s
Construction
du niveau 5
Silo de missiles (Niveau 6 )
Les silos de missiles servent à stocker les missiles.
Ressources nécessaires : Métal: 1.280.000 Cristal: 1.280.000 Deutérium: 64.000
Durée de construction :4h 55m 23s
Construction possible dans : 7j 11h 29m 35s Construction
du niveau 7
Or, ce qui m'interesse n'est que ce qui est souligné (c'est-à-dire le niveau de metal, de cristal et de deutérium).
Donc, pour résumer.
1) Je séléctionne l'entièreté du contenu de la page dans mon browser
2) Je colle le contenu dans une TextBox
3) Je clique sur le bouton, ce qui va entrainer la recherche du niveau des 3 mines que je veux, et remplir les cases selon le bouton Radio (que je vais seulement insérer aprés, à coté de chaque planète,ainsi que la-dite TextBox) pour remplir les cases de la planète séléctionnée automatiquement au click.
cs_caramelmou
Messages postés56Date d'inscriptionjeudi 25 décembre 2003StatutMembreDernière intervention23 avril 20083 24 janv. 2007 à 22:47
Rigolo, j'avis fait un truc du genre pour recuperer les valeurs
d'analyse d'un vieil automate de biochimie:
Pour ton exemple, voici un code à adapter
Private Sub Command1_Click()
MsgBox search_val(26, "Cristal") ' affiche 2840756
MsgBox search_val(4, "Deutérium") ' affiche 1600000
End Sub
Function search_val(critere1 As Long, critere2 As String)
Dim c As String, strval As String, pos As Long
pos = InStr(Me.Text1, "Niveau " & critere1 & " )")
' j'ajoute le ' )' pour ne pas risquer de confondre niveau 6 et niveau 66
If pos > 0 Then
pos = InStr(pos, Me.Text1.Text, critere2)
If pos > 0 Then
pos = pos + Len(critere2)
c = Mid(Me.Text1, pos, 1)
' il faut eliminer les sepérateur de milliers americain (le point)
While (c >= "0" And c <= "9") Or c = "." Or c = " " Or c = ":"
If (c >= "0" And c <= "9") Then
strval = strval & c
End If
pos = pos + 1
c = Mid(Me.Text1, pos, 1)
Wend
End If
End If
search_val = Val(strval)
End Function
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 24 janv. 2007 à 22:58
Pas d'accord di tout !
Le mot niveau exisqte également ailleurs !
Ici, entre autres :
Construction possible dans : 40j 5h 31m 37s Construction
du niveau 32
A sa place, je ferais un split sur "(Niveau " ===>>> j'obtiendrais alors des chaines toto de type ##AAAAAAA... dont la valeur ( Val(toto), donc ) serait excatement ce que je cherche, à savoir ##
et voilà .
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 24 janv. 2007 à 23:08
Fais comme je t'ai dit (avec split)
Une précision toutefois : ignore la toute première chaine (elle te retournera 0) et ne sert à rien !
commence à l'index 1 du tableau obtenu par ton split .
C'est facile !
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 24 janv. 2007 à 23:10
Je n'aime par contre pas ta question relative à la façon d'utiliser command1 pour extraire le texte de ta Texbox !
Là, c'est trop enfantin, vois-tu ....!
BiGOuF
Messages postés90Date d'inscriptionvendredi 13 décembre 2002StatutMembreDernière intervention12 décembre 2007 24 janv. 2007 à 23:11
Sauf que je ne sais pas du tout comment marche ton système de split etc
N'aurais-tu pas un lien vers un exemple ? (je sais que ce n'est pas la meilleure facon d'apprendre, mais bon, peut-être que celà m'aidera)
cs_caramelmou
Messages postés56Date d'inscriptionjeudi 25 décembre 2003StatutMembreDernière intervention23 avril 20083 24 janv. 2007 à 23:26
Pour jmfmarques: c'est pour ça que je rajoute ' )' espace ET parenthese (a priori il n'y en a pas d'autre dans son exemple.
Pour bigouf:
dans une form : créer un textbox nomme textbox1 et un bouton de commande nomme Command1
Tu colle le code dans le module de ta form, tu lance, tu colle ton texte donné en exemple dans le textbox, tu clic sur le bouton command1
ça te renvoie les valeurs prises dans le texte (si j'ai bien compris ce que tu veux extraire) à toi d'adapter....
Pour jmfmarques: je n'ai pas utilise le split parce que je suis faineant : ce code est evidemment très basique mais il fonctionne sur l'exemple présenté : Il sera peut être plus facile à comprendre pour quelqu'un qui debute.
cs_caramelmou
Messages postés56Date d'inscriptionjeudi 25 décembre 2003StatutMembreDernière intervention23 avril 20083 24 janv. 2007 à 23:54
Tu est sur d'avoir collé l'integralite du texte en italique posté ici (c'est avec cet exemple que j'ai essayé)
Sinon pour le principe
la lignepos InStr(Me.Text1, "Niveau " & critere1 & " )") cherche la premiere occurence de "Niveau 26)" si critere1 26
à partir de la on cherche la premire occurence de critere2
"Cristal" par exemple
c'est la ligne
pos = InStr(pos, Me.Text1.Text, critere2)
on ajoute à pos la longueur du mot critere2, et à paritr de la on boucle en extrayant tout les chiffres en sautant les ":" "." et " " jusqu'à tomber sur un caracteres alphbetique.
Puis on renvoie la valeur.
Si tu obtient 0, execute en pas à pas pour essayer de comprendre ce qui se passe. (utilisation de la fonction mid, instr, etc...)
Je ne peux pas grand chose de plus pour toi...
cs_caramelmou
Messages postés56Date d'inscriptionjeudi 25 décembre 2003StatutMembreDernière intervention23 avril 20083 25 janv. 2007 à 00:28
Pardon à jmfmarques, il avait raison. il y a 2 "(niveau 26 )", un seul cas mais c'est un de trop.
j'avoue que l'analyse de ce genre de texte me laisse un peu... perplexe
moi qui pensais avoir tout lu...
donc il faut que critere1 soit une chaine
à changer
search_val(critere1 As String, critere2 As String)
puis pour la premiere recherche
pos = InStr(Me.Text1, critere1 )
et critere1 devient nom plus 26 mais "deutérium (Niveau 26 )"
Mais ça n'est pas pour ça que le code précédent te renvoyait 0, donc à toi de chercher...
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 25 janv. 2007 à 01:17
ps : j'ai pas fait de boucle pour les 3 catégorie pour mieux y voir... sinon c'est à faire, évidemment.
çà donnerait çà (pour le retour en zone texte) :
Dim i As Integer
For i = 0 To 2
Text1.Text = Text1.Text & "================" & vbCrLf
If i = 0 Then
Text1.Text = Text1.Text & "MINE DE MéTAL" & vbCrLf
ElseIf i = 1 Then
Text1.Text = Text1.Text & "MINE DE CRISTAL" & vbCrLf
Else
Text1.Text = Text1.Text & "SYNT DE DEUTéRIUM" & vbCrLf
End If
Text1.Text = Text1.Text & "================" & vbCrLf
Text1.Text = Text1.Text & "NIVEAU = " & GetNumber(aArray(i * 6)) & vbCrLf
Call GetMetalCristal(aArray(i * 6 + 2), sRes1, sRes2)
Text1.Text = Text1.Text & "RESS MéTAL = " & sRes1 & vbCrLf
Text1.Text = Text1.Text & "RESS CRISTAL = " & sRes2 & vbCrLf
Text1.Text = Text1.Text & "DURéE = " & GetDuration(aArray(i * 6 + 3)) & vbCrLf
Text1.Text = Text1.Text & "...DANS = " & GetDuration(aArray(i * 6 + 4)) & vbCrLf
Text1.Text = Text1.Text & "CONST #° = " & Right$(aArray(i * 6 + 5), 2) & vbCrLf & vbCrLf & vbCrLf
Next i
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
BiGOuF
Messages postés90Date d'inscriptionvendredi 13 décembre 2002StatutMembreDernière intervention12 décembre 2007 25 janv. 2007 à 01:57
Je n'ai pas su aller voir le MSDN car je n'ai aps le CD en ma possession actuellement, auquel cas j'aurai cherché dedans, celà va de sois.
Lors de l'execution de ton premier code, j'ai un type incompatible pour cette portion de code
Function GetNumber(ByVal sLine As String) As Long
Dim iPos As Integer
iPos = InStr(1, LCase$(sLine), "(niveau")
GetNumber = Mid(sLine, iPos + 7, Len(sLine) - iPos - 7)
End Function
<hr size="2" width="100%" />"perso j'ai toujours pas compris ce que tu voulais extraire, juste que c'était dans le début.."
Au lieu de remplir les champs à la main, je souhaiterai faire une selection de toute la page, la coller dans la textbox, et qu'au clic sur un bouton, le programme recherche la phrase "Mine de métal ( Niveau " et récupère la prochaine chaine de caractère (qui sera le niveau, mais dont j'ignore la longueur) pour placer ce niveau dans une variable et également remplir la textbox "Metal" de la planète selectionnée, et même chose pour le cristal et le deutèrium (une fois que j'aurais rajouté des Options, je vérifierai lequel est coché pour remplir les 3 cases en rapport à la planète.)
Je ne vois pas trop en quoi tu ne vois pas où je veux en venir :s
Au pire, si je ne suis toujours pas assez clair, je ferrai des Print Screen pour montrer où je veux vraiment en venir.