Vb modification de fichier

cs_maya77 Messages postés 36 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 18 juin 2011 - 1 mai 2011 à 20:11
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 - 2 mai 2011 à 15:14
Bonjour,
je voudrais lire un fichier texte ligne par ligne le mettre dans un fichier temporaire puis le modifier en remplaçant tout les "" par un espace puis de de le copier dans un autre fichier. j'ai tenté de le faire avec ce programme mais étant débutante je ne crois pas que ceci marche, enfaîte ça ne marche pas, je précise que c'est en visual basic 2010.

voila merci pour votre aide

maya

  Public Shared Function ReadByLine( ByVal file As String) As ArrayList
    DECLARER un lecteur de fichier 
    Dim monlecteur As StreamReader
    DECLARER une collection pour les lignes du fichier 
    Dim meslignes As New ArrayList

    Dim fi As String
    Dim fi1 As String
    Dim sr As StreamReader
    Dim sr1 As String

            Try
    'path est le chemin complet du fichier à l
monlecteur = New StreamReader(file)
    With monlecteur
    'POSITIONNER le flux au début du fichier 
    .BaseStream.Seek(0, SeekOrigin.Begin)
    'TANT QUE le lecteur a quelquechose à lire 
    While (.Peek > 0)
    'LIRE une ligne du fichier et l'ajouter à meslignes 
    fi = meslignes.A (.ReadLine)

                     fi1 = fi.Replace("", "")
                       sr = New StreamReader("")
                      sr1 = sr.ReadLine
                        While Not sr1 Is Nothing

       sr1 = sr.ReadLine()
    End While
          End While
       End With
    
 Catch ex As Exception
         Console.WriteLine(ex.Message)
      Finally
    'FERMER le lecteur en tout etat de cause 
    monlecteur.Close()
       End Try
        Return meslignes
     End Function

9 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
1 mai 2011 à 21:13
Bonjour,

Regardes :
IO.File.ReadAllText
IO.File.WrileAllText
IO.File.ReadAllLines

Mon site
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
1 mai 2011 à 21:54
Bonjour,

C'est compliqué ce que tu as fait,mais on fait ce qu'on peut, je sais...

Déjà,au lieu de mettre un fichier dans un autre tu peux le copier, ce qui ira "pluce" vite :

Dim source = My.Application.Info.DirectoryPath & "\nomFichier.txt"
Dim destination = My.Application.Info.DirectoryPath & "\nomFichier.tmp"
FileCopy(source, destination)

Après tu peux mettre ton fichier en variable :

Dim monFichier As New StreamReader("nomFichier.tmp")
Dim Contenu As String = monFichier.ReadToEnd()
monFichier.Close()

Puis avec la gestion denchaînes tu remplace tout tes par des " " ; ou space(1) ; ou Chr(32)...

ch_resultat = Replace(texte,"recherché","remplaçant")

' Vois aussi l'aide sur cette commande, je ne sais plus si ça remplace tout ou un seul, ou un nombre à indiquer (dans un while)

Puis tu balance ta variable en un seul morceau dans le nouveau fichier que tu veux faire.

Cordialement.

Joe.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
1 mai 2011 à 22:00
Bonsoir

Pourquoi le mettre dans un fichier temporaire
et après le modifier ? et encore le copier

On peut lire le fichier d'un bloc dans un
list of string
traitement de ta list tu modifies ce que tu veux
et après on récrit la list dans un fichier

étant débutante je ne crois pas que ceci marche


tu as testé le code ?
0
cs_maya77 Messages postés 36 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 18 juin 2011
1 mai 2011 à 22:43
merci beaucoup joe je vais suivre vos instructions et m'y mètre de suite.
shayW oui je l'ai tester et ça ne marche pas.

merci pour vos réponses.
0

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

Posez votre question
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
1 mai 2011 à 23:45
Bonsoir a tous,

Connais tu MSDN . Voici l'exemple fourni, tu as tous les cas .

Test d'existence de fichier
Création de fichier
Ajout
Lecture de fichier en dernier

Imports System
Imports System.IO

Public Class Test
    Public Shared Sub Main()
        Dim path As String = "c:\temp\MyTest.txt"
        Dim sw As StreamWriter

        ' This text is added only once to the file.
        If File.Exists(path) = False Then

            ' Create a file to write to.
            Dim createText() As String = {"Hello", "And", "Welcome"}
            File.WriteAllLines(path, createText)
        End If

        ' This text is always added, making the file longer over time
        ' if it is not deleted.
        Dim appendText As String = "This is extra text" + Environment.NewLine
        File.AppendAllText(path, appendText)

        ' Open the file to read from.
        Dim readText() As String = File.ReadAllLines(path)
        Dim s As String
        For Each s In readText
            Console.WriteLine(s)
        Next
    End Sub
End Class


Ma solution:

Imports System
Imports System.IO

......

'LIRE
Dim lines As String() = File.ReadAllLines(filename, System.Text.Encoding.Default)

'TRANSFORMER
Dim L2 As New List(Of String)
For Each s In lines.ToList
   L2.Add(Replace(s, "", "")
Next
             
'SAUVEGARDER
File.WriteAllLines(NewFilename , L2.ToArray)

Bonne soirée CGSI3
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
2 mai 2011 à 13:02
Bonjour,

Dans ton exemple, CGSI3, IO.File.ReadAllText et IO.File.WriteAllText permettraient d'éviter la boucle et le tableau, mais ton exemple fonctionne quand même.

Mon site
0
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
2 mai 2011 à 15:01
Bonjour Henry,
Merci beaucoup pour tes précisions
J'ai testé mon code hier avant de le poster.
Il fonctionnait bien alors je ne l'ai pas optimisé plus, par contre j'ai eu beaucoup plus de mal avec la fonction replace qui ne fonctionnais pas dans certains cas ??? d'ou la création d'une seconde variable tableau L2.

S.replace("", "") => ne modifiait rien dans le fichier et dans ce cas précis.

Je n'ai pas approfondis le sujet pour en percevoir les causes .. mais de cette facon cela fonctionne.
Bonne semaine ... CGSI3
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
2 mai 2011 à 15:06
Bonjour,

T=Replace(S,""," ")
et
T=S.Replace("," ")

font la même chose, mais la 2ième forme est à préférer à la première, car le première forme est une "compatibilité VB6" et donc dépréciée en .NET.

Mon site
0
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
2 mai 2011 à 15:14
S = S.replace("", "")
J'ai surement oublié l'égalité ...
Merci Je ne peux pas te mettre réponse accepté mais l'abeille devrait y penser ...
Bonne journée
CGSI3
0
Rejoignez-nous