Problème chaîne de caractère

Résolu
cs_mohellebi Messages postés 98 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 1 août 2019 - 13 juil. 2015 à 23:10
cs_mohellebi Messages postés 98 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 1 août 2019 - 14 juil. 2015 à 21:42
Bonsoir,
Je travaille avec vb.net pour la lecture écriture de fichier plat, maintenant mon problème est de lire une chaîne de caractère ensuite la décaler complètement adroite toute en replaçant les blancs par des zéro et enlever la virgule.
voici l'exemple de fichier et le code que j'utilise.
Merci d'avance pour votre aide.

00574289 0000 EUR 3 250,00
02987162 0000 EUR 3 640
03106185 0000 EUR 3 18

et si possible d'obtenir :

00574289 0000 EUR 325000
02987162 0000 EUR 003640
03106185 0000 EUR 000318


 
 
Dim objstreamreader As System.IO.StreamReader
        Dim objstreamwriter As System.IO.StreamWriter
        objstreamreader = System.IO.File.OpenText("E:\export\manif.txt")
        objstreamwriter = System.IO.File.CreateText("E:\export\export.txt")

        Do Until objstreamreader.Peek = -1

            strLine = objstreamreader.ReadLine()
            
            controle = Mid(strLine, 1, 1)
          
           
            If controle = "0" Or controle = "1" Or controle = "2" Or controle = "3" Or controle = "4" Or controle = "5" Or controle = "6" Or controle = "7" Or controle = "8" Or controle = "9" Then
              
                EUR = Mid(strLine, 15, 3)
                pax = Mid(strLine, 20, 10)
                pax = Replace(pax, ",", "")
                pax = Replace(pax, " ", "")

              
                billet = Mid(strLine, 1, 8)

                affiche = billet +  "  0000  " + EUR + " " + pax 

                objstreamwriter.WriteLine(affiche)

            End If
        Loop
       
 MessageBox.Show("Export avec succées")
        objstreamreader.Close()
        objstreamwriter.Close()


5 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
13 juil. 2015 à 23:59
Bonjour
maintenant mon problème est de lire une chaîne de caractère ensuite la décaler complètement adroite toute en replaçant les blancs par des zéro et enlever la virgule.

pas clair du tout
la décaler complètement adroite quelle partie de la chaine ?
Il faut expliquer précisément sans équivoque.
0
cs_mohellebi Messages postés 98 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 1 août 2019 3
Modifié par cs_mohellebi le 14/07/2015 à 12:32
Bonjour,
Oui effectivement j'aurais dû mentionner de quelle chaîne s'agit-il afin d'être plus explicite , mais au même temps j'ai donné l'exemple exacte de mon problème
Merci
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
14 juil. 2015 à 11:04
Bonjour,

Exemple:

Dim strLine As String = objstreamreader.ReadLine()

If IsNumeric(strLine.Substring(1, 1)) Then
Dim affiche As String
Dim part As String = Mid(strLine, 19, 8)
part = part.Replace(" ", "")
part = part.Replace(",", "")
part = String.Format("000000{0}", part)
part = part.Substring(part.Length - 6, 6)
affiche = strLine.Substring(0, 18) & part
MessageBox.Show(affiche)
End If
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
14 juil. 2015 à 13:43
Peut être ainsi

Private Sub TextProcessing(Filein As String, Fileout As String)
Dim listIn, listout As New List(Of String)
Dim strright As String
Dim x, y As Integer
Dim max As Integer = 0
listIn = IO.File.ReadAllLines(Filein).ToList
'Recherche le string le plus long après EUR
For Each item In listIn
If item.Substring(item.IndexOf("EUR") + "EUR".Length).Trim.Replace(" ", "").Replace(",", "").Length > max Then
max = item.Substring(item.IndexOf("EUR") + "EUR".Length).Trim.Replace(" ", "").Replace(",", "").Length
End If
x = item.Substring(0, item.IndexOf("EUR") + "EUR".Length).Length
y = item.Substring(x).Length - item.Substring(x).TrimStart.Length
listout.Add(item.Substring(0, item.IndexOf("EUR") + "EUR".Length) + New String(" "c, y))
Next
For iter = 0 To listIn.Count - 1
strright = listIn(iter).Substring(listout(iter).Length).Trim.Replace(" ", "").Replace(",", "").PadLeft(max, "0"c)
listout(iter) = listout(iter) & strright
Next
IO.File.WriteAllLines(Fileout, listout.ToArray)
End Sub


tu appelles la sub ainsi
TextProcessing("E:\export\manif.txt","E:\export\export.txt")
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 14/07/2015 à 16:04
Bonjour,
mais au même temps j'ai donné l'exemple exacte de mon problème
Merci

Tu crois ?
Je vais alors te prendre au mot ===>>
- Chacune des chaînes de ton exemple, éclatée par Split sur l'espace, contient 5 sous-chaines ===>> un split (sur espace) te retourne donc un array.
- Il te suffit alors de :
---concaténer la 4ème et la 5ème valeur de l'array obtenu, de remplacer "," par "", puis de formater comme tu l'entends
--- puis un join de la totalité

Petit commentaire : ne marchera bien évidemment pas si, après "EUR ", tu n'as plus d'espace, comme dans ton "exemple". Mais tu as dit que ton exemple était "exact", alors ... pas de problème .

EDIT : pour plus de comptéhension de mon nintervention, en ce qui concerne la clarté de ton "exemple" :
Si je dis que tous les chats qui ont trois couleurs sont forcément des femelles (ce qui est vrai), je ne dis pas du tout que toutes les femelles de chats ont forcément trois couleurs.
Ton exemple laisse le même type de doute.
Si l'on s'en tient à tes 3 lignes et qu'elles prétendent réellement "imager" la totalité des cas de figure, on en conclut que :
- tu n'as que des chaînes ainsi constituées :
"[toujours 8 chiffres] 0000 EUR 3 [un nombre de longueur variable pouvant ou non être décimal et contenir une virgule]"
où seules les chaînes entre crochets sont variables, la première étant toutefois toujours de 8 chiffres
Et où les sous-chaînes en gras sont TOUJOURS identiques et présentes..
Est-ce vraiment toujours le cas ?

Il se trouve que les réponses qui t'ont été données plus haut partent de tel ou tel autre "principe", de telle ou telle autre "hypothèse" concernant tes exemples...
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0

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

Posez votre question
cs_mohellebi Messages postés 98 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 1 août 2019 3
14 juil. 2015 à 21:42
Bonsoir, sc_JMO
Merci pour ton code sc_JMO, solution impeccable
0
Rejoignez-nous