Definitionsdatei zum Suchen
Definitionsdatei zum Suchen
Hallo,
Also ich hab hier ein Suchprogramm dass nach bestimmen Datei(namen) sucht. Nun wirds im Code allerdings langsam unübersichtlich wenn ich mehr als 10 Ors' drin hab.
Wie würdet ihr das am besten machen?
Also dass die gesuchten Wörter in einer Datei drin sind, mit ner einfachen Textdatei, oder soner pb prefs datei?
Halt möglichst einfach...
DrNo
Also ich hab hier ein Suchprogramm dass nach bestimmen Datei(namen) sucht. Nun wirds im Code allerdings langsam unübersichtlich wenn ich mehr als 10 Ors' drin hab.
Wie würdet ihr das am besten machen?
Also dass die gesuchten Wörter in einer Datei drin sind, mit ner einfachen Textdatei, oder soner pb prefs datei?
Halt möglichst einfach...
DrNo
vielleicht hilf dir das hier:
http://www.purebasic.fr/german/viewtopic.php?t=10350
http://www.purebasic.fr/german/viewtopic.php?t=10350
Win11 x64 | PB 6.20
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Ein paar Infos wären schon schön, so weiß niemand was Du wirklich machen
möchtest.
Wenns fixe strings sind:
möchtest.
Wenns fixe strings sind:
Code: Alles auswählen
DataSection
Suchdefinition:
Data.s "blub.txt", "blubber.html"
EndDataSection
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
> Nun wirds im Code allerdings langsam unübersichtlich wenn ich mehr als 10 Ors' drin hab.
ja doll, eine Sehr genaue Beschreibung...
ich interpretier das mal so, dass du in einem IF mit allen Suchbegriffen vergleichst....
also
wenn du eine Stammliste mit einer Suchliste vergleichen willst,
dann benutzt du sinnvoller Weise zwei geschachtelte Schleifen.
die Äußere geht die Stammliste durch, die Innere die Suchliste.
bei Erfolg setzt du ein Gefunden-Flag,
das als zusätzliche Ausstiegsbedingung für die beiden Schleifen fungiert,
oder fügst die Fundstelle einer Fundliste hinzu,
wenn du mehrere Ergebnisse haben willst.
ja doll, eine Sehr genaue Beschreibung...

ich interpretier das mal so, dass du in einem IF mit allen Suchbegriffen vergleichst....
also
wenn du eine Stammliste mit einer Suchliste vergleichen willst,
dann benutzt du sinnvoller Weise zwei geschachtelte Schleifen.
die Äußere geht die Stammliste durch, die Innere die Suchliste.
bei Erfolg setzt du ein Gefunden-Flag,
das als zusätzliche Ausstiegsbedingung für die beiden Schleifen fungiert,
oder fügst die Fundstelle einer Fundliste hinzu,
wenn du mehrere Ergebnisse haben willst.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Also...ums genau zu sagen
Ich streame öfters Radio und dabei wird die zwischenwerbung auch immer mitgestreamt. Nun hat die Werbung aber immer gleiche namen, hinundwieder kommen neue dazu. Nun lasse ich den/die Ordner durchsuchen und alle Namen, die zutreffen, löschen.
Nix besonderes bisjetzt, mir gehts aber ums Prinzip:
Da wo die vielen Ors sind, da sind die Namen der Werbung. Und die will ich in eine Datei bringen. Also der Scanner liest jeden Namen einer Datei ein und vergleicht sie mit einer Liste. Stimmt einer überein wird er gelöscht.
DrNo

Ich streame öfters Radio und dabei wird die zwischenwerbung auch immer mitgestreamt. Nun hat die Werbung aber immer gleiche namen, hinundwieder kommen neue dazu. Nun lasse ich den/die Ordner durchsuchen und alle Namen, die zutreffen, löschen.
Nix besonderes bisjetzt, mir gehts aber ums Prinzip:
Code: Alles auswählen
Procedure Scan(Pfad$)
EDID = ExamineDirectory(#PB_Any,Pfad$,"*.*")
If EDID
While NextDirectoryEntry(EDID)
Entryname$ = DirectoryEntryName(EDID)
If DirectoryEntryType(EDID) = #PB_DirectoryEntry_Directory And Not Entryname$ = "." And Not Entryname$ = ".."
Scan(Pfad$+"\"+Entryname$)
ElseIf DirectoryEntryType(EDID) = #PB_DirectoryEntry_File And Not Entryname$ = "." And Not Entryname$ = ".."
If Entryname$="LOT OF GAS.mp3" Or Entryname$="SERVING THE UNIVERSE.mp3" Or Entryname$=".977 Sweeper - We Play It.mp3" Or Entryname$="GOOD THINGS.mp3" Or Entryname$="WE HAVE JOBS.mp3" Or Entryname$="977Sweeper104.mp3" Or Entryname$="233902.mp3" Or Entryname$="Escape The Noise.mp3" Or Entryname$="GREAT SPONSORS - PROMO.mp3" Or Entryname$="977Sweeper100.mp3" Or Entryname$="207643.mp3" Or Entryname$="GOOD RADIO.mp3" Or Entryname$="THE EIGHTIES CHANNEL - VOICE ONLY.mp3"
AddGadgetItem(0, -1, Entryname$)
DeleteFile(Pfad$+Entryname$)
EndIf
EndIf
Wend
FinishDirectory(EDID)
EndIf
EndProcedure
Pfad$ = PathRequester("Verzeichnis angeben...", "C:\")
OpenWindow(0, 0, 0, 500, 260, "977 AdKiller 80s Channel Edition - März 2009", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListViewGadget(0, 10, 10, 480, 240)
Scan(Pfad$)
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
DrNo
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Sorry, aber bin etwas außer ... wie nennt man das?
Naja jedenfalls hab ich shcon länger nix mer gescriptet. Jedenfalls könntest du mir vllt. ein kleines Beispiel machen?
Also auf Basis des Codes oben. Er hat eine Datei, nimmt ihren namen...und dann? Mit Readstring jeden einzelnen Namen der Datei durchgehen obs trifft...!?
DrNo

Naja jedenfalls hab ich shcon länger nix mer gescriptet. Jedenfalls könntest du mir vllt. ein kleines Beispiel machen?
Also auf Basis des Codes oben. Er hat eine Datei, nimmt ihren namen...und dann? Mit Readstring jeden einzelnen Namen der Datei durchgehen obs trifft...!?
DrNo
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Code: Alles auswählen
DataSection
startselection:
Data.s "bla.txt", "blubber.wav", "blub.txt"
Data.s ""
EndDataSection
NewList blub.s()
Restore startselection
Repeat
Read.s tmp.s
If tmp
AddElement(blub())
blub() = tmp
Else
Break
EndIf
ForEver
Directory$ = "C:\" ; Listet alle Einträge auf C:\ auf (ohne die Inhalte aus Unterverzeichnissen)
If ExamineDirectory(0, Directory$, "*.*")
While NextDirectoryEntry(0)
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
File.s = DirectoryEntryName(0)
ForEach blub()
If blub() = GetFilePart(File)
Debug "Found" : Break
EndIf
Next
EndIf
Wend
FinishDirectory(0)
EndIf
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
hier mal mit datei.....
diese Liste als "NameList.txt" speichern:
hier der Code:

diese Liste als "NameList.txt" speichern:
Code: Alles auswählen
LOT OF GAS.mp3
SERVING THE UNIVERSE.mp3
.977 Sweeper - We Play It.mp3
GOOD THINGS.mp3
WE HAVE JOBS.mp3
977Sweeper104.mp3
233902.mp3
Escape The Noise.mp3
GREAT SPONSORS - PROMO.mp3
977Sweeper100.mp3
207643.mp3
GOOD RADIO.mp3
THE EIGHTIES CHANNEL - VOICE ONLY.mp3
Code: Alles auswählen
If ReadFile(0, "NameList.txt")
NewList SearchList.s()
While Not Eof(0)
AddElement(SearchList())
SearchList() = ReadString(0)
Wend
CloseFile(0)
Else
MessageRequester("ERROR","Comparelist File not found")
End
EndIf
NewList Stammliste.s()
;************************************************
;**
;** Stammliste erzeugen
;**
;** das wird später die Directory-Entry-Liste
;**
ResetList(SearchList())
For n=0 To 199
Laenge = 10 + Random(10)
If Laenge = 10
If Not NextElement( SearchList() )
ResetList( SearchList() )
NextElement( SearchList() )
EndIf
dummy$ = SearchList()
Else
dummy$ = ""
For t=1 To Laenge
dummy$ + Chr( 32 + Random(95) )
Next
EndIf
AddElement( Stammliste() )
Stammliste() = dummy$
Next
;************************************************
;************************************************
;**
;** Stammliste durchsuchen
;**
;************************************************
counter = 0
ForEach Stammliste()
counter +1
Debug "Prüfe Satz "+Str(counter)+" ...."
Debug "Inhalt: " + Stammliste()
;*********************************
Found = 0
SearchCount = 0
ForEach SearchList()
SearchCount +1
If Stammliste() = SearchList()
Found = 1
Break
EndIf
Next
;*********************************
If Found
Debug "Element gefunden: Suchbegriff Nummer " + Str( SearchCount )
Else
Debug "Keine Übereinstimmung"
EndIf
Debug "----------------------------------------------"
Next
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.