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 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:
undDatei1.pb hat geschrieben: IncludeFile "Datei2.pb"
undDatei2.pb hat geschrieben: IncludeFile "Datei1.pb"
müsst ihr euch net über dauerschleifen wundern.Datei.pb hat geschrieben: IncludeFile "Datei1.pb"
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)
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