Programm gesucht das die reinen Codezeilen zählt
-
viel spaß beim selbercoden, sowsa gibts nicht(und ist imho auch nicht nötig)
-
burnner: Das ist irgendwie nicht allzu schön.
/me würde das mit ein bisschen sed und gegebenenfalls wc lösen. Oder gleich Perl - je nach Tagesverfassung.
-
Hier ist mein entsprechendes kleines Tool für Java in Java. Es ist macht zwar nicht genau das, was du suchst, aber ähnliches. Vielleicht hilft dir das kleine Programm deshalb trotzdem, indem es dich auf die richtige Idee o.ä bringt.
import java.io.*; import java.util.*; public class MetricsViewer { private static long sizeClassFiles = 0; private static long sizeJavaFiles = 0; private static int javaFiles = 0; private static int classFiles = 0; private static int emptyLines = 0; private static int commentLines = 0; private static int codeLines = 0; private static int semicolons = 0; private static int annotationCount = 0; private static HashMap<String,Integer> keyWordMap = new HashMap<String,Integer>(); static { keyWordMap.put("for",0); keyWordMap.put("if",0); keyWordMap.put("else",0); keyWordMap.put("while",0); keyWordMap.put("switch",0); keyWordMap.put("case",0); keyWordMap.put("try",0); keyWordMap.put("catch",0); keyWordMap.put("finally",0); keyWordMap.put("enum",0); keyWordMap.put("class",0); keyWordMap.put("interface",0); keyWordMap.put("static",0); keyWordMap.put("final",0); keyWordMap.put("assert",0); keyWordMap.put("throw",0); keyWordMap.put("throws",0); keyWordMap.put("return",0); keyWordMap.put("public",0); keyWordMap.put("private",0); keyWordMap.put("protected",0); keyWordMap.put("continue",0); keyWordMap.put("break",0); } public static void main (final String [] args) { for (final String s : args) { searchFile (new File (s)); } System.out.println(); System.out.println("number of Java-Files : " + javaFiles); System.out.println("number of Class-Files : " + classFiles); System.out.println("size of Java-Files : " + sizeJavaFiles); System.out.println("size of Class-Files : " + sizeClassFiles); System.out.println(); System.out.println("empty lines : " + emptyLines); System.out.println("comment lines : " + commentLines); System.out.println("code lines : " + codeLines); System.out.println("all lines : " + (emptyLines+commentLines+codeLines)); System.out.println(); System.out.println("; : " + semicolons); System.out.println("@ : " + annotationCount); System.out.println(); printKeyWordMap(); } public static void searchFile (final File file) { if (file.isDirectory()) { for (final File f : file.listFiles()) { searchFile (f); } } else { final String path = file.getPath(); try { if (path.endsWith(".java")) searchJavaFile (file); if (path.endsWith(".class")) searchClassFile (file); } catch (IOException e) { } } } public static void searchJavaFile(final File file) throws IOException { System.out.println (file); sizeJavaFiles += file.length(); ++javaFiles; final BufferedReader reader = new BufferedReader (new FileReader (file)); boolean comment = false; while (reader.ready()) { final String line = reader.readLine(); // EMPTY LINES final String trimLine = line.trim(); if (trimLine.equals("")) { ++emptyLines; continue; } // COMMENT LINES if (trimLine.startsWith("//")) { ++commentLines; continue; } if (trimLine.startsWith("/*")) { comment = true; } if (comment) { ++commentLines; if (trimLine.endsWith("*/")) { comment = false; } continue; } //CODE LINES ++codeLines; final char [] chars = line.toCharArray(); for (final char c : chars) { if (c == ';') ++semicolons; if (c == '@') ++annotationCount; } final String [] tokens = line.split("[\\(\\)\n\r\t ;,\\.\\{\\}@]"); for (final String token : tokens) { Integer number = keyWordMap.get(token); if (number != null) { keyWordMap.put(token,++number); } } } } public static void searchClassFile(final File file) { System.out.println (file); sizeClassFiles += file.length(); ++classFiles; } public static void printKeyWordMap() { int offset = 0; for (String keyWord : keyWordMap.keySet()) { int number = keyWordMap.get(keyWord); String outString = keyWord + " : " + number; if (offset == 0) { offset = outString.length(); System.out.print(outString); } else if (offset < 25) { StringBuilder builder = new StringBuilder (30); for (;offset < 25 ; ++offset) { builder.append(" "); } System.out.print(builder.toString()); System.out.print(outString); offset += outString.length(); } else { StringBuilder builder = new StringBuilder (30); for (;offset < 50 ; ++offset) { builder.append(" "); } System.out.print(builder.toString()); System.out.println(outString); offset = 0; } } System.out.println(); } }
(PS: Ich bin mir darüber im Klaren, dass der Name des Programms momentan unpassend ist.)
-
otze schrieb:
viel spaß beim selbercoden, sowsa gibts nicht(und ist imho auch nicht nötig)
Soetwas gibt es in Massen, ist unnötig, kann einem beim Programmieren aber psychisch etwas unterstützen, da man durch so ein Programm einen "imaginären" Fortschritt beim Programmieren sehen kann.
-
nman schrieb:
burnner: Das ist irgendwie nicht allzu schön.
/me würde das mit ein bisschen sed und gegebenenfalls wc lösen. Oder gleich Perl - je nach Tagesverfassung.
Was findest du den na nicht allzu schön? Naja das mit der Forschleife für die Strings weiss ich^^ hab damals irgendwie vergessen das es einfach per
string1 = char1; geht^^mfg burnner
-
burnner schrieb:
Was findest du den na nicht allzu schön? Naja das mit der Forschleife für die Strings weiss ich^^ hab damals irgendwie vergessen das es einfach per string1 = char1; geht^^
Einerseits würde ich dafür einfach man: wc verwenden, andererseits lässt sich die Kernfunktionalität wesentlich kürzer zusammenfassen.
Steinbeck: Wirf doch mal einen Blick auf cccc, das sieht so aus als würde es Deine Anforderungen erfüllen.
-
Gregor schrieb:
otze schrieb:
viel spaß beim selbercoden, sowsa gibts nicht(und ist imho auch nicht nötig)
Soetwas gibt es in Massen, ist unnötig, kann einem beim Programmieren aber psychisch etwas unterstützen, da man durch so ein Programm einen "imaginären" Fortschritt beim Programmieren sehen kann.
Hehe, ich bin gerade in der Phase, wo ich bei einer Verringerung des Quellcodes Fortschritte sehe.
-
Optimizer schrieb:
Hehe, ich bin gerade in der Phase, wo ich bei einer Verringerung des Quellcodes Fortschritte sehe.
Da kann dir so ein Programm ja auch den Fortschritt anzeigen!
-
ich seh nen fortschritt, wenn ich auf meiner liste nen unterpunkt abhaken kann, wozu brauch ich dann ein programm, das mir sagt, dass ich ne extra schicht einlegen muss, wenn ich meine wochenziel erreichen will
-
Wenn du msvs bentzt schau mal auf http://www.wndtabs.com/ vorbei. Ansonsten gabs son'n tool auch mal auf www.codeproject.com *such*