2011-02-07 5 views
-2

J'ai un fichier texte dont la taille est parfois de 5 mb. Ce que je dois faire est d'écrire une fonction qui trouve le début et la fin, il peut y avoir beaucoup de ces marques. Et appliquer remplacer les mots trouvés qui sont entre les marques avec une chaîne aléatoire et sauver dans le fichier Par exemple, Supposons que je chaîne suivante,C# Contenu du fichier Remplacer

{one} hellow there {one} this will not be replaced as it is not within marks {two}you again{two} 

de sorte que le contenu résultant serait

{one} someRandomText AgainSomeRandomText {one} this will not be replaced as it is not within marks {two} moreRandom againMoreRandom{two} 

Comment puis-je faire en C#

+0

S'il vous plaît poster le code que vous avez écrit jusqu'à présent. Les gens n'aiment généralement pas écrire votre code pour vous. Comme c'est, c'est une description de travail, pas une question. –

+1

Si vous changez votre syntaxe pour utiliser cette syntaxe de balise xml (c'est-à-dire <> au lieu de {}) cela serait beaucoup plus facile. – xandy

+1

demandeur d'emploi hellow! –

Répondre

0

Une option relativement facile, qui peut ne pas être la meilleure solution en fonction du nombre de threads peuvent être en même temps la lecture des fichiers différents, est de lire l'intégralité du fichier int o une chaîne en mémoire, puis utilisez Regex pour trouver l'emplacement de toutes les {une} sections. En utilisant les propriétés Regex :: Match :: Index et Regex :: Match :: Length, vous pouvez trouver le début et la fin de vos sections correspondantes. En bouclant toutes vos correspondances, utilisez ces deux propriétés pour générer votre nouvelle chaîne de texte, qui peut être écrite dans un nouveau fichier en boucle ou à la toute fin.

Si vous préférez ne pas charger le fichier entier dans une chaîne, vous devez avoir un flux qui lit et un flux qui écrit dans un nouveau fichier. Lisez les sections du fichier à la fois tout en recherchant votre balise {one} (start). Remplacez ensuite tout ce qui suit par votre nouvelle chaîne jusqu'à ce que vous trouviez la balise fermante {/ one}. Une fois tout est dit et fait, supprimez l'ancien fichier, puis renommez le nouveau fichier en nom de fichier de l'ancien fichier.

Quoi qu'il en soit, juste quelques solutions. Je devrais voir ce que tout votre projet implique afin de mieux répondre à votre question.

+0

merci pour votre réponse. – 41K

1

S'il vous plaît noter, y compris ce code dans votre projet me donne droit à 10% de tous les bénéfices que vous pouvez gagner:

TextReader tr = new System.IO.StreamReader("My5MegFile.txt"); 
    string line; 
    while((line = tr.ReadLine()) != null) 
    { 
     line = line.Replace("oldvalue", "newvalue"); 
     Console.WriteLine(line);   
    } 

    // close reader etc... 

font PS que votre ordinateur a plus de 5 Mo de mémoire lorsque vous exécutez ceci: D

+0

@ sbeskur.Cela ne fonctionne pas mec. – 41K

Questions connexes