Comptez vos lignes !

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Comptez vos lignes !

Message par JohnJohnsonSHERMAN »

Salut ;)

J'avais envie cette aprés-midi de savoir combien de lignes de code (Pb, C ou autres) j'avais dans certains répertoires, donc je me suis bricolé ce petit utilitaire qui scanne le répertoire de votre choix et compte ensuite les lignes dans les fichiers qu'il contient :)

Il est trés simple de modifier le filtre de fichiers pour ajouter/retirer des extensions au scan

Le code :

Code : Tout sélectionner

Global Dir$ = PathRequester("Choisissez un répertoire à scanner","")

Global Filter$ = "txt c cpp c++ h hpp h++ bash py java pb pbi pbf sb sbi" ;<<Modifiez ici les extensions de fichiers à prendre en compte

Global NewList Files.s()

Procedure ExploreDirectory(Directory$, DirID = 0)
  
  ; Debug Directory$
  
  If ExamineDirectory(DirID,Directory$,"*.*")
    
    While NextDirectoryEntry(DirID)
      
      If (DirectoryEntryType(DirID) = #PB_DirectoryEntry_Directory And DirectoryEntryName(DirID) <> "." And DirectoryEntryName(DirID) <> "..")
        ;Debug DirectoryEntryName(DirID)
        ExploreDirectory(Directory$ + DirectoryEntryName(DirID) + "\", DirID +1)
      Else
        AddElement(Files())
        Files() = Directory$ + DirectoryEntryName(DirID)
      EndIf
    Wend
    
  Else
    Debug "Erreur d'accès à "+Directory$
  EndIf
  
EndProcedure

Procedure ScanFiles(param)
  
  ExploreDirectory(Dir$)
  
  Protected Total = 0, Size = ListSize(Files()), i=0
  
  SetGadgetAttribute(1, #PB_ProgressBar_Maximum,Size)
  
  ForEach Files()
    i+1
    ;Debug "Progression : "+StrF((i/Size)*100,2)+"% ("+i+"/"+Size+" files), reading ["+Files()+"]"
    SetGadgetState(1,i)
    SetGadgetText(2,GetFilePart(Files())+GetExtensionPart(Files()))
    
    If FindString(Filter$,GetExtensionPart(Files()))
      Debug GetExtensionPart(Files())
      ReadFile(0, Files())
      Total + CountString(ReadString(0, #PB_File_IgnoreEOL),#LF$)
      CloseFile(0)
      
    EndIf
  Next
  
  MessageRequester("Résultats de scan",Str(Total) + " lignes de code ont été détectées", #PB_MessageRequester_Info)
  
  FreeList(Files())
  CloseWindow(0)
  End
  
EndProcedure


OpenWindow(0,0,0,200,50,"Scan des fichiers en cours...", #PB_Window_ScreenCentered)
ProgressBarGadget(1,10,5,180,20,0, 100, #PB_ProgressBar_Smooth)
TextGadget(2,10,30,180,20,"Examen de l'arborescence...")

CreateThread(@ScanFiles(),0)

Repeat : event = WaitWindowEvent() : Until event = #PB_Event_CloseWindow
Voila ;)
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé