![]() |
Anzeige:
|
|
|||||||
| Anregungen & Bugreports Für Vorschläge an den Autor Roland und neue XProfan-Versionen |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Vielleicht wäre es noch möglich mehrere Suchvorgänge gleichzeitig zu ermöglichen, also FindFirst$() und FindNext$() mit einem optionalen Parameter auszustatten.
Jac
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
|
#2 (Direktlink) |
|
Gast
Beiträge: n/a
|
Hi Jac,
geht doch schon Code:
Proc Callback1
Var addi$ = ""
Parameters hwnd&,l&,Find$
addi$ = FindFirst$(Find$)
If addi$ <> ""
Addstring(l&,addi$)
EndIf
WhileNot %IOResult
addi$ = FindNext$(Find$)
If addi$ <> ""
Addstring(l&,addi$)
EndIf
EndWhile
End
EndProc
window 600,600
Var ende% = 0
Var Liste& = Create("Listbox",%hwnd,0,10,10,300,300)
Var h1&=PExec("|Callback1",%Hwnd,Liste&,"*.prf")
Var h2&=PExec("|Callback1",%Hwnd,Liste&,"*.txt")
WhileNot ende%
Waitinput
ende% = 1
EndWhile
End
|
|
|
|
#3 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Hallo Unregistriert.
Nein, das ist nicht das was ich meine, da dir Funktionen gleichzeitig ablaufen und nicht miteinander kommunizieren. FindNext$() hat keine Parameter. Und ich meinte, dass ich in zum Beispiel in einer Schleife mit FindFirst$() starte und dann in dieser Schleife zum Beispiel eine neue Schleife aufmache und mit dem Ergebnis der ersten FindFirst$()/FindNext$() ein neues FindFirst$()/FindNext$() starte, welches nach Beendigung dieses Suchlaufs wieder mit dem ersten weitermacht. Deshalb auch ein optoinaler Parameter mit einem Zähler (erster Suchlauf=0, zweiter Suchlauf=1). Hier mal ein Beispiel wie ich mir das vorstelle: Code:
Proc Suchlauf
declare p$,q$
p$=FindFirst$("C:\\*.*",0)
whilenot p$=""
if DirExists(p$)
q$=FindFirst$(p$+"\\*.*",1)
whilenot q$=""
if FileExists(q$)
AddString(variable&,q$)
endif
q$=FindNext$(1)
endwhile
endif
p$=FindNext$(0)
endwhile
endproc
Jac
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
#4 (Direktlink) |
|
Gast
Beiträge: n/a
|
Hallo Jac,
geht auch. Code:
Proc Callback1
Var addi$ = ""
Parameters hwnd&,l&,Find$
addi$ = FindFirst$(Find$)
If addi$ <> ""
Addstring(l&,addi$)
EndIf
WhileNot %IOResult
addi$ = FindNext$(Find$)
If addi$ <> ""
Addstring(l&,addi$)
EndIf
EndWhile
End
EndProc
Proc Suchlauf
Parameters Find$,Find1$,Liste&
Var h1& = 0
Var p$ = FindFirst$(Find$)
p$=Translate$(Translate$(p$,"[",""),"]","")
Find$=left$(Find$,3)
whilenot p$=""
p$=Translate$(Translate$(p$,"[",""),"]","")
if DirExists(find$+p$)
h1&=PExec("|Callback1",%Hwnd,Liste&,find$+p$+find1$)
endif
p$=FindNext$()
endwhile
EndProc
window 600,600
Var ende% = 0
Var Liste& = Create("Listbox",%hwnd,0,10,10,300,300)
Suchlauf("D:\\*.*","\\*.Hallihallo",Liste&)
WhileNot ende%
Waitinput
ende% = 1
EndWhile
End
|
|
|
|
#5 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.090
|
Mit einem Handle oder einer Nummer wäre es aber einfacher und viel unkomplizierter. Zusätzlich optional würde Einsteiger auch nicht überfordern.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
|
#6 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Hallo Unregistriert.
Klar geht das, ich kann auch auf das Callback warten. Aber es ist meines Erachtens nicht sinnvoll sowas auszulagern und gleich einen neuen Prozess aufzumachen. Das ist etwas umständlich. Eine andere Möglichkeit ohne optionalen Zähler wäre noch erst zu suchen, das Ergebnis zu speichern und dann erst auszuwerten. Jac
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
#7 (Direktlink) | |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Zitat:
Hallo Jac, und ob das sinnvoll ist sowas auszulagern. So eine Suche kann unter Umständen lange dauern, und genau so lange ist Dein Programm blockiert. Sieh mal hier. Du kannst während der Suche durch die Liste scrollen. Versuch das mal ohne Auslagerung. Code:
'##############################
'Rekursive Suche nach Dateien
'Andreas Miethe 2010
'##############################
$H Windows.ph
$H Messages.ph
Proc GetFilesInDir
'Rekursive oder einfache Suche nach Dateien
Parameters Directory$,Maske$,Liste&,Rekursiv%,Text&,Gefunden&
Struct FILETIME = dwLowDateTime&,\
dwHighDateTime&
Struct WIN32_FIND_DATA = dwFileAttributes&,\
ftCreationTime.FILETIME!,\
ftLastAccessTime.FILETIME!,\
ftLastWriteTime.FILETIME!,\
nFileSizeHigh&,\
nFileSizeLow&,\
dwReserved0&,\
dwReserved1&,\
cFileName$(~MAX_PATH),\
cAlternateFileName$(14)
Proc Suche
Parameters Directory$,Maske$,Liste&,Rekursiv%,Text&,Gefunden&
Var WFD# = New(WIN32_FIND_DATA)
Var Find1$ = ""
Var hFind& = 0
If (Directory$ <> "") and (Right$(Directory$,1) <> "\\")
Directory$ = Directory$+"\\"
EndIf
Var Find$ = Directory$+Maske$
hFind& = ~FindFirstFile(Find$,WFD#)
If hFind& <> 0
Settext Text&,Directory$
Repeat
If (Trim$(WFD#.cFileName$) <> ".") and (Trim$(WFD#.cFileName$) <> "..") and ((WFD#.dwFileAttributes& & ~FILE_ATTRIBUTE_DIRECTORY) <> ~FILE_ATTRIBUTE_DIRECTORY)
If Trim$(WFD#.cFileName$) <> ""
AddString(Liste&,Directory$+Trim$(WFD#.cFileName$))
Settext Gefunden&,Str$(GetCount(Liste&))
EndIf
EndIf
Until ~FindNextFile(hFind&,WFD#) = 0
~FindClose(hFind&)
Else
EndIf
If Rekursiv% = 1
Find1$ = Directory$+"*.*"
hFind& = ~FindFirstFile(Find1$,WFD#)
Repeat
If (Trim$(WFD#.cFileName$) <> ".") and (Trim$(WFD#.cFileName$) <> "..") and ((WFD#.dwFileAttributes& & ~FILE_ATTRIBUTE_DIRECTORY) = ~FILE_ATTRIBUTE_DIRECTORY)
'#########################################
'Hier ruft sich die Procedur selbst auf !!
'#########################################
Suche(Directory$+Trim$(WFD#.cFileName$),Maske$,Liste&,1,Text&,Gefunden&)
EndIf
Until ~FindNextFile(hFind&,WFD#) = 0
~FindClose(hFind&)
Dispose WFD#
EndIf
EndProc
Var Ende& = 0
WhileNot ende&
Suche(Directory$,Maske$,Liste&,Rekursiv%,Text&,Gefunden&)
Ende& = 1
EndWhile
Settext Gefunden&,"Suche beendet :" + Str$(GetCount(Liste&)) + " Dateien gefunden die dem Suchkriterium entsprechen"
End
EndProc
Declare Ende&
Windowstyle 512+24
window %maxx,%maxy
CLS ~GetSysColor(~Color_BTNFACE)
WindowTitle "Rekursion"
SetDialogFont ~GetStockObject(~DEFAULT_GUI_FONT)
Var Text& = Create("TEXT",%hwnd,"",0,0,width(%hwnd),24)
Var Gefunden& = Create("TEXT",%hwnd,"",0,28,width(%hwnd),24)
Var Liste& = Create("Listbox",%hwnd,0,0,100,width(%hwnd),height(%hwnd)-100)
Var P& = 0
Var IsOpen& = 1
Var h1&=PExec("|GetFilesInDir","C:\\","*.prf",Liste&,1,text&,Gefunden&)',%Hwnd,Liste&,find$+p$+find1$,2)
WhileNot Ende&
Waitinput
If %key = 2
process("Kill", h1&,0)
Ende& = 1
EndIf
EndWhile
End
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
|
#8 (Direktlink) |
|
Dauergast
![]() Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.078
|
Issja wie Weihnachten! Danke!
__________________
Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,XPSE,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB2:USB3 |
|
|
|
|
|
#9 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Ah danke, so gehts natürlich auch. Allerdings will ich nicht immer, dass man währenddessen in der Liste scrollen kann, aber das kann man natürlich sehr einfach blockieren.
Jac
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Mehrere News-Fenster - wie realisieren? Mehrere Weblogs einbinden? | Stetti | Homepagegestaltung | 3 | 26.02.2010 12:12 |
| Mehrere BS? | Der_kleine_Hobbit | Windows XP | 3 | 20.12.2008 12:42 |
| Mehrere USB Hubs | columbo1979 | Hardware - Problemlösungen | 4 | 15.11.2007 17:04 |
| DVD auf mehrere CD`s | phan | Software - Allgemein | 8 | 27.09.2006 19:15 |
| mehrere Downloads mit IE | Amiga | Office-Anwendungen | 1 | 02.08.2004 11:01 |