Project Spy - Codes durchsuchen (B+)

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

DC

Sieger des B2D Retro Wettbewerb / Aug 04

Betreff: Project Spy - Codes durchsuchen (B+)

BeitragDo, Apr 08, 2004 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi
Da ich in meinem Code was gesucht habe, aber ich 1. nicht alle Includes durchgehen wollte und 2. die Windows Suchfunktion irgendwie auch nicht so klappte wie sie sollte, habe ich mal dieses kleine Suchprogramm geschrieben.

Funktioniert so: Man wählt einen Ordner, gibt einen Suchbegriff ein und klickt auf Suchen. Das Programm geht dann alle *.BB-Dateien in diesem Ordner und auch in allen Unterordnern durch, und sucht darin den String. Wird was gefunden so wird einfach Dateipfad + Zeile ausgegeben.

Vllt kanns ja wer gebrauchen oder will es erweitern:
BlitzBasic: [AUSKLAPPEN]
;---------------------------------------- PROJECT SPY
;Programm zum durchsuchen aller
;BB-Dateien in einem Ordner.
;
;by Unreal Software 08.04.2004
;
;Website: www.unrealsoftware.de
;E-Mail: webmaster@unrealsoftware.de
;ICQ: 136125220


;---------------------------------------- GUI

;Title
AppTitle "Unreal Software's Project Spy"

;Hauptfenster
Global gui_mainwin=CreateWindow("Unreal Software's Project Spy",10,10,550,400,Desktop(),1+4+8)

;Suchbuttons
Global gui_search=CreateTextField(5,15,150,20,gui_mainwin)
Global gui_start=CreateButton("Suchen",160,15,100,20,gui_mainwin)
Global gui_grkl=CreateButton("Groß-/Kleinschreibung",400,15,150,20,gui_mainwin,2)

;Menü
Global gui_men_main=CreateMenu("Datei",0,WindowMenu(gui_mainwin))
Global gui_men_load=CreateMenu("Projekt laden...",1,gui_men_main)
Global gui_men_save=CreateMenu("Speichern unter...",2,gui_men_main)
Global gui_men_space=CreateMenu("",9,gui_men_main)
Global gui_men_quit=CreateMenu("Beenden",10,gui_men_main)

;Ausgabe
Global gui_out=CreateTextArea(5,50,535,270,gui_mainwin)

UpdateWindowMenu(gui_mainwin)

SetStatusText(gui_mainwin,"Projekt-Ordner: Lade bitte ein Projekt über 'Datei'->'Projekt laden...'")


;---------------------------------------- VARS

Global project_dir$=""

Type dir
Field dir$
Field done
End Type

Type file
Field file$
End Type

;---------------------------------------- RUNTIME

Repeat
Select WaitEvent()

;Menü
Case $1001
Select EventData()
;Laden
Case 1
project_dir$=RequestDir("Wähle bitte den Projekt-Ordner")
SetStatusText(gui_mainwin,"Projekt-Ordner: "+project_dir$)
;Speichern unter
Case 2
save()
;Beenden
Case 10
End
End Select

;Buttons
Case $401
Select EventSource()
;Suchen
Case gui_start
search()
End Select

;Beenden
Case $803
End


End Select
Forever


;---------------------------------------- FUNCTIONS

;Such Funktion
Function search()
;Projekt prüfen
If project_dir$="" Then Notify("Lade bitte ein Projekt!",1):Return 0

;Suchstring prüfen
Local searchstr$=TextFieldText(gui_search)
If Len(searchstr$)=0 Then Notify("Gebe bitte einen Suchbegriff ein!",1):Return 0

;Groß-\Kleinschreibung beachten?
Local grkl=ButtonState(gui_grkl)
If Not grkl Then searchstr$=Lower(searchstr$)

;Alte Daten löschen
For dir.dir=Each dir
Delete dir
Next
For file.file=Each file
Delete file
Next

;Startordner
dir.dir=New dir
dir\dir$=project_dir$

;Alles durchgehen
Local dirstream
Local thefile$
Local rootdir$
For dir.dir=Each dir
If dir\done=0 Then
rootdir$=dir\dir$
dirstream=ReadDir(rootdir$)
If dirstream=0 Then Notify("Ungültiger Projekt-Ordner!",1):Return 0
Repeat
thefile$=NextFile(dirstream)
If thefile$<>"" Then
If thefile$<>".." And thefile$<>"." Then
Select FileType(rootdir$+"\"+thefile$)
Case 1
fx.file=New file
fx\file$=rootdir$+"\"+thefile$
Case 2
dx.dir=New dir
dx\dir$=rootdir$+"\"+thefile$
End Select
EndIf
Else
Exit
EndIf
Forever
CloseDir(dirstream)
dir\done=1
EndIf
Next

;Alle Files die kein BB sind löschen
For file.file=Each file
If Lower(Right(file\file$,3))<>".bb" Then
Delete file
EndIf
Next

;Textfeld leeren
FreeGadget gui_out
gui_out=CreateTextArea(5,50,535,270,gui_mainwin)

;Durchsuchen
Local filestream
Local txt$
Local lin
Local hits
Local out$
For file.file=Each file
lin=0
filestream=ReadFile(file\file$)
While Not Eof(filestream)
txt$=ReadLine(filestream)
lin=lin+1
If Not grkl Then txt$=Lower(txt$)
If Instr(txt$,searchstr$) Then
out$=file\file$
out$=Replace(out$,project_dir$,"...")
AddTextAreaText gui_out, out$+" - Zeile "+lin+Chr$(13)+Chr$(10)
hits=hits+1
EndIf
Wend
Next

Notify "Suche abgeschlossen"+Chr$(13)+Chr$(10)+"Treffer: "+hits
End Function

;Speicher Funktion
Function save()
Local filepath$
Local filestream
filepath$=RequestFile("Wo sollen die Suchergebnisse gespeichert werden?","txt",1)
If filepath$="" Then Return 0
filestream=WriteFile(filepath$)
If filestream=0 Then Notify("Datei konnte nicht gespeichert werden!",1):Return 0
WriteLine(filestream,TextAreaText(gui_out))
CloseFile(filestream)
Notify("Datei wurde gespeichert!",1):Return 0
End Function


Edit:
Ist übrigens auch praktisch wenn man wissen will wie oft man nen bestimmten Befehl verwendet hat oder so Laughing
Core i5 4670K | 4 x 3,40 GHZ | 16 GB Ram | GeForce GTX 960 | HTC Vive | Win 10 Pro
www.UnrealSoftware.de | www.StrandedOnline.de | www.CS2D.com |
www.CarnageContest.com | www.Stranded3.com

Mr.Keks

BeitragDo, Apr 08, 2004 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
;Such Funktion 
Function search()
;Projekt prüfen
If project_dir$="" Then Notify("Lade bitte ein Projekt!",1):Return 0

;Suchstring prüfen
Local searchstr$=TextFieldText(gui_search)
If Len(searchstr$)=0 Then Notify("Gebe bitte einen Suchbegriff ein!",1):Return 0

;Groß-\Kleinschreibung beachten?
Local grkl=ButtonState(gui_grkl)
If Not grkl Then searchstr$=Lower(searchstr$)

;Alte Daten löschen
For dir.dir=Each dir
Delete dir
Next
For file.file=Each file
Delete file
Next

;Startordner
dir.dir=New dir
dir\dir$=project_dir$

;Alles durchgehen
Local dirstream
Local thefile$
Local rootdir$
For dir.dir=Each dir
If dir\done=0 Then
rootdir$=dir\dir$
dirstream=ReadDir(rootdir$)
If dirstream=0 Then Notify("Ungültiger Projekt-Ordner!",1):Return 0
Repeat
thefile$=NextFile(dirstream)
If thefile$<>"" Then
If thefile$<>".." And thefile$<>"." Then
Select FileType(rootdir$+"\"+thefile$)
Case 1
fx.file=New file
fx\file$=rootdir$+"\"+thefile$
Case 2
dx.dir=New dir
dx\dir$=rootdir$+"\"+thefile$
End Select
EndIf
Else
Exit
EndIf
Forever
CloseDir(dirstream)
dir\done=1
EndIf
Next

;Alle Files die kein BB sind löschen
For file.file=Each file
If Lower(Right(file\file$,3))<>".bb" Then
Delete file
EndIf
Next

;Textfeld leeren
FreeGadget gui_out
gui_out=CreateTextArea(5,50,535,270,gui_mainwin)

;Durchsuchen
Local filestream
Local txt$
Local lin
Local hits
Local out$
For file.file=Each file
lin=0
filestream=ReadFile(file\file$)
While Not Eof(filestream)
txt$=ReadLine(filestream)
lin=lin+1
If Not grkl Then txt$=Lower(txt$)
If Instr(txt$,searchstr$) Then
out$=file\file$
out$=Replace(out$,project_dir$,"...")
AddTextAreaText gui_out, out$+" - Zeile "+lin+Chr$(13)+Chr$(10)
hits=hits+1
EndIf
Wend
totlin = totlin + lin
totkb = totkb + FileSize(file\file$)
Next
line2$ = Chr$(13)+Chr$(10)+ "Zeilen: "+totlin + " | kB: " + Float(totkb/1024)
Notify "Suche abgeschlossen"+Chr$(13)+Chr$(10)+"Treffer: "+hits + line2$
End Function

... habe noch einige änderungen in search() vorgenommen - so gíbt's gleich noch einige kleine states für die zeilenverrückten Wink
MrKeks.net

Vertex

BeitragDo, Apr 08, 2004 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo, ist schon sehr nützlich, aber unter Win98se nehm ich einfach den Explorer
gebe den String ein, unter "Enthaltener Text:" und bei "Name:" einfach *.bb
Kommt aufs selbe heraus Smile
vertex.dreamfall.at | GitHub

Xenon

BeitragDo, Apr 08, 2004 22:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei Windoofs XP ginge es ja auch so, nur is das Buggy

shice M$!

DC

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragFr, Apr 09, 2004 0:42
Antworten mit Zitat
Benutzer-Profile anzeigen
@Inarie:
Hehe lustig.. habe das gleiche gerade bei mir auch eingebaut, ohne gesehen zu haben, dass du das schon gemacht hat. Meine Variable heisst fast genau so - nur verdreht: "lintot" statt "totlin" wie bei dir. gruuuselig Wink
Core i5 4670K | 4 x 3,40 GHZ | 16 GB Ram | GeForce GTX 960 | HTC Vive | Win 10 Pro
www.UnrealSoftware.de | www.StrandedOnline.de | www.CS2D.com |
www.CarnageContest.com | www.Stranded3.com

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group