IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

modifier fichier texte


Sujet :

VB.NET

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut modifier fichier texte
    Bonjour,

    j'ai des fichiers dans un répertoire.
    Je voudrai éditer tous les fichiers .txt en supprimant toutes les tabulations et en supprimant les espaces en fin de ligne.
    => comment faire (avez-vous de petits exemples de code qui manipulent des fichiers txt ?) ?

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    un streamreader pour lire
    un string.relace puis un streamwriter pour écrire

    y a des tas d'explique sur le forum
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749

  4. #4
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    Quel boulet, j'ai oublié la FAQ

    par contre j'ai une erreur sur mon replace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Imports System.IO
     
    ' réduit la taille d'un fichier .htm
    Sub FichierTexte(ByVal NomFichier_in As String, ByVal NomFichier_out As String)
        Dim sr_in As StreamReader
        Dim sw_out As StreamWriter
        Dim sLine As String
     
    	sr_in = New StreamReader(NomFichier_in) ' ouverture du fichier
    	sw_out = New StreamWriter(NomFichier_out) ' création d'un nouveau fichier
     
    	sLine = sr_in.ReadLine() ' lecture de la première ligne
    	While Not sLine Is Nothing ' on balye tout le fichier
    		sLine = sr_in.ReadLine() ' lecture d'une ligne
    		sLine = sLine.Replace("   ", "") ' supprime les tabulations
    		sw_out.WriteLine(sLine) ' écriture de la ligne modifiée
    	End While
     
    	sr_in.Close() ' fermeture du fichier
    	sw_out.Close() ' fermeture du fichier
     
    End Sub
    Exception System.NullReferenceException was thrown in debuggee:
    Object reference not set to an instance of an object.
    => les tabulations sont bien supprimées mais ça bug à la 548 ligne (il y a encore des lignes après)
    => aussi mes é majuscules sont remplacés par un caractère en forme de carré (mon fichier est encodé en AINSI)
    => ça vient de quoi ?

    aussi comment fait-on pour :
    1- supprimer les espaces uniquement en fin de ligne
    2- fusionner deux lignes

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 299
    Points : 330
    Points
    330
    Par défaut
    Bonjour,

    Comme tu n'as pas mis les 548 lignes de code, on peut pas trop savoir où le bug survient...

    Pour supprimer les espaces uniquement en fin de ligne, utilise la méthode Trim sur ta chaine de caractère (je crois me rappeler qu'il y a le left Trim et le right Trim).

    Pour la fusion, l'opérateur & entre deux chaine devrait faire l'affaire (ca doit être aussi dans la FAQ).

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Il y a plusieurs problèmes dans ton code...
    - Déjà tu sautes la 1ere ligne, et tu remplaces la valeur de sLine aussitôt après avoir testé qu'elle n'est pas nulle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	sLine = sr_in.ReadLine() ' lecture de la première ligne
    	While Not sLine Is Nothing ' on balye tout le fichier
    		sLine = sr_in.ReadLine() ' lecture d'une ligne
    		sLine = sLine.Replace("   ", "") ' supprime les tabulations
    Donc tu manipules la valeur récupérée par le 2e ReadLine, et "perdant" le 1er. En plus, quand tu arrives à la fin du fichier, sLine vaut Nothing, et tu le manipules sans l'avoir testé. Il faut donc placer le 2e ReadLine à la fin de la boucle, pas au début.

    - " " n'est pas une tabulation, c'est juste 3 espaces... le caractère tabulation est la constante vbTab. Après, je ne sais pas, tu veux peut-être supprimer les espaces...

    => aussi mes é majuscules sont remplacés par un caractère en forme de carré (mon fichier est encodé en AINSI)
    Euh... ASCII tu veux dire ? Le é majuscule n'est pas un caractère ASCII (le é minuscule non plus d'ailleurs). A mon avis ton fichier est plutôt en ISO-8859-1 (le plus "classique" sous Windows) ou en UTF-8. De toutes façons, vu que tu ne précises pas l'encodage pour le StreamReader et le StreamWriter, c'est l'encodage par défaut qui est utilisé. Essaie de passer différents encodage en paramètres des constructeurs de StreamReader et StreamWriter.

    aussi comment fait-on pour :
    1- supprimer les espaces uniquement en fin de ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sLine = sLine.TrimEnd();
    2- fusionner deux lignes
    Stocke la ligne courante dans une variable, et à l'itération suivante de la boucle, concatène avec la nouvelle ligne. Ensuite, écris le résultat dans le fichier de sortie.

  7. #7
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    merci beaucoup ça m'a permis de bien avancé mais j'ai toujours quelques problèmes.

    Peut-on récupérer l'encodage du fichier d'entrée automatiquement pour pouvoir l'utiliser dans le fichier de sortie ?

    j'ai essayé ça mais ça ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    ' réduit la taille d'un fichier .htm
    Sub FichierTexte(ByVal NomFichier_in As String, ByVal NomFichier_out As String)
        Dim sr_in As StreamReader
    	Dim myEncoding As System.Text.Encoding
        Dim sw_out As StreamWriter
        Dim sLine As String
     
    	sr_in = New StreamReader(NomFichier_in, true) ' ouverture du fichier
    	myEncoding = sr_in.CurrentEncoding ' récupère l'encodage du fichier source
    	msgbox(myEncoding.EncodingName)
    	sw_out = New StreamWriter(NomFichier_out, false, myEncoding) ' création d'un nouveau fichier
     
    	sLine = sr_in.ReadLine() ' lecture de la première ligne
    	While Not sLine Is Nothing ' on balaye tout le fichier
    		sLine = sLine.Replace("	", "") ' suppression des tabulations
    		sLine.Trim() ' supprime les espaces en début et fin de chaine
     
    		If sLine <> "" Then ' écrit la ligne que si elle est vide
    			sw_out.WriteLine(sLine) ' écriture de la ligne modifiée
    		End If
     
    		sLine = sr_in.ReadLine() ' lecture d'une ligne
    	End While
     
    	sr_in.Close() ' fermeture du fichier
    	sw_out.Close() ' fermeture du fichier
     
    	msgbox("Operation terminée")
    End Sub
    => myEncoding vaut UTF-8 alors qu'il devrait valoir ISO-8859-1. Le format d'encodage est normalement ISO-8859-1 (mais dans notepad++ c'est marqué AINSI).


    aussi pour la fusion de lignes : je vais fusionner toutes les lignes de mon fichier text en une seule => donc si j'utilise votre méthode, j'ai peur que ça fasse beaucoup de manipulation de chaine pour rien : n'est-il pas possible de simplement supprimer les caractères de retours à la ligne avant d'écrire dans mon fichier de sortie ?

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Pour l'encodage je sais pas trop où est le problème...

    Citation Envoyé par Emcy Voir le message
    aussi pour la fusion de lignes : je vais fusionner toutes les lignes de mon fichier text en une seule => donc si j'utilise votre méthode, j'ai peur que ça fasse beaucoup de manipulation de chaine pour rien : n'est-il pas possible de simplement supprimer les caractères de retours à la ligne avant d'écrire dans mon fichier de sortie ?
    Les retours à la ligne sont déjà supprimés, puisque tu utilises ReadLine
    Pour concaténer toutes les lignes, en fait il suffit d'utiliser Write à la place de WriteLine...

  9. #9
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    ok, maintenant c'est bon pour la fusion des lignes.
    Personne n'a de solution pour mon problème d'encodage de mes fichiers ?

    Actuellement j'écris directement mes données dans un fichier : existe t-il un moyen des faire un fichier temporaire stocké en RAM dans lequel je fais mes modif et qu'a la fin seulement j'écris dans le fichier de sortie (avec le mêm genre de méthodes qe StreamWriter) ?

Discussions similaires

  1. modifier fichier texte en java
    Par billouth dans le forum Langage
    Réponses: 5
    Dernier message: 06/08/2009, 17h52
  2. Modifier fichier texte
    Par Invité dans le forum C#
    Réponses: 2
    Dernier message: 25/02/2009, 16h26
  3. modifier le texte d'un fichier pdf
    Par spilliaert dans le forum Documents
    Réponses: 2
    Dernier message: 23/05/2006, 23h19
  4. comment utiliser Notepad pour modifier un fichier texte?
    Par moon13_698 dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 06/05/2006, 15h41
  5. [VB6] Ecrire/Modifier/Effacer ds un fichier text-4 Chs/Lg
    Par Jonathan_Korvitch dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 24/12/2002, 18h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo