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 :

Lire chaque caractère (même les accentués) d'un fichier NotePad


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    355
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 355
    Par défaut Lire chaque caractère (même les accentués) d'un fichier NotePad
    Bonjour à tous
    J'ai besoin de lire caractère par caractère un fichier NotePad qui contient des mots séparés par une virgule suivi d'un espace pour les enregistrer dans un second fichier, séparés par un "CRLF".
    N'étant pas un expert en la matière, j'ai essayé de trouver quelques exemples.
    Mon code fonctionne jusqu'à trouver un caractère accentué.
    Voici le code :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    Imports System
    Imports System.IO
    Imports System.Text
     
    Module Module1
        Public chemin, ficOrigine, ficDestination, Mot As String
        Public Car As Byte
     
     
        Public Sub Main()
            Dim i, longueur As Integer
            chemin = CurDir()     'Application.StartupPath
            ficOrigine = chemin & "\Quelques mots.txt" 'Ce fichier a été créé avec NotePad
            ficDestination = chemin & "\Résultat.txt"
            longueur = FileLen(ficOrigine)
            Dim sw As StreamWriter = New StreamWriter(ficDestination)
            Dim MyFile As New FileInfo(ficOrigine)
            Dim sr As StreamReader = MyFile.OpenText()
            'Read a single character.
            Try
                For i = 1 To longueur
                    Car = sr.Read() 'Là où se trouve l'erreur quand on essaye de lire un "é"
                    If Car <> 32 Then
                        If Car = 44 Then
                            sw.WriteLine(Mot)
                            Mot = ""
                        Else
                            ConstituerMot(Car)
                        End If
                    End If
                Next
            Catch ex As Exception
                MsgBox(ex.Message) 'Le message est le suivant "Arithmetic operation resulted in an overflow"
            End Try
     
            sr.Close()
            sw.Close()
        End Sub
     
        Private Sub ConstituerMot(ByVal x)
            Mot += Chr(Car)
        End Sub
     
    End Module
    Je pense que codage UTF... est peut être mal réglé mais je n'ai pas bien compris comment le coder

    Merci de votre réponse
    Claude Azoulai

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Par défaut
    Si le but est de faire un copier/coller du texte du fichier en insérant un CRLF après un "[VIRGULE][ESPACE]", regarde du côté de String.Split.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    355
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 355
    Par défaut
    Bonjour, c'est encore moi
    J'ai trouvé la solution :
    Plutôt que d'essayer d'utiliser des morceaux de code dont ne n'ai pas l'habitude, j'ai essayé d'utiliser des fichiers binaires que je connais mieux.
    Voici le code qui fonctionne parfaitement :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    Imports System
    Imports System.IO
    Module Module1
        Public chemin, ficOrigine, ficDestination, Mot As String
        Public Car As Byte
     
     
        Public Sub Main()
            Dim i, longueur As Integer
            chemin = CurDir()     'Application.StartupPath
            ficOrigine = chemin & "\Quelques mots.txt"
            ficDestination = chemin & "\Résultat.txt"
            longueur = FileLen(ficOrigine)
            FileOpen(1, ficOrigine, OpenMode.Binary, OpenAccess.Read)
            FileOpen(2, ficDestination, OpenMode.Binary, OpenAccess.Write)
     
            'Lit tous les Bytes du fichier original
            Try
                For i = 1 To longueur
                    FileGet(1, Car) 'Lecture du 1er Byte et des suivants
                    If Car <> 32 Then 'Si différent d'un espace
                        If Car = 44 Then 'Si c'est une virgule
                            Car = 13
                            FilePut(2, Car) 'Ecrit un saut de ligne
                            Car = 10
                            FilePut(2, Car) 'Ecrit un retour chariot
                        Else
                            FilePut(2, Car) 'Sinon, écrit le Byte lu précédemment
                        End If
                    End If
                Next
            Catch ex As Exception
                MsgBox(ex.Message) 'Affiche l'erreur, s'il y en a une
            End Try
     
            FileClose(1)
            FileClose(2)
        End Sub
    End Module
    Je vous le soumet car ça peut aider quelqu'un d'autre

    Claude Azoulai

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Par défaut
    Ah autant pour moi, il semblerait que ce soit un String.Replace dont tu as besoin.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim MonTexteOrigine As String = "un superbe texte, avec une virgule"
    Dim MonNouveauTexte As String = MonTexteOrigine.Replace(", ", Environment.NewLine) '//Param 1 : caractère(s) à remplacer | Param 2 : caractère(s) de remplacement

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    355
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 355
    Par défaut
    Merci d'avoir continué la discussion
    Tu m'a donné un renseignement qui me permet de voir les choses d'une manière encore plus simple
    Je vais l'utiliser dans un nouveau projet
    Claude Azoulai

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Pouvoir lire et écrire dans les propriétés d'un fichier Powerpoint depuis Excel
    Par DomLastuce dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 14/11/2015, 09h17
  2. Lire plusieurs caractères en même temps
    Par sarlunx dans le forum Général Python
    Réponses: 14
    Dernier message: 04/10/2012, 22h00
  3. Réponses: 11
    Dernier message: 05/03/2011, 12h20
  4. Réponses: 5
    Dernier message: 01/02/2010, 01h14
  5. Réponses: 6
    Dernier message: 15/04/2008, 00h38

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