6
votes

J'ai besoin d'un outil pour trouver des doublons ou des blocs similaires de texte dans un fichier texte singulier ou un ensemble de fichiers texte

Je veux automatiser le double duplicata ou le code C similaire dans des fonctions.

Cela doit travailler sous Linux.


3 commentaires

Je préconiserais d'utiliser un outil pour identifier simplement des sections similaires de code. L'automatisation de ce type de refactoring demande des problèmes.


Duplicaté possible: Stackoverflow.com/questions/546487/... < / a>


Idem pour C ++: Stackoverflow.com / Questions / 191614 / ...


6 Réponses :


4
votes

Un sous-ensemble de votre problème: détecter le code dupliqué:

Essayez: PMD

Le code dupliqué peut être difficile à trouver, en particulier dans un vaste projet. Mais le détecteur de copie / pâte de PMD (CPD) peut le trouver pour vous! Le CPD a traversé trois incarnations majeures:

  • Nous l'avons d'abord écrit en utilisant une variante de l'algorithme de carrelage gourmand à chaîne gourmand de Michael Wise (Notre variante est décrite ici)
    • Puis il a été complètement réécrit par Brian Ewins à l'aide de la transformation de Burrows-Wheeler
    • Enfin, il a été réécrit par Steve Hawkins pour utiliser l'algorithme correspondant à cordes Karp-Rabin.

      ...

      Notez que la CPD fonctionne avec le code Java, JSP, C, C ++, FORTRAN et PHP.


1 commentaires

J'ai utilisé le CPD pour des tâches similaires dans le code Java. La sortie peut être XML, il est donc «facile» d'automatiser.



1
votes

Vous voulez jeter un coup d'œil à SIMIAN . C'est gratuit pour des projets non commerciaux. Essayez quelque chose comme: xxx


2 commentaires

Le lien de ce message est cassé maintenant. : /


Correction du lien.



1
votes

SIMIAN (noté précédemment) est un bon outil pour cela. J'utilise CloneDeTective sur mon projet et ça fonctionne bien. Clondetective est libre, il ne peut donc pas faire mal de le faire essayer.


0 commentaires

1
votes

Sachez que vous ne pouvez pas simplement comparer des lignes de texte. Vous devrez analyser le code, de cette manière, vous pouvez également détecter des segments sémantiquement corrects, mais peut avoir des identificateurs nommés différents.

Par exemple, donnée deux fonctions équivalentes mais utilisez différents identifiants, une recherche de texte ne les verra pas comme identique, mais un analyseur peut.

Notez également que la rédaction d'un analyseur C ++ n'est pas une tâche triviale, même lorsqu'elle est donnée la grammaire. Je suggère les conseils des autres et je recherche un outil pour cela. Également la recherche d'outils de refactoring.


1 commentaires

Thomas est correct: vous voulez un analyseur et des analyseurs de construction sont assez difficiles pour de vrais langatuges. Voir Clonedr Réponse pour un outil de détection de clone qui analyse et gère C et C ++.



1
votes

voir Clonedr , un outil de recherche de la copie exacte et proche de la manquante (Copy-coller -Dit) clones dans le code source. Il utilise des analyseurs de langue complète pour lui permettre de trouver des clones en fonction de la structure linguistique, de minimiser les faux positifs et d'être complètement indûment de la manière dont le code est commenté ou formaté, maximing la vraie détection. Le clonedr trouvera des clones lorsque le bloc cloné a changé de variable, insérée des statemens ou des blocs de code.

Il a des extrémités avant la langue pour C, C ++, Cobol, C #, Java, PHP et un certain nombre d'autres langueurs.

Vous pouvez voir des exemples de rapports de détection de clone sur le site Web.


0 commentaires

0
votes

https://github.com/hudayou/fib

outil pour trouver des blocs de code identiques dans un fichier ou un répertoire.


0 commentaires