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 :

[1.1]Remplacer un caractère par un autre dans un fichier


Sujet :

C#

  1. #1
    Membre confirmé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Points : 601
    Points
    601
    Par défaut [1.1]Remplacer un caractère par un autre dans un fichier
    Bonjour,

    J'ai un fichier beaucoup trop gros (80 millions de lignes) pour utiliser un String.Replace(...), et je dois cependant changer un caractère (le fin de ligne unix en fin de ligne windows...).

    Avez-vous une idée sur comment faire s'il-vous-plait ?

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Bonjour,

    Lecture du fichier ligne par ligne, modification du code et sauvegarde ligne par ligne dans un nouveau fichier ?

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    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
     
    StreamReader myRead = new StreamReader("chemin_ton_fichier");
    StreamWriter myWrite = new StreamWriter("chemin_ton_nouveau_fichier", false, Encoding.Default);
     
                while (!myRead.EndOfStream)
                {
                    string szValeur = myRead.ReadLine();
     
                    if(szValeur=="ta_valeur")
                        myWrite.WriteLine("ta_nouvelle_valeur");
                    else
                        myWrite.WriteLine(szValeur);
     
                }
     
                myWrite.Dispose();
                myRead.Dispose();

  4. #4
    Membre confirmé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Points : 601
    Points
    601
    Par défaut
    Merci !

    J'ai adapté ceci à mon besoin (et "EndOfStream" ne semble pas exister, et les dispose() ne sont pas accessibles), et j'ai le résultat attendu, du moins pour des petits fichiers.

    Je me posais la question : la lecture ligne à ligne permet de traiter un fichier sans avoir à l'ouvrir entièrement ? Parce qu'avec les fichiers de plusieurs Go que je peux avoir à manipuler, ça m'embêterai de devoir les charger dans la RAM du serveur ;o)


    Je donne mon code pour ceux que ça interresse :
    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
     
    		protected void TransformFile(string filename)
    		{
    			StreamReader myRead = null;
    			StreamWriter myWrite = null;
     
    			try
    			{
    				myRead = new StreamReader(filename);
    				myWrite = new StreamWriter(filename + "new", false, System.Text.Encoding.Default);
     
    				string szValeur = myRead.ReadLine();
     
    				while (szValeur != null)
    				{
    					szValeur = myRead.ReadLine(); 
    					myWrite.WriteLine(szValeur); 
    				}
     
    				myWrite.Flush();
    			}
    			finally
    			{
    				if(myRead != null)
    					myRead.Close();
     
    				if(myWrite != null)
    					myWrite.Close();	
    			}
    		}

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 62
    Points : 73
    Points
    73
    Par défaut
    tu fais un readline() de trop

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    string szValeur = myRead.ReadLine();
     
    	while (szValeur != null)
    	{
    		szValeur = myRead.ReadLine(); 
    		myWrite.WriteLine(szValeur); 
    	}
    du coup du perd la valeur du premier readline

    fais plutot comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while ((szValeur= myRead.ReadLine())!= null)
    {
    myWrite.WriteLine(szValeur); 
    }
    et oui ca ne monte pas tout le fichier en memoire, heureusement

  6. #6
    Membre confirmé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Points : 601
    Points
    601
    Par défaut
    super merci ! 8o)

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 21/01/2010, 22h03
  2. Réponses: 11
    Dernier message: 06/04/2009, 01h46
  3. Réponses: 1
    Dernier message: 08/02/2009, 23h18
  4. Remplacer un caractère par un autre dans une String
    Par djack44 dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 12/03/2008, 15h16
  5. Réponses: 3
    Dernier message: 21/07/2007, 01h48

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