Lecture d'un fichier ligne par ligne, donne un resultat trim [Résolu]

Messages postés
172
Date d'inscription
lundi 22 mai 2006
Statut
Membre
Dernière intervention
19 janvier 2011
- - Dernière réponse :  Utilisateur anonyme - 2 janv. 2013 à 17:17
Bonjour a tous !!

J'ai un petit soucis bizarre, en VB.net je lis un fichier avec un StreamReader je fais ReadLine et je me retrouve avec ma ligne en trim alors que la ligne de mon fichier et composé d'une tabulation, je m'explique :

mon fichier que je dois lire est composé de ligne comme ça :
CN_PLA_FORME 252
CN_PLA_REPERE A3
CN_PLA_INDICE 000

ensuite le code que j'utilise pour lire mon fichier :
 
Dim sr As StreamReader =  New StreamReader(FileName, System.Text.Encoding.Default)
Dim ligne As String
'--- ligne
While Not sr.EndOfStream()
   ligne =  sr.ReadLine()


et lorsque je debug la valeur de la ligne récupéré est : CN_PLA_FORME252

il enlève la tabulation ?!?

c'est normal ? j'ai oublié quelque chose dans le code pour spécifier qu'il me prenne tous les caractères de la ligne à lire.

Merci,


voici le code en entier au cas où :
 
Private Function getAttributs(ByVal FileName As String, ByRef ReasonLog As String) As Dictionary(Of String, String)
        Dim attribut As String
        Dim value As String
        Dim attributs As New Dictionary(Of String, String)

        Dim attributsSize As Integer
        Try

            Dim sr As StreamReader   = New StreamReader(FileName, System.Text.Encoding.Default)
            Dim ligne As String
            '--- ligne
            While Not sr.EndOfStream()
                ligne = sr.ReadLine()
                
                attribut = ligne.Substring(ligne, InStr(ligne, ControlChars.Tab) - 1)
                                value = ligne.Substring(ligne, Len(ligne) - InStr(ligne, ControlChars.Tab))

                If value <> ";" Then
                    attributsSize = attributsSize + 1
                    attributs.Add(attribut, value)
                End If

            End While
            sr.Close()

        Catch ex As Exception
            ReasonLog = ex.Message
        End Try

        Return attributs

    End Function

 
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
22
3
Merci
Salut,

Je ne comprends pas trop le problème. (ou sont les tabultaions)

Un split sur le caractère tab ne fonctionne-t-il pas mieux pour la suite de ton algo.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 196 internautes nous ont dit merci ce mois-ci

Commenter la réponse de nhervagault
Messages postés
172
Date d'inscription
lundi 22 mai 2006
Statut
Membre
Dernière intervention
19 janvier 2011
0
Merci
dans mon fichier j'ai ça (en rouge il y a la tabulation):
CN_PLA_FORME 252
CN_PLA_FORMEtab252

et quand je recupere la valeur de ma ligne ici
ligne = sr.ReadLine()


j'ai comme valeur sur la ligne récupéré : CN_PLA_FORME252 sans la tabulation entre CN_PLA_FORME et 252

Un split sur le caractère tab ne fonctionne-t-il pas mieux pour la suite de ton algo.


oui mais il faudrait que je vois dans mon String ligne la valeur du caractère tab au moins.

tu vois mieux le problème ?
Commenter la réponse de gretata
Messages postés
172
Date d'inscription
lundi 22 mai 2006
Statut
Membre
Dernière intervention
19 janvier 2011
0
Merci
C'est bizarre que je ne vois pas le tab dans mon String ligne, mais en faisant un Split comme tu dis je peux voir les deux cotés CN_PLA_FORME et 252

du coup sa donne ceci :
 Dim test() As String = ligne.Split(ControlChars.Tab)


Mais je ne comprend pas pourquoi je ne peux pas voir la table n'y même faire le code que j'avais mis en place, en tous cas merci pour le Split
Commenter la réponse de gretata
Messages postés
45
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
17 août 2012
0
Merci
J'ai programmé ca pour lire un fichier tabulé avec "#" et remplir une datagridview

Il faut définir FileIO.FieldType.Delimited MyReader.SetDelimiters

Public caractère_séparateur_colonnes_Datagrid As String = "#" 'alt 35


Public Sub ouvrir_fichier_questionnaire_remplir_datagridview(ByVal fichier As String, ByVal datagridview_utilisee As DataGridView)

'Création d'un TextFieldParser, MyReader et ouverture du fichier OpenFileDialog1.FileName
Dim MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(fichier)
Dim champ() As String

datagridview_utilisee.RowCount = 0

'Le séparateur de champs
MyReader.TextFieldType =
FileIO.FieldType.Delimited MyReader.SetDelimiters(caractère_séparateur_colonnes_Datagrid)

While Not MyReader.EndOfData
'Try
'lecture ligne par ligne du fichier
champ = MyReader.ReadFields()
datagridview_utilisee.Rows.Add _
(New String()
{champ(0), _
champ(1), _
champ(2), _
champ(3), _
champ(4), _
champ(5), _
champ(6), _
champ(7), _
champ(8), _
champ(9), _
champ(10), _
champ(11), _
champ(12), _
champ(13), _
champ(14), _
champ(15), _
champ(16), _
champ(17), _
champ(18), _
champ(19), _
champ(20), _
champ(21), _
champ(22), _
champ(23), _
champ(24)})
End While
MyReader.Close()

End Sub



Bonne suite
Commenter la réponse de Fabasia
Messages postés
172
Date d'inscription
lundi 22 mai 2006
Statut
Membre
Dernière intervention
19 janvier 2011
0
Merci
Merci
Commenter la réponse de gretata
0
Merci
Bonjour,

J'ai un petit soucis de la création d'un fichier texte.
Une erreur de compilation: type défini par l'utilisateur non défini.
L'erreur est sur cette ligne:
Dim GestionFichier As New Scripting.FileSystemObject
Voici le code:
Sub CreationFichierTexte()
Dim GestionFichier As New Scripting.FileSystemObject
Dim FichierTexte As Scripting.TextStream
If GestionFichier.FileExists("C:\Documents and Settings\asow\Desktop\Atelier\exemplecanada.txt") = False Then
Set FichierTexte = GestionFichier.CreateTextFile("C:\Atelier\exempleca.txt")
FichierTexte.WriteLine ("Train électrique")
FichierTexte.Close
End If
Set GestionFichier = Nothing
End Sub


Merci d'avance et bonne année
Commenter la réponse de gatagarim
0
Merci
J'ai un petit soucis de la création d'un fichier texte.
Une erreur de compilation: type défini par l'utilisateur non défini.
L'erreur est sur cette ligne:
Dim GestionFichier As New Scripting.FileSystemObject
Voici le code:
Sub CreationFichierTexte()
Dim GestionFichier As New Scripting.FileSystemObject Dim FichierTexte As Scripting.TextStream
If GestionFichier.FileExists("C:\Atelier\exempleca.txt") = False Then
Set FichierTexte = GestionFichier.CreateTextFile("C:\Atelier\exempleca.txt")
FichierTexte.WriteLine ("Train électrique")
FichierTexte.Close
End If
Set GestionFichier = Nothing
End Sub

Merci d'avance et bonne année
Commenter la réponse de gatagarim
0
Merci
1) Prendre FSO pour lire/écrire un fichier texte en VB.net, c'est une hérésie.
2) Quand on met deux instructions sur la même ligne, il faut mettre un dex-points (:) entre les deux.
Commenter la réponse de Utilisateur anonyme