Problème chaîne de caractère [Résolu]

cs_mohellebi 101 Messages postés mercredi 31 octobre 2007Date d'inscription 1 novembre 2017 Dernière intervention - 13 juil. 2015 à 23:10 - Dernière réponse : cs_mohellebi 101 Messages postés mercredi 31 octobre 2007Date d'inscription 1 novembre 2017 Dernière intervention
- 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()


Afficher la suite 

6 réponses

Répondre au sujet
cs_ShayW 3233 Messages postés jeudi 26 novembre 2009Date d'inscription 6 décembre 2017 Dernière intervention - 13 juil. 2015 à 23:59
0
Utile
1
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.
cs_mohellebi 101 Messages postés mercredi 31 octobre 2007Date d'inscription 1 novembre 2017 Dernière intervention - 14 juil. 2015 à 11:57
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
Commenter la réponse de cs_ShayW
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 14 juil. 2015 à 11:04
0
Utile
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
Commenter la réponse de cs_JMO
cs_ShayW 3233 Messages postés jeudi 26 novembre 2009Date d'inscription 6 décembre 2017 Dernière intervention - 14 juil. 2015 à 13:43
0
Utile
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")
Commenter la réponse de cs_ShayW
ucfoutu 18022 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - Modifié par ucfoutu le 14/07/2015 à 16:04
0
Utile
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.
Commenter la réponse de ucfoutu
cs_mohellebi 101 Messages postés mercredi 31 octobre 2007Date d'inscription 1 novembre 2017 Dernière intervention - 14 juil. 2015 à 21:42
0
Utile
Bonsoir, sc_JMO
Merci pour ton code sc_JMO, solution impeccable
Commenter la réponse de cs_mohellebi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.