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

C# Discussion :

Append + Modifier certaines lignes d'un fichier texte.


Sujet :

C#

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut Append + Modifier certaines lignes d'un fichier texte.
    Bonjour à tous,


    Je développe un petit utilitaire perso me permettant de modifier des fichiers de types Texte.

    Le soucis est que je dois modifier certaines lignes de ce fichier.

    Je récupère un streamwriter avec la méthode Append.
    Le soucis est que les writeLine m'écrivent mes données en fin de fichier et non à la position que je sélectionne avec Seek.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    m_StreamWriter = File.AppendText(m_strFichier);
                                                       m_StreamWriter.BaseStream.Seek(nPosNom, SeekOrigin.Begin);
                                                       m_StreamWriter.WriteLine(strLigneAmodifier + ";" + strNomChamp);
    // je lui rajoute mon nom, avec un ; en séparateur
     
    m_StreamWriter.Flush();
    m_StreamWriter.Close();
    Je souhaiterai donc savoir si je peux me positionner en écriture dans mon fichier en en modifier une ligne.

    Je conais peu C#, mais je suis développeur, donc je ferai des efforts !
    Je commence à me demander si je n'aurais pas du charger chaque ligne de mon fichier dans un tableau de string, en effet, la recherche serait simple, un index serait égal à une ligne, et je pourrais ré-écrire le contenu de ce tableau dans un fichier afin de "reconstituer" mon fichier nouvellement créer.

    Sauf si je peux continuer sur ma lancée avec les streamwriter.
    Qu'en pensez vous ?

    Merci beaucoup,

    Nixeus

  2. #2
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Salut.

    Le StreamWriter ne permet pas d'écrire "au milieu" d'un fichier.
    Comme tu y as pensé, tu vas être effectivement obligé de passer par un mécanisme de buffer pour faire tes modifications et réécrire ton fichier modifié.

    Bon courage

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Merci de ta réponse eusebe19,


    J'ai recodé le "moteur" de mon programme en passant par un ArrayList afin d'avoir un tableau de string dynamique.

    J'ai un seul petit soucis, petit, mais très génant.
    Le IndexOf ne fonctionne pas !

    En gros, je prend chaque ligne avec Readline, je les met une par une dans un élément de mon ArrayList.

    Ensuite, je fais un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    m_StreamRead = new StreamReader(@"c:\toto.txt");
     
    while (m_StreamRead.Peek() > 0)
    {
        strCurrentLigne.Add(m_StreamRead.ReadLine());
    }
     
    int nPosition;
    String myString = "[meschamps]";
     
    nPosition = strCurrentLigne.IndexOf(myString);
    Le soucis est nPosition me renvoie -1 au lieu de la position de l'occurence [meschamps].

    J'ai regardé en debug, mon Arraylist est pourtant bien alimenté ligne par ligne.

    Je ne comprend vraiment pas.

    Merci bcp

  4. #4
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Re.

    Question bête : as-tu bien vérifié le contenu de ton fichier ? Contient-il une ligne qui ne comporte que "[meschamps]" ?

    J'ai testé ton code avec le fichier suivant - super original - en entrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    djksdjcklsdj
    djksdjcklsdjdjksdjcklsdjdjksdjcklsdj
    djksdjcklsdjdjksdjcklsdj
    [meschamps]
    djksdjcklsdj
    djksdjcklsdj
    djksdjcklsdj
    Et ça fonctionne très bien

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Je viens de trouver !
    Alors, oui le fichier contiens bien l'occurence, mais il y avais un espace devant, et je pensais que la fonction IndexOf() cherchait une partie dans une string !

    Merci Encore.

    Petite question, pour un fichier de 30 000 lignes, un ArrayList n'est pas risqué ?
    En effet, dans mon traitement, tout se passe bien, mais le programme semble "perdre" les pédale arrivé à 24 000 lignes, il ne plante pas, mais mes numéros d'index de tableau ne sont plus en adéquation avec la ligne courante...

    Je cherche...

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Trouvé !

    Héhé,

    J'avais oublier le Flush() et le Close().

    Le fichier est complet, me reste plus qu'à régler mon soucis d'encodage ( oem) et c'est tout bon !

    En tout cas, c'est vraiment plus simple de bufferiser ca dans un tableau !!

    Encore Merci.

  7. #7
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Juste au passage, à part si tu es resté au framework 1, tu peux utiliser des List<string> à la place des ArrayList

    Niveau performances
    , surtout si tu traites de gros fichiers, ce sera meilleur

Discussions similaires

  1. Lire et modifier les lignes d'un fichier texte
    Par GCAccess dans le forum Windows Forms
    Réponses: 8
    Dernier message: 01/12/2009, 14h28
  2. [vb.net]Modifier une ligne d'un fichier texte
    Par Ykaar dans le forum VB.NET
    Réponses: 5
    Dernier message: 27/11/2008, 17h00
  3. Modifier une ligne d'un fichier texte?
    Par ecarbill dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/05/2007, 18h51
  4. Modifier une ligne d'un fichier texte
    Par lauben dans le forum C
    Réponses: 2
    Dernier message: 27/05/2006, 12h45
  5. Supprimer certaines lignes d'un fichier texte
    Par kek_net dans le forum Langage
    Réponses: 2
    Dernier message: 10/04/2006, 11h21

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