cs_mohellebi
Messages postés104Date d'inscriptionmercredi 31 octobre 2007StatutMembreDernière intervention 1 août 2019
-
Modifié par cs_mohellebi le 23/08/2015 à 11:22
cs_mohellebi
Messages postés104Date d'inscriptionmercredi 31 octobre 2007StatutMembreDernière intervention 1 août 2019
-
25 août 2015 à 10:15
Bonjour,
J'ai réalisé un code qui lit des chaînes de caractère (numérique) à partir d'un fichier .txt ,maintenant mon problème est lorsque je cumule ces chaines j'ai un message d'erreur "La conversion de la chaîne en type 'Double' n'est pas valide" chose logique, j ai tenté quelques astuces comme créer des variables et les formater avec un CDBL , mais rien à faire le message est toujours là.
Et Merci d'avance pour votre habituelle aide.
le code vb.net
Do Until objstreamreader.Peek = -1
strLine = objstreamreader.ReadLine()
secteur = Mid(strLine, 1, 7)
'devise = Mid(strLine, 1, 6)
rot = Mid(strLine, 1, 6)
'dt = Mid(strLine, 86, 4)
If rot = "Voyage" Then
Vnavire = Mid(strLine, 11, 5)
trajet = Mid(strLine, 31, 7)
numV = Mid(strLine, 71, 3)
numV = String.Format("0000{0}", numV, " ", vbNullString)
numV = numV.Substring(numV.Length - 4, 4)
Vdt = Mid(strLine, 51, 10)
Vdt = Replace(Vdt, "/", "")
If secteur = "EURO" Then
dev = Mid(strLine, 91, 3)
MontantPax = RTrim(Mid(strLine, 11, 12))
MontantPax = Replace(MontantPax, " ", vbNullString)
MontantPax = String.Format("000000000000000{0}", MontantPax)
MontantPax = MontantPaxEntmv.Substring(MontantPax.Length - 12, 12)
MontantVeh = RTrim(Mid(strLine, 51, 12))
MontantVeh = Replace(MontantVeh, " ", vbNullString)
MontantVeh = String.Format("000000000000000{0}", MontantVeh)
MontantVeh = MontantVeh.Substring(MontantVeh.Length - 12, 12)
MontantTaxPax = RTrim(Mid(strLine, 31, 12))
MontantTaxPax = Replace(MontantTaxPax, " ", vbNullString)
MontantTaxPax = String.Format("000000000000000{0}", MontantTaxPax)
MontantTaxPax = MontantTaxPax.Substring(MontantTaxPax.Length - 12, 12)
MontantTaxVeh = RTrim(Mid(strLine, 71, 12))
MontantTaxVeh = Replace(MontantVeh, " ", vbNullString)
MontantTaxVeh = String.Format("000000000000000{0}", MontantVeh)
MontantTaxVeh = MontantTaxVeh.Substring(MontantVeh.Length - 12, 12)
Dim montantpax1 As Single
Dim montantVeh1 As Single
Dim montanttaxpax1 As Single
Dim montanttaxveh1 As Single
montantpax1 = MontantPax
montantVeh1 = MontantVeh
montanttaxpax1 = MontantTaxPax
montanttaxveh1 = MontantTaxVeh
'la variable MontantCumule est déclarée comme private (singel) au debut de la classe
MontantCumule = CDbl(montantpax1) + CDbl(montanttaxpax1) + CDbl(montantVeh1) + CDbl(montanttaxveh1)
MessageBox.Show(MontantCumule)
affiche = Vnavire + " " + "MANI " + Vdt + " " + "OD10" + " X " + Vnavire + numV + " " + trajet + Vnavire + Vdt + " c " + " c " + MontantPax + " N " + dev + " " + dev + " " + MontantPax
objstreamwriter.WriteLine(affiche)
affiche = Vnavire + " " + "MANI " + Vdt + " " + "OD60" + " X " + Vnavire + numV + " " + trajet + Vnavire + Vdt + " c " + " c " + MontantVeh + " N " + dev + " " + dev + " " + MontantVeh
objstreamwriter.WriteLine(affiche)
affiche = Vnavire + " " + "MANI " + Vdt + " " + "OD61" + " X " + Vnavire + numV + " " + trajet + Vnavire + Vdt + " c " + " c " + MontantTaxPax + " N " + dev + " " + dev + " " + MontantTaxPax
objstreamwriter.WriteLine(affiche)
affiche = Vnavire + " " + "MANI " + Vdt + " " + "OD62" + " X " + Vnavire + numV + " " + trajet + Vnavire + Vdt + " c " + " c " + MontantVeh + " N " + dev + " " + dev + " " + MontantTaxVeh
objstreamwriter.WriteLine(affiche)
affiche = Vnavire + " " + "MANI " + Vdt + " " + "OD62" + " X " + Vnavire + numV + " " + trajet + Vnavire + Vdt + " c " + " c " + MontantCumule + " N " + dev + " " + dev + " " + MontantCumule
objstreamwriter.WriteLine(affiche)
end if
end if
loop
Zermelo
Messages postés378Date d'inscriptionsamedi 22 septembre 2012StatutMembreDernière intervention13 août 201714 23 août 2015 à 11:26
Bonjour cs_mohellebi.
Si vous voulez vraiment programmer en VB.net, vous devez avant toute chose respecter les règles suivantes,
Option Explicit : ON
Option Strict : ON
Option Off : Off
Espace de noms Microsoft : désactivé
Pour votre gouverne : un chêne est un gros arbre, une chaîne de caractères est une suite d'objets de classe String.
Cordialement.
Zermelo
Messages postés378Date d'inscriptionsamedi 22 septembre 2012StatutMembreDernière intervention13 août 201714 23 août 2015 à 11:48
Veuillez m'excuser. Une chaîne de caractères est un objet de classe String.
et le gland son fruit, je sais aussi qu une chaîne de caractère est un objet string , en revanche ce n'est pas ma question !!!
merci quand même pour votre suggestion afin d activer les options explicit et strict
Zermelo
Messages postés378Date d'inscriptionsamedi 22 septembre 2012StatutMembreDernière intervention13 août 201714 24 août 2015 à 09:18
Bonjour cs_mohellebi.
Voici un code VB.net pur et dur, et qui néanmoins pourrait vous être utile.
Public Class Accueil
Private Sub Accueil_Load(sender As Object, e As EventArgs) Handles Me.Load Dim Txt1 As String = "3,1415926", Vlr1 As Double, Ok1 As Boolean Ok1 = Double.TryParse(Txt1, Vlr1) MessageBox.Show(Ok1.ToString) MessageBox.Show(Vlr1.ToString)
Dim Txt2 As String = "Le chêne un jour dit au roseau", Vlr2 As Double, Ok2 As Boolean Ok2 = Double.TryParse(Txt2, Vlr2) MessageBox.Show(Ok2.ToString) MessageBox.Show(Vlr2.ToString)
Oui l'espace de nom Microsoft a été désactivé, si non voila la petite instruction qui permet la conversion d'une chaîne de caractère vers un format de type double
montantVeh1 = Convert.ToDouble(MontantVeh)
Merci encore pour votre code est le cours
qui m a été proposé
fonctionne à condition que le string MontantVeh est numérique
c.a.d que chaque caractère est "0" ..."9" "," ou "."
sinon une exception est relevée
le code de Zermelo (que je salue) verifie si le string peut etre
converti en double
ton code cloche
tu écris
secteur = Mid(strLine, 1, 7)
en net donne
secteur = strline.substring(0,7)
rot = Mid(strLine, 1, 6)
rot = strline.substring(0,6)
donc
les 6 caractères du string rot sont identiques aux 6 premiers caractères du string secteur
donc
If rot = "Voyage" Then
if If secteur = "EURO" Then
la condition est toujours false
cs_mohellebi
Messages postés104Date d'inscriptionmercredi 31 octobre 2007StatutMembreDernière intervention 1 août 20193 25 août 2015 à 10:02
Effectivement mon code est moins efficace que celui de Zermelo que je salue aussi pour son effort , en revanche dans mon cas le string est toujours numérique.
après pour les deux chaînes rot et secteur , à mon avis et peut être que je me trompe, mon code est relativement bon car le pointeur de lecture vérifie pour un premier temps et dans la première ligne si rot qui est mid(strline, 1 ,6 ) = "voyage", si oui j'extrais les données dont j'ai besoin dans la même ligne bien sur, ensuite je passe à la seconde ligne pour vérifier si secteur = "Euro" afin d'extraire d'autre donnée, d'ailleurs mon fichier de sortie est correcte.
si non oui je suis vraiment satisfait, non seulement du résultat, mais de toute l'équipe qui m'aide depuis mon inscription à ce site
Merci encore
oui , désolé je viens de vérifier c'était une erreur de ma part , je devais écrire l'instruction elseif secteur = "Euro" , sinon effectivement la condition est toujours false
23 août 2015 à 11:48
Modifié par cs_mohellebi le 23/08/2015 à 14:29
merci quand même pour votre suggestion afin d activer les options explicit et strict