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 :

Modification fichier Texte


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 98
    Par défaut Modification fichier Texte
    Bonjour
    J'ai une liste de fichier texte (des centaines de fichier);
    Je voudrai faire un programme qui lit les fichier un à un et modifier certains information dans tous les lignes. Donc:
    1.Je crée un fichier tmp pour chaque fichier existant.
    2. je lit chaque fichier ligne à ligne je modifier et j'écris dans le fichier tmp.
    3. je supprime le fichier existant.
    4. Je renomme le fichier tmp.
    ma question est ce que c'est le bon algorithme car l'exécution c'est long. est ce que il y a d'autre moyenne à faire la modification sans passer par un fichier tmp.

    voila le code que j'utilise
    Code : 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    ....
                StreamReader sr = null;
                StreamWriter sw = null;
                System.Text.Encoding ANSI = System.Text.Encoding.GetEncoding(1252); 
                string ligne;
                try
                {
                    //fichier Sitetic
                    for (int i = 0; i < fichierSitetic.Length; i++)
                    {
                        cheminFichier = fichierSitetic[i];
                        fichierTmp = cheminFichier.Replace(".txt", "_tmp.txt");
                        sr = new StreamReader(cheminFichier);
                        sw = new StreamWriter(fichierTmp,true,ANSI);
                        ligne = sr.ReadLine();                    
                        while (ligne != null)
                        {
                            if (numLigne == 0) sw.WriteLine(ligne);     
                            else
                            {
                                string [] tabLigne = ligne.Split(';');
                                tabLigne[3] = "999";
                                tabLigne[4] = "MIM";
                                //transformer une table à un string 
                                string nouvLigne = string.Join(";", tabLigne);
                                sw.WriteLine(nouvLigne);
                            }
                            ligne = sr.ReadLine();
                            numLigne++;                       
                        }
                        sr.Close();
                        sw.Close();
                        File.Delete(cheminFichier);
                        File.Move(fichierTmp, cheminFichier);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    // Fermeture streamreader
                    if (sr != null) sr.Close();
                    // Fermeture streamwriter
                    if (sw != null) sw.Close();
                }
    merci d'avance.

  2. #2
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Si tes fichiers ne sont pas trop grands, essaie comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
          string[] lignes;
          string[] ligne;
          lignes = File.ReadAllLines("monFichier", Encoding.ASCII);
          for (int i = 1; i < lignes.Length; i++)
          {
            ligne = lignes[i].Split(';');
            ligne[3] = "999";
            ligne[4] = "MIM";
            lignes[i] = string.Join(";", ligne);
     
          }
          File.WriteAllLines("monFichier", lignes, Encoding.ASCII);

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 98
    Par défaut
    Merci de ta réponse mais malheureusement les fichier sont très grand 450 milles ligne au moyenne.

  4. #4
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    est ce que c'est le bon algorithme car l'exécution c'est long
    A priori, oui.
    Peut-être que le traitement de chaque ligne (Split et Join) prend du termps.

    Gagne-t'on un temps significatif sans traiter la ligne, c.à.d. en faisant simplement "sw.WriteLine(Ligne);" ?

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Citation Envoyé par Graffito Voir le message
    A priori, oui.
    Peut-être que le traitement de chaque ligne (Split et Join) prend du termps.

    Gagne-t'on un temps significatif sans traiter la ligne, c.à.d. en faisant simplement "sw.WriteLine(Ligne);" ?
    +1

    La premiere chose a faire c'est de voir quel traitement prends le plus de temps

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 98
    Par défaut
    j'ai essayé ce matin sans split et Join mais je gagne pas trop de temps. à mon avis c'est les opération de lire et d'écrire qui prend plus de temps. j'ai lu un truc sur JAVA qu'on puisse utilisé les Bugffer je vais regarder sa et je vous tient au courant.

  7. #7
    Membre expérimenté Avatar de g_tarik0010
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 186
    Par défaut
    Je ne sais pas si ca va t'aider mais tu peux lancer le traitement sur plusieurs threads en même temps le multithreading peut s'avérer une bonne solution aux traitement longs

  8. #8
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Citation Envoyé par g_tarik0010 Voir le message
    Je ne sais pas si ca va t'aider mais tu peux lancer le traitement sur plusieurs threads en même temps le multithreading peut s'avérer une bonne solution aux traitement longs
    Si la lenteur est liée aux IO multiplier les thread ne t'aidera en rien ou contraire !

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

Discussions similaires

  1. [WD12] modification fichier texte
    Par cgr_007 dans le forum WinDev
    Réponses: 8
    Dernier message: 15/03/2010, 01h19
  2. Modification fichier texte base de donnée
    Par usermap dans le forum C#
    Réponses: 2
    Dernier message: 16/04/2009, 21h28
  3. Shell - Modification fichier texte
    Par bahaaldine dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 28/10/2007, 13h24
  4. Réponses: 6
    Dernier message: 15/12/2006, 19h29

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