Lecture d'un fichier ligne par ligne, donne un resultat trim

Résolu
gretata Messages postés 172 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 19 janvier 2011 - 1 déc. 2010 à 10:45
 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

 

8 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Modérateur Dernière intervention 15 juillet 2011 37
1 déc. 2010 à 13:45
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.
3
gretata Messages postés 172 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 19 janvier 2011
1 déc. 2010 à 14:10
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 ?
0
gretata Messages postés 172 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 19 janvier 2011
1 déc. 2010 à 14:41
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
0
Fabasia Messages postés 45 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 17 août 2012
2 déc. 2010 à 03:46
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
0

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

Posez votre question
gretata Messages postés 172 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 19 janvier 2011
2 déc. 2010 à 09:10
Merci
0
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
0
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
0
Utilisateur anonyme
2 janv. 2013 à 17:17
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.
0