c# Comparer deux fichiers texte et d'en générer un nouveau, avec des différences
Je suis à la recherche de la meilleure façon de comparer 2 fichiers texte (+-15000lines) rapidement et d'obtenir en sortie des chaînes de caractères qui sont différentes dans les deux fichiers.
1er est un vieux stock, est celui de l'inventaire actuel, et je voudrais générer un troisième contenant des chaînes de caractères qui sont différents entre les fichier2 & fichier1. (95% des 2 fichiers seront similaires).
Pouvez-vous décrire ce que "similaire" signifie dans ce cas? Et avez-vous besoin pour ce faire de la programmation, ou vous voulez juste un outil pour faire une diff (comme WinMerge)?
Il sera essentiellement le même dans le même ordre, mais peuvent être manquants, l'objectif est de faire de la programmation, merci.
Il sera essentiellement le même dans le même ordre, mais peuvent être manquants, l'objectif est de faire de la programmation, merci.
OriginalL'auteur OwenS | 2012-11-08
Vous devez vous connecter pour publier un commentaire.
Approche très simple, en supposant que similaire signifie l'égalité des:
Vous pouvez utiliser
foreach
pour énumérer les lignes.Notez que vous avez besoin de matérialiser la requête, par exemple via des
ToList()
ou de l'utilisationFile.ReadAllLines
au lieu d'éviter uneObjectDisposedException
si vous souhaitez utiliser les deux séquences. LeFile.ReadLines
les ruisseaux de la lignes et une fois que vous avez terminé le flux sous-jacent se ferme. Je vais les montrerReadLines
néanmoins parce que c'est le meilleur choix en termes de consommation de mémoire.N'est-il pas une différence de performance entre ReadLines & ReadAllLines ? Si aucune différence pour un fichier de 15000l je vais utiliser readAllLines, Merci
Il y a une grande différence:
ReadLines
sera diffuser les lignes(comme unStreamreader
) alors queReadAllLines
va lire tous lignes dans unString[]
(dans la mémoire). Donc, la première de ne pas utiliser la mémoire et la deuxième met tous en mémoire. Donc, si vous avez assez de mémoire et le fichier n'est pas trop grande, vous pouvez utiliserFile.ReadAllLines
. Notez que la consommation de mémoire et ne sont pas nécessairement liés.je sais que c'est une vieille question, mais comment allez-vous faire de gros fichiers par exemple de 1 go ou plus? j'ai essayé cette réponse et finit par sortir de la mémoire d'exception spécialement lorsque l'on travaille avec ienumerable
OriginalL'auteur Rango
Vous pouvez utiliser cette diff de la bibliothèque de la part de Google. Regardez les diff_main méthode qui prend les 2 chaînes de caractères et retourne une liste de différences.
OriginalL'auteur Therion
Si la sortie est dans le même ordre, de les comparer directement. Vous pouvez avoir besoin de sauter la ligne lorsque la valeur est manquante dans l'autre fichier.
Si, toutefois, la sortie n'est pas la même, alors vous pourriez avoir besoin de charger les fichiers dans la mémoire et rechercher l'inventaire élément d'un fichier à l'autre. Puis faire ce que vous avez besoin quand introuvable ou différents.
L'inventaire contient essentiellement de la liste de l'annuaire avec les paramètres, si des fichiers ont été supprimés, il y aura un article manquant, mais l'ordre est le même, merci.
OriginalL'auteur Kami