récupérer le chiffre

Le
greg
Bonjour,

comment je peut récupérer le chiffre 142 et le 9 âpres le point merci
exemple
SCALE: 1//142.9g/
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
LE TROLL
Le #17927701
Bonjour,

dim a as string
dim b as string
dim c as string
dim d as string
dim i as double
a = mid("SCALE: 1//142.9g/", 11,3)
' a = "142"

a = mid("SCALE: 1//142.9g/", 14,1)
' b = ","
c = mid("SCALE: 1//142.9g/", 15,1)
' b = "9"
d = a & b & c & d
' d = "142,9"
i = cdbl(d)
' i = 142,9

Est-ce ça que tu voulais ???

------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"greg" 49285e17$0$28670$
| Bonjour,
|
| comment je peut récupérer le chiffre 142 et le 9 âpres le point merci
| exemple
| SCALE: 1//142.9g/
|
|
PH
Le #17927691
LE TROLL a écrit :
Bonjour,

dim a as string
dim b as string
dim c as string
dim d as string
dim i as double
a = mid("SCALE: 1//142.9g/", 11,3)
' a = "142"

a = mid("SCALE: 1//142.9g/", 14,1)
' b = ","
c = mid("SCALE: 1//142.9g/", 15,1)
' b = "9"
d = a & b & c & d
' d = "142,9"
i = cdbl(d)
' i = 142,9

Est-ce ça que tu voulais ???

------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"greg" 49285e17$0$28670$
| Bonjour,
|
| comment je peut récupérer le chiffre 142 et le 9 âpres le point merci
| exemple
| SCALE: 1//142.9g/
|
|




ou encore

iÍbl(replace(mid$("SCALE: 1//142.9g/",11,5),".",",")

'soit
' mid$("SCALE: 1//142.9g/",11,5) renvoie "142.9"
'replace("142.9",".",",") renvoie "142,9"
'Cdbl("142,9") renvoie 142.9
PH
Le #17927681
PH a écrit :
LE TROLL a écrit :
Bonjour,

dim a as string
dim b as string
dim c as string
dim d as string
dim i as double
a = mid("SCALE: 1//142.9g/", 11,3)
' a = "142"

a = mid("SCALE: 1//142.9g/", 14,1)
' b = ","
c = mid("SCALE: 1//142.9g/", 15,1)
' b = "9"
d = a & b & c & d
' d = "142,9"
i = cdbl(d)
' i = 142,9

Est-ce ça que tu voulais ???

------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------

"greg" 49285e17$0$28670$
| Bonjour,
|
| comment je peut récupérer le chiffre 142 et le 9 âpres le point merci
| exemple
| SCALE: 1//142.9g/
|
|



ou encore

iÍbl(replace(mid$("SCALE: 1//142.9g/",11,5),".",",")

'soit
' mid$("SCALE: 1//142.9g/",11,5) renvoie "142.9"
'replace("142.9",".",",") renvoie "142,9"
'Cdbl("142,9") renvoie 142.9


parti trop vite, il manque une paraenthèse.

iÍbl(replace(mid$("SCALE: 1//142.9g/",11,5),".",","))
greg
Le #17927671
merci pour ton aide,
le problème c'est que le 142,9 peut être 7,3 ou 70,4 ou 1100,7 alors avec
mid je ne sais pas si peut être efficace


"LE TROLL"
Bonjour,

dim a as string
dim b as string
dim c as string
dim d as string
dim i as double
a = mid("SCALE: 1//142.9g/", 11,3)
' a = "142"

a = mid("SCALE: 1//142.9g/", 14,1)
' b = ","
c = mid("SCALE: 1//142.9g/", 15,1)
' b = "9"
d = a & b & c & d
' d = "142,9"
i = cdbl(d)
' i = 142,9

Est-ce ça que tu voulais ???

------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"greg" 49285e17$0$28670$
| Bonjour,
|
| comment je peut récupérer le chiffre 142 et le 9 âpres le point merci
| exemple
| SCALE: 1//142.9g/
|
|




bahn po
Le #17928221
greg a exprimé avec précision :
merci pour ton aide,
le problème c'est que le 142,9 peut être 7,3 ou 70,4 ou 1100,7 alors avec
mid je ne sais pas si peut être efficace




Les solutions ne manquent pas. Je propose,

txt = "SCALE: 1//142.9g/"
txt = Replace(txt, "SCALE: 1", "")
txt = Replace(txt, "//", "")
txt = Replace(txt, "/", "")
txt = Replace(txt, "g", "")

Dim final As Variant

final = Split(txt, ".")

Debug.Print final(0) & " avec " & final(1)



Si le point peut parfois être une virgule. Tu peux
alors ajouter

txt = Replace(txt, ".", ",")
Jean-marc
Le #17930481
greg wrote:
Bonjour,

comment je peut récupérer le chiffre 142 et le 9 âpres le point merci
exemple
SCALE: 1//142.9g/



Hello,

Ce dont tu as besoin, ce sont des fonctions de manipulations
de chaines de caractères.

Tu trouveras dans la FAQ 2 articles consacrés au sujet (et qui
contiennent la solution à ton problème):
http://faq.vb.free.fr/index.php?question8
et
http://faq.vb.free.fr/index.php?question7

Voir en particulier la description de Instr() ...


Pour en revenir à ton cas, ce qu'il te faut, c'est localiser
le "." puis lire les digits à droite et à gauche. On réalise
ça avec la fonction Instr (cf les 2 articles ci-dessus).

Je t'ai fait une petite fonction qui résoud ton cas :

Public Function GetAndSplit(ByVal s As String, _
ByVal sep As String, _
ByRef first As String, _
ByRef last As String) As Boolean
Dim p As Long
Dim saveP As Long
Dim ret As Boolean
Dim c As String


p = InStr(s, sep)
saveP = p
If p <> 1 Then
' read left digits
p = p - 1
c = Mid$(s, p, 1)
Do While p >= 1
If isDigit(c) Then
first = c & first
Else
Exit Do
End If
p = p - 1
c = Mid$(s, p, 1)
Loop
' now read right digits
p = saveP
p = p + 1
c = Mid$(s, p, 1)
Do While p <= Len(s)
If isDigit(c) Then
last = last & c
Else
Exit Do
End If
p = p + 1
c = Mid$(s, p, 1)
Loop
If (first <> "") And (last <> "") Then
ret = True
End If
End If

GetAndSplit = ret

End Function

Private Function isDigit(ByVal c As String) As Boolean
If InStr("0123456789", c) <> 0 Then
isDigit = True
End If
End Function

Et pour la tester, tu peux faire ceci :

Private Sub Command1_Click()
Dim s As String
Dim ret As Boolean
Dim first As String
Dim last As String

s = "SCALE: 1//142.9g/"
ret = GetAndSplit(s, ".", first, last)

Debug.Print ret, first, last

End Sub

Tu verras que tu obtiens "142" dans first et "9" dans last.

Tu n'as plus qu'à convertir et à continuer.

Note: pour ce genre de parsing, tu peux aussi utiliser la technique
des automates à états finis, décrits ici:
http://faq.vb.free.fr/index.php?question3

Cordialement,


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
greg
Le #17931391
Un grand merci, un forum rapide et efficace c'est du jamais vu

Vrais il vaut mieux ce baser sur le point, au cas manquerez certain première
caractère à la réception de la chaine.

j'ai peur que ce code ne puisse etre eficace

i = PortSerial.ReadLine
i = (Mid(i, 11))
i = (CInt(Val(i)))


"Jean-marc" 492925e3$0$2861$
greg wrote:
Bonjour,

comment je peut récupérer le chiffre 142 et le 9 âpres le point merci
exemple
SCALE: 1//142.9g/



Hello,

Ce dont tu as besoin, ce sont des fonctions de manipulations
de chaines de caractères.

Tu trouveras dans la FAQ 2 articles consacrés au sujet (et qui
contiennent la solution à ton problème):
http://faq.vb.free.fr/index.php?question8
et
http://faq.vb.free.fr/index.php?question7

Voir en particulier la description de Instr() ...


Pour en revenir à ton cas, ce qu'il te faut, c'est localiser
le "." puis lire les digits à droite et à gauche. On réalise
ça avec la fonction Instr (cf les 2 articles ci-dessus).

Je t'ai fait une petite fonction qui résoud ton cas :

Public Function GetAndSplit(ByVal s As String, _
ByVal sep As String, _
ByRef first As String, _
ByRef last As String) As Boolean
Dim p As Long
Dim saveP As Long
Dim ret As Boolean
Dim c As String


p = InStr(s, sep)
saveP = p
If p <> 1 Then
' read left digits
p = p - 1
c = Mid$(s, p, 1)
Do While p >= 1
If isDigit(c) Then
first = c & first
Else
Exit Do
End If
p = p - 1
c = Mid$(s, p, 1)
Loop
' now read right digits
p = saveP
p = p + 1
c = Mid$(s, p, 1)
Do While p <= Len(s)
If isDigit(c) Then
last = last & c
Else
Exit Do
End If
p = p + 1
c = Mid$(s, p, 1)
Loop
If (first <> "") And (last <> "") Then
ret = True
End If
End If

GetAndSplit = ret

End Function

Private Function isDigit(ByVal c As String) As Boolean
If InStr("0123456789", c) <> 0 Then
isDigit = True
End If
End Function

Et pour la tester, tu peux faire ceci :

Private Sub Command1_Click()
Dim s As String
Dim ret As Boolean
Dim first As String
Dim last As String

s = "SCALE: 1//142.9g/"
ret = GetAndSplit(s, ".", first, last)

Debug.Print ret, first, last

End Sub

Tu verras que tu obtiens "142" dans first et "9" dans last.

Tu n'as plus qu'à convertir et à continuer.

Note: pour ce genre de parsing, tu peux aussi utiliser la technique
des automates à états finis, décrits ici:
http://faq.vb.free.fr/index.php?question3

Cordialement,


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;






Jacquouille14
Le #17935691
greg a écrit :
Bonjour,

comment je peut récupérer le chiffre 142 et le 9 âpres le point merci
exemple
SCALE: 1//142.9g/




Bonjour,
Et ce genre de prog:
dim i as integer: dim tot as string
for i = 2 to len(SCALE)
if (asc(microsoft.visualbasic.left(scale,i,1)<106
and_asc(microsoft.visualbasic.left(scale,i,1)>95)'c'est 1 chiffre
or asc(microsoft.visualbasic.left(scale,i,1)0'c'est 1 point
tot &= microsoft.visualbasic.left(scale,i,1)
end if
next

résultat==> tot = 142.9

Autre méthode: obtenir la position du point par instr(scale,".")
puis chercher les chiffres avant et après cette position en
utilisant la méthode ci-dessus.
Au boulot !
--
Jacques dit Jacquouille
Modeste
Le #17939981
Bonsour® greg avec ferveur ;o))) vous nous disiez :

comment je peut récupérer le chiffre 142 et le 9 âpres le point merci
exemple
SCALE: 1//142.9g/



cDbl( Mid( Left( "SCALE: 1//142.9g/" , Instr( "g" , "SCALE: 1//142.9g/" )-1) , Instr( "//" , "SCALE: 1//142.9g/" ) + 2 , 9^9 ) )

142.9


--
--
@+
;o)))
PH
Le #17940511
Modeste a écrit :
Bonsour® greg avec ferveur ;o))) vous nous disiez :

comment je peut récupérer le chiffre 142 et le 9 âpres le point merci
exemple
SCALE: 1//142.9g/



cDbl( Mid( Left( "SCALE: 1//142.9g/" , Instr( "g" , "SCALE: 1//142.9g/" )-1) , Instr( "//" , "SCALE: 1//142.9g/" ) + 2 , 9^9 ) )

142.9




joli, mais faux

Instr( "g" , "SCALE: 1//142.9g/" ) renvoie 0

donc on évalue

Left( "SCALE: 1//142.9g/" , -1) ce qui renvoie bien entendu une erreur

donc intervertir les deux chaines dans instr


cDbl( Mid( Left( "SCALE: 1//142.9g/" , _
Instr( "SCALE: 1//142.9g/","g")-1) , _
Instr( "SCALE: 1//142.9g/" ,"//" ) + 2 , _
9^9 ))

en fin il faut remplacer le . par , avant la conversion, sinon sur les
postes français il y aura une erreur de type (attente de nombre à virgule)
Publicité
Poster une réponse
Anonyme