AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte DoubleSource - Duplikate im Source finden v0.4.1
Thema durchsuchen
Ansicht
Themen-Optionen

DoubleSource - Duplikate im Source finden v0.4.1

Ein Thema von Motzi · begonnen am 5. Mär 2008 · letzter Beitrag vom 15. Mär 2008
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von Motzi
Motzi
Registriert seit: 6. Aug 2002
Hi,

erstmal vorweg - ich weiß, dass es so ein Programm vor kurzem schonmal hier gab (DupeChecker). Tatsächlich hat mich dieses Programm sogar dazu inspiriert meine eigene Version zu schreiben, da ich in einigen Punkten nicht ganz glücklich damit war (siehe dazu mein Posting im Thread zu dem Programm).
Ich habe daher beschlossen mein eigenes Programm zu schreiben und versucht die von mir kritisierten Punkte zu verbessern.

Features:
  • Sehr schnelle Duplikatssuche
  • Kommentare werden vor dem Vergleichen entfernt -> unterschiedliche Kommentare in identischen Codeblöcken spielen keine Rolle mehr; auskommentierter Code wird nicht als Duplikat erkannt
  • "Überflüssige" Leerzeichen werden vor dem Vergleichen ebenfalls entfernt (aus "i : integer ;" wird "i:integer;") -> Unterschiede in der Formatierung werden ignoriert
  • Übersichtliche Aufbereitung der Ergebnisse in einem Treeview
Anmerkung: Treeview Einträge die kursiv sind sind "Subduplikate", sie sind also ein Teil eines größeren Duplikats. Diese werden nur dann angezeigt, wenn sie identisch mit anderen gefundenen Dupliakten sind, die selbst keine Subdupliakte sind.

v0.4.1
  • Speicherverbrauch wurde drastisch gesenkt
  • Geschwindigkeit wurde um das 4-5 fache gesteigert
  • Rekursive Suche in Unterordnern kann optional deaktiviert werden
  • Comboboxen wurden durch "erweiterte" Versionen ersetzt
  • Es wird nun überall der volle Pfad als Hint angezeigt

v0.3.1
  • Analyse findet nun in einem eigenen Thread statt und kann abgebrochen werden
  • Geschwindigkeit wurde nochmals gesteigert
  • Speicherverbrauch wurde deutlich reduziert
  • Splitter-Problem beseitigt
  • Die Schriftart des Treeview wurde auf Verdana umgestellt - damit gibt es keine Probleme mit den kursiven Zahlen mehr.

v0.2.2
  • Es gibt jetzt eine SettingsForm - die Einstellungen werden in einer ini-Datei und einer txt-Datei gespeichert (siehe weiter unten)
  • Alle Sources eines Duplikats können nun in einem eigenen Fenster direkt verglichen werden
  • Sowohl im "Compare-Fenster" als auch in der MainForm werden die Duplikate im Source durch eine eigene Hintergrundfarbe gekennzeichnet
  • Duplikate die nur aus Keywords bestehen können ignoriert werden
  • Geschwindigkeit wurde um das bis zu 4-fache beschleunigt
Folgende Einstellungen sind möglich:
  • Minimale Zeilenanzahl
  • Extensions der Files die beim Durchsuchen von Ordnern berücksichtigt werden sollen
  • Ignorieren von Duplikaten die nur aus Keywords bestehen
  • Es sollen nur Zeilen gezählt werden die nicht nur aus einem Keyword bestehen (betrifft minimale Zeilenanzahl)
  • Liste der Keywords die ignoriert werden sollen - betrifft die beiden obigen Einstellungen (diese List wird in keywords.txt gespeichert)

v0.1.2
  • Das Programm kann jetzt auch für ganze Ordner angewendet werden. Dabei werden alle pas und dpr Files aus dem gewählten Ordner und allen Unterordnern zur Duplikatssuche herangezogen.
  • Die Duplikatsanzeige wurde korrigiert, es sollten jetzt immer die korrekten Zeilen angezeigt werden
  • Das Ergebnis kann nach Files gefiltert werden, dabei werden nur jene Duplikate angezeigt die in dem ausgewählten File vorkommen. Wenn zusätzlich noch "strict" aktiviert ist werden alle Sources aus anderen Files ebenfalls ausgeblendet.
  • Optional kann nun das gesamte File im Edit angezeigt werden, das Duplikat wird dabei markiert.
  • Während der Duplikatssuche wird jetzt ein Dialog mit Progressbar angezeigt. Im Moment verwende ich noch Application.ProcessMessages damit das UI upgedatet wird was sich natürlich auf die Laufzeit auswirkt. In Zukunft wird das per Multithreading gelöst.

TODO:
  • Einstellungsmöglichkeiten - Kommentare beim Preprocessing entfernen, Compiler-Schalter als Kommentar behandeln, ...
  • Subduplikate mit "Eltern"-Duplikat verknüpfen
  • Eventuell noch bessere Anpassung während des preprocessing um unterschiedliche Formatierungen noch besser auszugleichen
  • ...

Gruß, Motzi
Angehängte Dateien
Dateityp: zip doublesource_102.zip (550,1 KB, 115x aufgerufen)
 
Benutzerbild von sakura
sakura

 
Delphi 12 Athens
 
#11
  Alt 5. Mär 2008, 11:40
Zitat von Motzi:
Schon klar, das Konzept wurde auch von Anfang an dafür designed, dass beliebig viele Files unterstützt werden. Ich bin im Moment nur am Überlegen was sinnvoller ist - einen Ordner auswählen und alle Files aus diesem Ordner + Unterordner durchsuchen, oder aber eine dpr-Datei laden und alle Files aus der uses-Liste nehmen...
Auf jeden Fall das Ordner-Prinzip. Es gibt große Projekte, welche sich auf mehrere Projektgruppen aufteilen (Team-Arbeiten), da ist ein DPR-Ansatz völlig unbrauchbar.

......
Daniel Lizbeth
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#12
  Alt 5. Mär 2008, 12:02
hmmm, hab 'ne .DPR ausgewählt (mein aktuelles Projekt bestehteh fast nur aus der),
auf Start geklickt und
Zitat:
---------------------------
Doublesource
---------------------------
List index out of bounds (0)
---------------------------
OK
---------------------------
sonst passiert ein garnichts
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

 
Delphi XE2 Professional
 
#13
  Alt 5. Mär 2008, 15:06
Bis jetzt ist das Programm nur zur Verwendung mit pas-Files gedacht, eine Exception sollte natürlich trotzdem nicht auftreten! Werd das fixen!
Manuel Pöter
  Mit Zitat antworten Zitat
hoika

 
Delphi 10.4 Sydney
 
#14
  Alt 5. Mär 2008, 15:21
Hallo,

zu Ordnern.
Ich würde gern beides haben
Am anderen Programm hat mich gestört, das er nur Ordner unterstützt.

Jetzt stürzt das Program aber in einer Datei ab.
OK, nicht schön, aber naja.

Wenn ich genau eine Datei prüfen will,
muss ich einen Ordner anlegen und die Datei dort reinkopieren.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#15
  Alt 5. Mär 2008, 16:47
wie gesagt, das Projekt wo ich testen wollte besteht halt fast nur aus der DPR

Fehler(?):
"Preprocessed code" enthält 2 Zeilen mehr, als "Original code".
(je eine Zeile drüber und drunter)

soll das so sein?



vielleicht wäre s nicht shlcht auch mal die Zeilenübrüche zu ignorieren,
bzw. diese der Syntax entsprechend neu zu setzen?
ich schreib manchmal mehrere Befehle in eine Zeile.
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

 
Delphi XE2 Professional
 
#16
  Alt 5. Mär 2008, 16:54
Zitat von himitsu:
wie gesagt, das Projekt wo ich testen wollte besteht halt fast nur aus der DPR
Wie gesagt.. wir korrigiert - oder besser gesagt, ist bereits korrigiert, neue Version kommt vermutlich noch heute!

Zitat von himitsu:
Fehler(?):
"Preprocessed code" enthält 2 Zeilen mehr, als "Original code".
(je eine Zeile drüber und drunter)
Wurde weiter oben bereits angemerkt. Es ist mir gestern selbst noch aufgefallen, dass das nicht immer ganz stimmt, allerdings leider erst nachdem ich das Programm hier gepostet hab. Ist aber inzwischen schon korrigiert!

Zitat von himitsu:
vielleicht wäre s nicht shlcht auch mal die Zeilenübrüche zu ignorieren, bzw. diese der Syntax entsprechend neu zu setzen? ich schreib manchmal mehrere Befehle in eine Zeile.
Naja, das könnte man natürlich schon während des Preprocessings machen. Ist nur die Frage wie "intelligent" muss der Preprocessor dafür dann sein. Ich hab mir eh auch schonmal sowas in der Richtung gedacht, mal schaun....

Gruß, Motzi
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

 
Delphi XE2 Professional
 
#17
  Alt 6. Mär 2008, 01:24
Neue Version ist online, diverse Bugs sind gefixt (falsche Zeilen im Duplikat, "List index out of bounds" Exception).
Details siehe erstes Posting.

Gruß, Motzi
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms

 
Delphi XE Professional
 
#18
  Alt 6. Mär 2008, 04:02
Hallo Motzi

Funktionniert schonmal ordentlich.

Solche Konstrukte bestehend aus begin, end, else etc. werden als Duplikate erkannt.
Sollte ignoriert werden.

Delphi-Quellcode:
END;
END
ELSE
BEGIN
PS: Fenster startet nicht zentriert
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

 
Delphi XE2 Professional
 
#19
  Alt 6. Mär 2008, 09:44
Ist bereits in Planung! Dürfte vermutlich auch nicht allzu kompliziert werden, wird also wohl in den nächsten Tagen kommen...
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

 
Delphi XE2 Professional
 
#20
  Alt 8. Mär 2008, 20:12
Neue Version ist fertig (siehe erstes Posting)!

Hab gerade einen Hardcore-Test gemacht:
Files: 947
Original lines: 292.041
Preprocessed lines: 152.783
Comparisons: 665.512.367
Duplicates: 544
Duplicates sources: 1675
Time: 52.250ms

Gruß, Motzi
Manuel Pöter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz