Toutoune DevZone

.NET (C#)

Remplacement de chaîne dans un fichier

Actuellement je travaille sur des fichiers XML de 8-10 Mo. Je remplace des chaînes de caractères par-ci par-là. Mon souci est simple, comment faire pour remplacer un bout de texte sans perdre trois jours ?

  • Visual Studio prend des ressources astronomiques et un temps fou à cause de toute la mise en page graphique du fichier XML et de sa gestion du retour à l'état précédent... Autrement dit, remplacer une chaîne selon une expression régulière me laisse à chaque fois le temps de faire une petite sieste et occupe jusqu'à 550 Mo de ma RAM, si j'ai le malheur d'avoir 2 de ces fichiers ouverts.
  • Mon fidèle notepad croule sous la tâche avec un simple remplacement de chaîne.

Du coup, j'ai fait une petite appli en C# (Framework 2.0) qui permet de remplacer du texte en ligne de commande selon une chaîne classique de caractères ou une expression régulière. Sur mes fichiers de 8-10Mo, le résultat est quasi instantanné.

StrReplace.exe ExpressionATrouver Remplacement FichierSource [FichierDestination]

Voici le code :

using System;
using System.IO;
using System.Text.RegularExpressions;

namespace StrReplace
{
    public class Program
    {
        static void Main(string[] args)
        {
            if (args.Length < 3)
            {
                Console.WriteLine("\nStrReplace.exe OldExpr NewExpr FileSrc [FileDest]");
                return;
            }


            string oldExpr     = args[0];       // String or RegEx pattern to find
            string newExpr     = args[1];       // Replacement
            string strFileSrc  = args[2];       // Source filename
            string content     = string.Empty;  // Source file content
            string strFileDest = string.Empty;  // Destination filename if different


            // Reading of the Source
            using(StreamReader FileSrc = new StreamReader(strFileSrc))
            {
                content = FileSrc.ReadToEnd();
                FileSrc.Close();
            }


            Regex ex = new Regex(oldExpr);
            content = ex.Replace(content, newExpr);

           
            // Check of the destination file
            if (args.Length > 3)
                strFileDest = args[3];
            else
                strFileDest = strFileSrc;


            // Creation/replacement of the destination file.
            using (StreamWriter FileDest = new StreamWriter(strFileDest))
            {
                FileDest.Write(content);
                FileDest.Close();
            }
        }
    }
}

En espérant que ça vous serve. Si vous avez des commentaires, n'hésitez pas.

Attachment: StrReplace.zip
Posted: oct. 09 2006, 01:55 par Toutoune_31 | avec no comments
Classé sous :

Commentaires

Pas de commentaires

Laissez un commentaire

(requis) 

(requis) 

(optionel(le))

(requis)