• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

CountCodeLines - Script

Puccini

Neues Mitglied
Hi,

ich hab mir ein kleines Script geschrieben, um mir die Code-Zeilen meines aktuellen Projektes auszugeben.

Funktioniert soweit super, nur wie mache ich eine Abfrage das Kommentare, welche über merhere Zeilen gehen, auch ausgeschlossen werden.
quasi solche hier:
Code:
/**
*
*
*/
Bisher wird herausgefiltert:
Code:
<?php
{  <- einzelne Klammer auf einer Zeile
}  <- einzelne Klammer auf einer Zeile
//Kommentar
   <- Leere Zeile

Das Script ist einfach, aber nützlich.
Die eregi_replace sieht so aus:
Code:
"(\{|\}|\<\?php|\t|\?\>|\/\/.*)"
Das Script in voller pracht könnt ihr euch hier anschauen:
ragesoft

Der Quellcode ist nur einfach Strukturiert, sollte aber erkennbar sein. Kommentare sind auch das eine oder andere :oops:

Ich hab es an meinem Projekt getestet, ich komme auch ca. 10.000 Codezeilen. Und wenn ich mir die Ausgabe der einzelnen Dateien anschaue, stimmt das auch in etwas mit der Zeilenanzahl, nur halt mit den Zeilenübergreifenden Kommentaren harpers noch.

Findet ihr das ich den Scan so laufen lassen kann?
Hab es mal durch den kompletten Ordner laufen lassen (2Mio. Codezeilen) war innerhalb von 40sec fertig. Aber ich glaub es geht auch noch schneller... meine Version ist ziehmlich "umständlich" finde ich. Hat da noch einer eine idee?

Moved: Showcase (XraYSoLo)
 
Moin,

möglicherweise kannst du es durch einen zweiten Ausdruck lösen:

PHP:
$search   = array('/\/\*{2}[^\/]*\*\//'                    , 
                  '(\{|\}|\<\?php|\t|\?\>|\/\/.*)'         ,
);
$replace  = array('', '');

preg_replace($search, $replace, $string);

Btw:

PHP: eregi - Manual schrieb:
Note: As of PHP 5.3.0 the regex extension is deprecated, calling this function will issue an E_DEPRECATED notice.

Gruß
 
Danke für den Tip, hab das mal eben angepasst, so ist es übersichtlicher:

Code:
                    $toReplace = array("(\{|\})",//Klammern von Funktionen ect.
                                        "(\<\?php)", //Opening-Tag von PHP
                                        "(\?\>)",    //closing-Tag von PHP
                                        "(\t)",        //Tabs
                                        "(\/\/.*)",    //PHP-Kommentare entfernen (//)
                                        "(\<!--.*(--\>)?)",    //HTML-Kommentare entfernen (<!--  -->)
                                        "(\/+\*+.*)",        //PHP-Kommentare über mehrere Zeilen (/**)
                                        "(\*.*)");            //PHP-Kommentare über mehrere zeilen ( *)
das neue Script hab ich hochgeladen. Es zeigt jetzt noch genauer an wieviele reale Codezeilen drin sind. ein paar kleine Probleme gibts noch, zB wenn eine HTML-Kommentar büber mehrere zeilen geht... da kann man die Zwischenzeilen nicht wirklich gut filtern....:(
 
[...]zB wenn eine HTML-Kommentar büber mehrere zeilen geht... da kann man die Zwischenzeilen nicht wirklich gut filtern...

Was meinst du jetzt mit filtern? Soll der Inhallt zwischen der Kommetarzeichen erhalten bleiben?

Oder: Wenn du möchtest, dass der Punkt . auch einen Zeilenumbruch als Zeichen erkennt, nutze den Modifikator s

PHP:
$regexp = '/<!--.*-->/s';

Gruß
 
Wunderbar! Ich habs jetzt so gemacht, das alle Mehrzeiligen Kommentare gleich entfernt werden:
Code:
//HTML-Kommentare entfernen (<!--  -->)
$filecontent = preg_replace("(\<!--.*--\>)s","",$filecontent);
//PHP-Kommentare über mehrere Zeilen (/**  */)
$filecontent = preg_replace("(\/+\*+.*\*\/)s","",$filecontent);
 
Das hat jetzt zwar nicht wirklich viel mit dem Code zu tun, aber auf deiner Seite (ragesoft) hat sich ein kleiner Fehler eingeschlichen:

HTML:
&amp;Uuml;ber verschiedene Optionen kann das Verhalten des Counters eingestellt werden

Der Fehler dürfte klar sein :wink:
 
das ist leider ein fehler von docman. alle umlaute werden dort nochmal so umgewandelt, und von meinem templet nochmals XD also wird zu erst aus Ü -> &Uuml. Nach der 2. Umwandlung wird aber aus & -> &amp; somit steht zum schluss das da...
Wenn jeman deinen tip hat, wie ich docman dazu bringe das nicht mehr zu machen, immer her damit (am besten per pn, um hier net zu spamen)

Sonst bin ich danke für jede Verbesserung die ihr an dem Script findet. Weil das RegEx ist noch nicht perfekt! Meine Post.php hat laut dem leider nur 3 Zeilen XD warum auch immer :oops: ich bin dabei den fehler zu finde.

Danke allen!
 
Zurück
Oben