Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Programik do liczenia linii kodu.
lukasz1985
post
Post #1





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

Ostrzeżenie: (0%)
-----


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


Ten post edytował lukasz1985 15.01.2014, 20:22:57
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


  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
Go to the top of the page
+Quote Post
lukasz1985
post
Post #3





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

Ostrzeżenie: (0%)
-----


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?




Ten post edytował lukasz1985 16.01.2014, 11:58:01
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 10:15