Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Programik do liczenia linii kodu.
Forum PHP.pl > Inne > Hydepark
lukasz1985
Od dłuższego czasu chodziło za mną, żeby zrobić jakiś prosty program do liczenia linii kodu w językach
o składni pochodnej od C. Więc oto i jest:
https://dl.dropboxusercontent.com/u/40322040/LineCounter.jar

Program wykonany w Javie, więc wymaga zainstalowanego JRE.

Screen:


Może komuś sie przyda smile.gif
Crozin
  1. private void readFileLines(File file)
  2. {
  3. boolean inComment = false;
  4. try
  5. {
  6. List<String> lines = Files.readAllLines(file.toPath(), Charset.defaultCharset());
  7. for (int i = 0; i < lines.size(); i++)
  8. {
  9. String line = (String)lines.get(i);
  10.  
  11. this.linesTotal += 1;
  12. if (line.trim().length() > 0) {
  13. this.linesFilled += 1;
  14. }
  15. if (line.trim().startsWith("/*")) {
  16. inComment = true;
  17. }
  18. boolean isCommentLine = (line.trim().startsWith("//")) || (inComment);
  19. boolean isSyntaxLine = line.trim().replace(" ", "").matches("[\\{;\\}\\(\\)\\{\\}\\:]*");
  20. if (isCommentLine) {
  21. this.linesComment += 1;
  22. } else if (!isSyntaxLine) {
  23. this.linesMeaningfull += 1;
  24. } else {
  25. System.out.println(line);
  26. }
  27. if (line.trim().endsWith("*/")) {
  28. inComment = false;
  29. }
  30. }
  31. }
  32. catch (IOException ex)
  33. {
  34. Logger.getLogger(MainView.class.getName()).log(Level.SEVERE, null, ex);
  35. }
  36. }
1. Komentarze blokowe (/* ... */) wcale nie muszą rozpoczynać i kończyć linii.
2. W linii kodu może nie pojawić się żaden ze znaków {;}():.

Wiem, że nie jest to jakieś zaawansowane narzędzie i robi raczej za ciekawostkę, niż coś na czym powinno się polegać, a poprawienie dwóch wyżej wymienionych błędów (przynajmniej pierwszego) prawdopodobnie wymagałoby skorzystania z jakiegoś parsera języka, ale w końcu są to błędy. wink.gif
lukasz1985
No to raczej nie są błędy tylko pewne założenia, które ze pewnym przybliżeniem można przyjąć. Poza tym nie rozumiem co masz na myśli pisząc, że w linii może nie być {;}()[] ? Nie za bardzo ma to znaczenie, poza tym był tam inny błąd, to:

  1. boolean isSyntaxLine = line.trim().replace(" ", "").matches("[\\{;\\}\\(\\)\\{\\}\\:]*");


Wygląda teraz tak:
  1. boolean isSyntaxLine = line
  2. .replace(" ", "")
  3. .replaceAll("[\\{;\\}\\(\\)\\{\\}\\:]*", "")
  4. .length() == 0;


Ten kod sprawdza czy w linii znajdują się wyłącznie znaki składniowe i zalicza je do "meaninglessLines" - czyli inii
które są puste, zawierają jedynie komentarze lub jedynie znaki składniowe. Może o to Ci chodziło?


To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.