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

Windows Forms Discussion :

Coincée : Comment ajouter des retours à la ligne dans un fichier texte ?


Sujet :

Windows Forms

  1. #1
    Candidat au Club
    Femme Profil pro
    Directeur de projet
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Coincée : Comment ajouter des retours à la ligne dans un fichier texte ?
    Bonjour tout le monde,
    Je suis bloquée sur un problème VB : je dois traiter des fichiers textes dans la longueur de chaque ligne est fixe (100 caractères systématiquement)

    Seulement, je peux également avoir des fichiers, donts les enregistrements sont concaténés (pas de retour à la ligne après les 100 caractères)

    Je souhaiterais, alors, pour les inclure dans le traitement standard, faire un prétraitement consistant à ajouter un retour à la ligne, tous les 100 caractères.

    Comment faire en visual baisic (visual studio 2010 ) ? J'ai beau regardé leur documentation en vain.

    Pour illustrer le cas, je vous donne un exemple sur 10 caractères au lieu de 100.

    Les fichiers standards sont du genre :
    1234567890
    2345678901
    3456789012

    Mais je peux avoir un fichier, contenant des données mais concaténées en une seule ligne :

    123456789023456789013456789012

    MERCI à tous !

  2. #2
    Candidat au Club
    Femme Profil pro
    Directeur de projet
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Juste une petite précision :
    Le fichier peut être de plusieurs Mo donc, il est difficile d'envisager de traiter tout le contenu du fichier dans une variable String.

    Citation Envoyé par Alphacom Voir le message
    Bonjour tout le monde,
    Je suis bloquée sur un problème VB : je dois traiter des fichiers textes dans la longueur de chaque ligne est fixe (100 caractères systématiquement)

    Seulement, je peux également avoir des fichiers, donts les enregistrements sont concaténés (pas de retour à la ligne après les 100 caractères)

    Je souhaiterais, alors, pour les inclure dans le traitement standard, faire un prétraitement consistant à ajouter un retour à la ligne, tous les 100 caractères.

    Comment faire en visual baisic (visual studio 2010 ) ? J'ai beau regardé leur documentation en vain.

    Pour illustrer le cas, je vous donne un exemple sur 10 caractères au lieu de 100.

    Les fichiers standards sont du genre :
    1234567890
    2345678901
    3456789012

    Mais je peux avoir un fichier, contenant des données mais concaténées en une seule ligne :

    123456789023456789013456789012

    MERCI à tous !

  3. #3
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    Bonjour,

    Rajoute les caractère "\r\n" qui sont les caractère standart de retour à la ligne.
    http://fr.wikipedia.org/wiki/Retour_chariot
    https://fr.wikipedia.org/wiki/Fin_de_ligne
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  4. #4
    Candidat au Club
    Femme Profil pro
    Directeur de projet
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par worm83 Voir le message
    Bonjour,

    Rajoute les caractère "\r\n" qui sont les caractère standart de retour à la ligne.
    http://fr.wikipedia.org/wiki/Retour_chariot
    https://fr.wikipedia.org/wiki/Fin_de_ligne
    Merci pour ta réponse.

    Mon souci est justement :
    comment ajouter ces caractère aux emplacements précis .

    Je sais pas comment, en VB , parcouri un fichier en indiquant : lire 10 caractères à chaque fois.

    Théoriquement l'algorithme que j'imagine c'est :
    Tant que non fin du fichier :
    Lire 10 caractères
    Lire la caractère suivant (11ème)
    Si c'est un \r ou \n passer à la ligne suivante
    Si c'est un numérique , ajouter \r \n
    Passer aux 10 caractères suivant

  5. #5
    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
    Tu peux retraiter ton fichier, ligne par ligne et utiliser par exemple un StringBuilder :

    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
    27
    28
    29
    Dim fileLines = New StringBuilder()
     
    Using sr = New StreamReader("Data.txt")
        While sr.Peek() <> -1
            ' On lit la ligne
            Dim line = sr.ReadLine()
     
            ' Si la longueur est de 10 caractères...
            If line.Length = 10 Then
                ' On ajoute directement la ligne dans le StrinBuilder.
                ' AppendLine permet de rajouter le retour à la ligne automatiquement.
                fileLines.AppendLine(line)
            ' Si la longueur est supérieure à 10 caractères...
            ElseIf line.Length > 10 Then
                ' On compte le nombre de valeurs présentes dans la ligne
                Dim numberOfValues = line.Length / 10
                For i As var = 0 To numberOfValues - 1
                    ' On récupère la première valeur
                    Dim value = line.Substring(0, 10)
     
                    ' On la rajoute au StringBuilder, avec le retour à la ligne
                    fileLines.AppendLine(value)
     
                    ' On supprime la valeur qu'on vient de traiter pour passer à la suivante
                    line = line.Remove(0, 10)
                Next
            End If
        End While
    End Using
    Ensuite, tu peux utiliser un StreamWriter afin d'écrire le contenu du StringBuilder dans ton fichier d'origine, ou tu peux aussi travailler directement sur le string selon ton besoin...
    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.

  6. #6
    Candidat au Club
    Femme Profil pro
    Directeur de projet
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup,
    Je vais essayer ceci et te dire comment ça marché.
    A la rigueur, ça me dérangerais pas de créer un Fichier.TEMP pour y mettre les enregistrements avec retour à la ligne.
    Encore merci


    Citation Envoyé par worm83 Voir le message
    Bonjour,

    Rajoute les caractère "\r\n" qui sont les caractère standart de retour à la ligne.
    http://fr.wikipedia.org/wiki/Retour_chariot
    https://fr.wikipedia.org/wiki/Fin_de_ligne
    Citation Envoyé par DotNetMatt Voir le message
    Tu peux retraiter ton fichier, ligne par ligne et utiliser par exemple un StringBuilder :

    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
    27
    28
    29
    Dim fileLines = New StringBuilder()
     
    Using sr = New StreamReader("Data.txt")
        While sr.Peek() <> -1
            ' On lit la ligne
            Dim line = sr.ReadLine()
     
            ' Si la longueur est de 10 caractères...
            If line.Length = 10 Then
                ' On ajoute directement la ligne dans le StrinBuilder.
                ' AppendLine permet de rajouter le retour à la ligne automatiquement.
                fileLines.AppendLine(line)
            ' Si la longueur est supérieure à 10 caractères...
            ElseIf line.Length > 10 Then
                ' On compte le nombre de valeurs présentes dans la ligne
                Dim numberOfValues = line.Length / 10
                For i As var = 0 To numberOfValues - 1
                    ' On récupère la première valeur
                    Dim value = line.Substring(0, 10)
     
                    ' On la rajoute au StringBuilder, avec le retour à la ligne
                    fileLines.AppendLine(value)
     
                    ' On supprime la valeur qu'on vient de traiter pour passer à la suivante
                    line = line.Remove(0, 10)
                Next
            End If
        End While
    End Using
    Ensuite, tu peux utiliser un StreamWriter afin d'écrire le contenu du StringBuilder dans ton fichier d'origine, ou tu peux aussi travailler directement sur le string selon ton besoin...

  7. #7
    Candidat au Club
    Femme Profil pro
    Directeur de projet
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Juste une petite question. sur le code de DotNetMatt

    L'assignation :
    Dim line = sr.ReadLine()


    est-elle valide dans tous les cas, où y a-t-il risque que cela lève une exception si la taille du fichier est importante et que le tous tient sur une et une seule ligne ?

    Autrement dit :
    Quelle est la valeur max imale de la variable "line" ou généralement d'une chaine string ?

  8. #8
    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 Alphacom Voir le message
    Quelle est la valeur max imale de la variable "line" ou généralement d'une chaine string ?
    Comme la propriété String.Length est de type Int32, il peut y avoir jusqu'à 2 147 483 647 caractères (c'est la valeur maximale d'un int), soit 2 Gb (grosso modo hein). Mais bon, ça, c'est la théorie. En pratique, ça doit être un petit peu moins, car il n'est pas évident de pouvoir obtenir une allocation en mémoire de 2 Gb...

    [EDIT1] : Pour travailler avec de gros fichiers, et si tu es en .NET 4 (ou +), tu peux regarder du côté de System.IO.MemoryMappedFile :
    Citation Envoyé par MSDN
    A memory-mapped file maps the contents of a file to an application’s logical address space. Memory-mapped files enable programmers to work with extremely large files because memory can be managed concurrently, and they allow complete, random access to a file without the need for seeking. Memory-mapped files can also be shared across multiple processes.
    [EDIT2] : Sinon tu peux aussi lire ton fichier par block, en utilisant la méthode StreamReader.ReadBlock :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char[] buffer = new char[10];
    sr.ReadBlock(buffer, 0, 10);
    Là, tu n'as pas à te soucier des retours à la ligne, puisque tu vas récupérer 10 caractères à la fois, et il ne tiendra pas compte de "\r\n".
    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.

  9. #9
    Candidat au Club
    Femme Profil pro
    Directeur de projet
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Merci beaucoup , ça marche à merveille.

    J'ai pris un peu de temps pour faire un retour, mais j'ai dû monter des tests avec des fichiers de + en + gros. Pas mal, ça a l'air de bien tenir.

    DotNetMatt : Aurais-tu une idée comment gérer le cas où plusieurs retours à la lignes séparent un enregistreùent d'un autre?

  10. #10
    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 Alphacom Voir le message
    Bonjour,

    Merci beaucoup , ça marche à merveille.

    J'ai pris un peu de temps pour faire un retour, mais j'ai dû monter des tests avec des fichiers de + en + gros. Pas mal, ça a l'air de bien tenir.
    Content que ça marche

    Citation Envoyé par Alphacom Voir le message
    DotNetMatt : Aurais-tu une idée comment gérer le cas où plusieurs retours à la lignes séparent un enregistreùent d'un autre?
    Ca dépend de la méthode que tu as utilisé, mais si tu fais la lecture ligne par ligne, tu peux regarder si la ligne en cours contient quelque chose ou non. Si oui, tu lis, si non, tu passes à la suivante.
    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.

Discussions similaires

  1. [Débutant] Retour à la ligne dans un fichier texte
    Par melleb dans le forum MATLAB
    Réponses: 2
    Dernier message: 23/05/2011, 10h39
  2. [PHP 5.3] Ajouter des sauts de ligne dans un fichier XML
    Par geforce dans le forum Langage
    Réponses: 4
    Dernier message: 08/04/2010, 15h32
  3. Problème de retour à la ligne dans un fichier texte
    Par Pedrozito dans le forum MATLAB
    Réponses: 4
    Dernier message: 14/04/2008, 15h46
  4. [XSLT] retour à la ligne dans un fichier texte
    Par SylMat dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 22/03/2007, 11h39
  5. retour à la ligne dans un fichier texte
    Par pierrOPSG dans le forum C
    Réponses: 3
    Dernier message: 14/04/2006, 18h04

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