Declarator -> Kleinigkeit

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Declarator -> Kleinigkeit

Beitrag von Franky »

Hi.

Vielleicht hab ich die Funktion ja einfach nicht gefunden (me=JaPBe-Nutzer), aber mir fehlte ein Tool, um automatische Declarationsdateien zu erstellen.

Hab also eben selber sowat zusammengeschreibselt.

Code: Alles auswählen

NewList Files.s()
Global Decla.s
Global Proceduren.l
Global Dateien.l
Global zeilen.l
Global zeichen.l
Procedure CreateDeclarations_File(file.s) 
             If ReadFile(1,Decla+file)
                    UseFile(2)
                    WriteStringN(";"+file.s+"_____________")
                    zeichen=zeichen+Len(";"+file.s+"_____________")
                    zeilen=zeilen+1
                    UseFile(1)
             While Loc()<Lof()
                     zeilen=zeilen+1
                     t.s=ReadString()
                     zeichen=zeichen+Len(t)
                     t=Trim(t)
                     If LCase(Left(t,9))="procedure"
                          If LCase(Left(t,15))<>"procedurereturn"
                              k.s=Right(t,Len(t)-9)
                              UseFile(2)
                              WriteStringN("             Declare"+k)
                              zeilen=zeilen+1
                              zeichen=zeichen+Len("             Declare"+k)
                              UseFile(1)
                              Proceduren=Proceduren+1
                          EndIf
                    ElseIf LCase(Left(t,11))="includefile"
                               k=RemoveString(Trim(Right(t,Len(t)-11)),Chr(34))
                               LastElement(Files())
                               AddElement(Files())
                                        Files()=k
                    ElseIf LCase(Left(t,12))="xincludefile" 
                               k=RemoveString(Trim(Right(t,Len(t)-12)),Chr(34))
                               LastElement(Files())
                               AddElement(Files())
                                        Files()=k
                    EndIf
             Wend
                     UseFile(2)
                     WriteStringN("")
                     WriteStringN("")
                     WriteStringN("") 
             CloseFile(1)
             EndIf
EndProcedure

Procedure.s GetPath(name.s)
                  ret.s=""
                  k=CountString(name,"") 
                  For a=1 To k
                          ret.s=ret+StringField(name,a,"")+""
                  Next 
                  ProcedureReturn ret
EndProcedure

 
Procedure Createdeclarations(source.s,declarations.s)
     If CreateFile(2,declarations)
           ClearList( Files())
           FirstElement(Files())
           AddElement(Files())
           source=ReplaceString(source,"/","")
           declarations=ReplaceString(declarations,"/","")
           Decla.s=GetPath(source)
           declarations=RemoveString(declarations,Decla)
           Files()=RemoveString(source,Decla)
           Dateien=0
           Proceduren=0
           zeilen=0
           zeichen=0
           While CountList(Files())>0
                   Dateien=Dateien+1
                   FirstElement(Files())
                   name.s=Files() 
                   DeleteElement(Files(),1)
                   If name<>declarations
                        CreateDeclarations_File(name)
                   EndIf
           Wend 
           CloseFile(2)
     EndIf
EndProcedure     


Enumeration
       #t_file
       #b_file
       #t_dec
       #b_dec
       #b_do
       #b_about
EndEnumeration

If OpenWindow(1,100,100,300,120,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget,"DeclaresErsteller")
              CreateGadgetList(WindowID()) 
                              TextGadget(#PB_Any,0,0,300,20,"Suchen sie die Datei aus und Erstellen sie die Declarationen")

                              TextGadget(#PB_Any,0,30,100,20,"Quelltext")
                              StringGadget(#t_file,100,30,180,20,"")
                              ButtonGadget(#b_file,280,30,20,20,">>")

                              TextGadget(#PB_Any,0,60,80,20,"Declarations")
                              StringGadget(#t_dec,100,60,180,20,"")
                              ButtonGadget(#b_dec,280,60,20,20,">>")
                              
                              ButtonGadget(#b_do,20,90,100,20,"Erstellen")
                              ButtonGadget(#b_about,140,90,60,20,"About")
                              
                              Repeat
                                    event=WaitWindowEvent()
                                    If event=#PB_EventGadget
                                          Select EventGadgetID()
                                                 Case #b_file
                                                         n.s=OpenFileRequester("Quelltext aussuchen",GetGadgetText(#t_file),"PureBasic Quelltext|*.pb*",0)
                                                         If n
                                                               SetGadgetText(#t_file,n)
                                                         EndIf
                                                 Case #b_dec
                                                         n.s=SaveFileRequester("Declares aussuchen",GetGadgetText(#t_dec),"PureBasic Quelltext|*.pb*",0)
                                                         If n
                                                              If GetExtensionPart(n)<>"pb"
                                                               n=n+".pb"
                                                              EndIf
                                                              SetGadgetText(#t_dec,n)
                                                         EndIf
                                              Case #b_about
                                                        MessageRequester("Wer war´s?","Ganz klar:"+Chr(13)+"Franky"+Chr(13)+"visit www.pure-graphicshop.de")
                                              Case #b_do
                                                         Createdeclarations(GetGadgetText(#t_file),GetGadgetText(#t_dec)) 
                                                         MessageRequester("Fertig","Proceduren: "+Str(Proceduren)+Chr(13)+"Dateien: "+Str(Dateien)+Chr(13)+"Zeilen: "+Str(zeilen)+Chr(13)+"Zeichen: "+Str(zeichen))
                                         EndSelect
                                EndIf 
                         Until event=#WM_CLOSE
               CloseWindow(1) 
EndIf
End  
Es is jetzt vielleicht net hochoptimiert, aber es sollte reichen.
Die Dateiursprünge werden reingeschrieben, es wird geschaut, ob es Includedateien gibt, die Includedateien und die Proceduren werden gezählt.

Das Ding ist auf funktionierenden Code getrimmt, dass heißt wenn ihr macht:
Datei1.pb hat geschrieben: IncludeFile "Datei2.pb"
und
Datei2.pb hat geschrieben: IncludeFile "Datei1.pb"
und
Datei.pb hat geschrieben: IncludeFile "Datei1.pb"
müsst ihr euch net über dauerschleifen wundern.

Kommentare und der Kram werden übernommen.

Zudem wird eingerückt, sodass man beim durchscrollen direkt sieht, wo ne neue Datei anfängt.

Edit: hab mal ne Zählfunktion für Zeichen und Zeilen eingebaut.
Wer die ungeschönte Zeichenzahl (ohne Einrückbonus) sehen will, muss einfach aus

Code: Alles auswählen

zeichen=zeichen+Len(t)
t=Trim(t)

Code: Alles auswählen

zeichen=zeichen+Len(t)
t=Trim(t)
machen.

Meine Werte:
Proceduren: 731
Dateien:45
Zeilen:60556
Zeichen(geschönt):3259852
Zeichen(ungeschönt): 1576621

muss man mal drüber nachdenken, mein Halber Code besteht aus füllzeichen :shock:
Zuletzt geändert von Franky am 08.05.2014 18:59, insgesamt 1-mal geändert.
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Benutzeravatar
Dostej
Beiträge: 529
Registriert: 01.10.2004 10:02
Kontaktdaten:

Beitrag von Dostej »

Also, wenn ichs richtig verstanden habe und Du jaPBe Nutzer bist, hast Du dir die Arbeit umsonst gemacht.
Unter Projekteinstellungen gibt ne Checkbox: Erzeuge Declare-Dateien....

Das ist es dann auch schon.
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag von Franky »

Umsonst ist sie nie, ich hab ja auch wat dabei gelernt, bzw. vertieft ;)

Zudem hab ich ja noch meinen Code,Zeilen und Zeichenzähler drin.

So brauch ich net immer den Cutter bemühen ;)

Zudem kann ich an meinem Code bissen rumfriemeln, so kann ich auch meine Declaredateien machen, wie ich sie möchte.

Einige regen sich ja immer auf über meine Art, ein zu rücken <)
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Antworten