De la fusion de 2 Fichiers de Texte en C#
Tout d'abord, je voudrais juste mentionner que je n'ai commencé à apprendre le C# il y a quelques jours donc, ma connaissance est limitée.
Je suis en train de créer un programme qui s'occupe d'analyser les fichiers de texte pour certaines phrases entrée par l'utilisateur, puis de les exporter dans un nouveau document texte.
À l'instant, j'ai le programme de recherche de l'entrée d'origine du fichier et de collecte, la saisie de texte sélectionnée par l'utilisateur, l'adaptation de ces lignes, la création de nouveaux fichiers de texte, puis les fusionner ensemble et aussi de les supprimer par la suite.
Je devine que ce n'est pas le moyen le plus efficace de créer cette mais j'ai simplement créé et qu'il avait du travail dans une logique manoir pour moi de comprendre, en tant que novice.
Le code est comme suit;
private void TextInput1()
{
using (StreamReader fileOpen = new StreamReader(txtInput.Text))
{
using (StreamWriter fileWrite = new StreamWriter(@"*DIRECTORY*\FIRSTFILE.txt"))
{
string file;
while ((file = fileOpen.ReadLine()) != null)
{
if (file.Contains(txtFind.Text))
{
fileWrite.Write(file + "\r\n");
}
}
}
}
}
private void TextInput2()
{
using (StreamReader fileOpen = new StreamReader(txtInput.Text))
{
using (StreamWriter fileWrite = new StreamWriter(@"*DIRECTORY*\SECONDFILE.txt"))
{
string file;
while ((file = fileOpen.ReadLine()) != null)
{
if (file.Contains(txtFind2.Text))
{
fileWrite.Write("\r\n" + file);
}
}
}
}
}
private static void Combination()
{
ArrayList fileArray = new ArrayList();
using (StreamWriter writer = File.CreateText(@"*DIRECTORY*\FINALOUTPUT.txt"))
{
using (StreamReader reader = File.OpenText(@"*DIRECTORY*\FIRSTFILE.txt"))
{
writer.Write(reader.ReadToEnd());
}
using (StreamReader reader = File.OpenText(@"*DIRECTORY*\SECONDFILE.txt"))
{
writer.Write(reader.ReadToEnd());
}
}
}
private static void Delete()
{
if (File.Exists(@"*DIRECTORY*\FIRSTFILE.txt"))
{
File.Delete(@"*DIRECTORY*\FIRSTFILE.txt");
}
if (File.Exists(@"*DIRECTORY*\SECONDFILE.txt"))
{
File.Delete(@"*DIRECTORY*\SECONDFILE.txt");
}
}
Le fichier de sortie qui est créé est tout simplement la sortie de la première saisie de texte suivie par la seconde. Je me demande si c'est possible d'être en mesure de les fusionner dans 1 dossier, 1 ligne à la fois car c'est un consécutives fichier de sens d'avoir l'information à partir de l'Entrée 1 suivi 2 est nécessaire, plutôt que de tout de 1, alors tous les de 2.
Merci, Neil.
Vous pourriez faire à votre question d'une manière plus claire, parce que les réponses données, je pense, que I comprendre votre souhait différemment. Voulez-vous: la Lecture à partir de deux fichiers en parallèle et de faire la sortie en parallèle dans un seul fichier SANS avoir besoin de
merge
deux fichiers de sortie? C'est possible (et pas TROP difficile), même si on peut considérer que la lecture à partir de 2 fichiers (qui sont sur le même disque dur) en parallèle est généralement pas 2 fois plus rapide que la lecture 2 fichiers de manière séquentielle. Si vous êtes malchanceux, il sera beaucoup plus lent.Je suis désolé si je n'ai pas le rendre clair. @Steve a la bonne idée. Après les 2 fichiers sont créés, les fusionner 1 ligne à la fois le sens, I. E. la Ligne 1 - Fichier 1, Ligne 1 - Fichier 2, Ligne 2 - le Fichier 1, Ligne 2 - le Fichier 2.
OriginalL'auteur Sildeh | 2012-12-12
Vous devez vous connecter pour publier un commentaire.
De combiner les deux fichiers contenus dans un fichier fusionné ligne par ligne, vous pouvez remplacer votre Combinaison (code avec cette
Cela suppose que les deux fichiers ne contient le même nombre de lignes.
Les performances seraient touchés, puisque vous la lecture de toutes les données dans la chaîne.. au lieu de cela, vous pouvez créer la copie du premier fichier puis ajouter le second fichier à it au lieu de les garder deux fichier de données dans la mémoire, vous devez garder de un seul
OriginalL'auteur Steve
essayer cette méthode. Vous pouvez recevoir des trois chemins. Fichier 1, Fichier 2 et de sortie de Fichier.
Si le
pathResult
fichier existe, leWriteAllText
méthode va l'écraser. N'oubliez pas d'inclureSystem.IO
espace de noms.WriteAlltext()
et puis de l'autre(s) avecAppendAlltext()
Henk, merci pour l'astuce. Pour les très gros fichiers, serait une belle pratique pour charger tout le contenu dans un StringBuilder et de sortie avec 1x
WriteAllText
méthode?Non, un StringBuilder aurait (presque) la même pression sur la mémoire.
OriginalL'auteur Felipe Oriani
Si vos fichiers en entrée sont très grandes et vous manquez de mémoire, vous pouvez également essayer d'emballage les deux lecteurs comme ceci:
Encore, vous devez avoir une idée du nombre de lignes que vous avez dans vos fichiers d'entrée, mais je pense que ça vous donne l'idée générale de procéder.
OriginalL'auteur Omnibus
À l'aide d'un
FileInfo
extension vous pouvez fusionner un ou plusieurs fichiers en procédant comme suit:Utilisation
OriginalL'auteur LukeHennerley