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 texte fichier généré sous DOS [Débutant]


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Octobre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Octobre 2016
    Messages : 15
    Points : 15
    Points
    15
    Par défaut Lire texte fichier généré sous DOS
    Bonjour,

    Je cherche la méthode pour lire correctement les lignes d'un fichier txt généré sous DOS (schtasks /query ....)
    Le texte de sortie étant codé CP850, je cherche à l'importer correctement avec un StreamReader.

    Je bloque.

    Quelqu'un a-t-il déja été confronté au problème ?

    Merci de votre aide :-)

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    En gros une fois que tu as recupere ton Stream, il faut le convertir en byte[], tu peux faire quelque chose comme ceci :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ' On cree un MemoryStream pour faire la transformation
    Using memoryStream = New MemoryStream()
    	' sourceStream est ton stream d'origine
    	sourceStream.CopyTo(memoryStream)
     
    	' On retourne un tableau de byte
    	Return memoryStream.ToArray()
    End Using
    Ensuite, tu peux utiliser Encoding.Convert pour convertir l'encodage, a l'aide des etapes suivantes :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ' On recupere l'encoding Unicode
    Dim unicodeEncoding = Encoding.Unicode
     
    ' Recupere l'encoding Western European (DOS) / ibm850
    Dim cp850Encoding = Encoding.GetEncoding(850)
     
    ' On converti les bytes encodes en ibm850 vers Unicode
    ' Ici, cp850Bytes est le resultat de la transformation du Stream en byte[] qu'on a realise dans le bloc de code precedent
    Dim convertedBytes = Encoding.Convert(cp850Encoding, unicodeEncoding, cp850Bytes)
     
    ' Enfin, on recupere le texte en Unicode, a partir des bytes qu'on vient de convertir
    Dim unicodeText = Encoding.Unicode.GetString(convertedBytes)
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Octobre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Octobre 2016
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Merci DotNetMatt

    Par contre je débute et j'ai donc un peu de mal à implémenter tes conseils

    Ex d'erreur :
    Erreur 11 'CopyTo' n'est pas un membre de 'System.IO.StreamReader'.
    Erreur 12 L'instruction 'Return' dans un Sub ou un Set ne peut pas retourner de valeur.

    Tu peux me guider ?

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Effectivement, la methode CopyTo existe sur le type Stream et non sur le type StreamReader, j'ai ete trop vite en besogne Voici un exemple un peu plus structure :
    Code VB.NET : 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
    Public Function ConvertCodePage850StreamToUnicodeText(streamReader As StreamReader) As String
    	' Transformation du Stream en byte[]
    	Dim cp850Bytes = StreamToByteArray(streamReader.BaseStream)
     
    	' On recupere l'encoding Unicode
    	Dim unicodeEncoding = Encoding.Unicode
     
    	' Recupere l'encoding Western European (DOS) / ibm850
    	Dim cp850Encoding = Encoding.GetEncoding(850)
     
    	' On converti les bytes encodes en ibm850 vers Unicode
    	Dim convertedBytes = Encoding.Convert(cp850Encoding, unicodeEncoding, cp850Bytes)
     
    	' Enfin, on retourne le texte en Unicode, a partir des bytes qu'on vient de convertir
    	Return unicodeEncoding.GetString(convertedBytes)
    End Function
     
    Private Function StreamToByteArray(stream As Stream) As Byte()
    	' On cree un MemoryStream pour faire la transformation
    	Using memoryStream = New MemoryStream()
    		stream.CopyTo(memoryStream)
     
    		' On retourne un tableau de byte
    		Return memoryStream.ToArray()
    	End Using
    End Function
    Et pour l'utiliser :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ' Charge ton fichier dans le StreamReader
    Dim streamReader = New StreamReader("")
     
    ' Appelle la methode ConvertCodePage850StreamToUnicodeText
    Dim unicodeText = ConvertCodePage850StreamToUnicodeText(streamReader)
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Octobre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Octobre 2016
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Que dire .....

    Simplement merci !!

    pour ma culture, unicodeText = ConvertCodePage850StreamToUnicodeText(streamReader) renvoi juste les données dans une variable texte et non un tableau.
    C'est bien ça

    Si je veux retrouver mes lignes 1 a 1, je fais un simple split sur les caractères de fin de lignes et le tour est joué.
    A moins que tu ais mieux :-)

    Merci encore

    Mickael

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Mickou35 Voir le message
    pour ma culture, unicodeText = ConvertCodePage850StreamToUnicodeText(streamReader) renvoi juste les données dans une variable texte et non un tableau.
    C'est bien ça
    Oui.

    Citation Envoyé par Mickou35 Voir le message
    Si je veux retrouver mes lignes 1 a 1, je fais un simple split sur les caractères de fin de lignes et le tour est joué.
    A moins que tu ais mieux :-)
    Ca me parait bien, mon objectif etait de repondre a ta question pour recuperer le texte. Ensuite le reste c'est a toi de voir ce que tu en fais Si cela cree d'autres questions, n'hesite pas a creer une autre discussion (1 sujet = 1 question).

    Aussi, n'oublie pas de marquer ce sujet comme resolu, avec le bouton resolu tout en bas des discussions
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Octobre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Octobre 2016
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Merci DotNetMatt

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

Discussions similaires

  1. Comment lire un fichier doc sous Linux
    Par Pauli dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 09/01/2007, 15h22
  2. [SOLARIS] Lire des fichiers PDF sous SOLARIS
    Par StyleXP dans le forum Solaris
    Réponses: 4
    Dernier message: 15/11/2006, 20h57
  3. lire un fichier excel sous vb
    Par wided_instm dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 19/09/2006, 11h10
  4. Lire un fichier .ini sous Linux
    Par cheprod dans le forum Linux
    Réponses: 2
    Dernier message: 26/04/2006, 18h34
  5. Lire des fichiers iso sous linux
    Par wodel dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 28/11/2005, 11h17

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