Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

récupérer le chiffre

13 réponses
Avatar
greg
Bonjour,

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

10 réponses

1 2
Avatar
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" a écrit dans le message de news:
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/
|
|
Avatar
PH
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" a écrit dans le message de news:
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
Avatar
PH
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" a écrit dans le message de news:
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),".",","))
Avatar
greg
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" <le a écrit dans le message de news:

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" a écrit dans le message de news:
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/
|
|




Avatar
bahn po
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, ".", ",")
Avatar
Jean-marc
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_' ;
Avatar
greg
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" a écrit dans le message de news:
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_' ;






Avatar
Jacquouille14
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
Avatar
Modeste
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)))
Avatar
PH
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)
1 2