Suche nach über die Windows Suche

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Suche nach über die Windows Suche

Beitrag von Koverhage »

Gibt es dafür eine API oder ähnliches ?
Es wurde nach einer Möglichkeit gefragt, in einer Xbase++ Anwendung nach Begriffen in Dokumenten und Dateinamen zu suchen
und diese dann z.B. in einer Listbox anzuzeigen die daraus dann zum Öffnen ausgewählt werden können.
Ist so etwas möglich ?
Hinweis: Mit Dokumenten ist hier pdf, doc, xls, txt gemeint, die "außerhalb der Xbase++ Anwendung vorhanden sind.
Zuletzt geändert von Koverhage am Do, 17. Mär 2022 8:31, insgesamt 1-mal geändert.
Gruß
Klaus
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Suche nach über die Windows Suche

Beitrag von Werner_Bayern »

Servus Klaus,

genau sowas hab ich vor ca. 10 Jahren in Xbase++ nachprogrammiert, weil genau die Suche über den Explorer nach Inhalten sehr oft nicht fündig wird, wo es Funde gäbe (ist das noch Deutsch?).

Ist keine große Sache und das, was dann in unserer Treffer-Listbox live angezeigt wird, kann mittels Auswahl und shellexecuteA bequem gestartet werden.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 483
Registriert: So, 28. Mär 2010 19:21
Danksagung erhalten: 11 Mal

Re: Suche nach über die Windows Suche

Beitrag von azzo »

Hallo Klaus,
gerade ist bei uns eine ähnliche Frage im Forum.
Ich denke, man könnte es eventuell mit findstr lösen.


memowrit bat-file and winexec() bat-file and memoread the result.
findstr /P "xbrowse" C:\FWH\samples\*.* >test.log

https://stackoverflow.com/questions/884 ... str-comman

Mit freundlichem Gruß
Otto
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Suche nach über die Windows Suche

Beitrag von Tom »

Wenn man aus Xbase++-Anwendungen heraus Verzeichnisse rekursiv durchsucht und dem Filter entsprechende Dateien einliest und auf Textinhalte prüft, wird das natürlich um einen großen Faktor langsamer als die Windowssuche.

FindStr() ist tatsächlich eine gute Lösung. Eine API-Funktion dafür scheint es nicht zu geben.

https://docs.microsoft.com/de-de/window ... ds/findstr
Herzlich,
Tom
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Suche nach über die Windows Suche

Beitrag von HaPe »

Wie wäre es mit Grep in der PowerShell?
https://www.powershell-user.de/grep-mit-der-powershell/
--
Hans-Peter
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Suche nach über die Windows Suche

Beitrag von georg »

Hallo,


kommt darauf, wozu der Kunde bereit ist ...

Es gibt eine Software namens Everything, mit der man das machen kann. Jimmy hatte mich darauf aufmerksam gemacht. Es gibt eine API, mit der man das aus Xbase++ heraus recht schnell realisieren kann. Und - es ist sauschnell

https://www.xbaseforum.de/viewtopic.php ... ng#p138309

Everything findet man hier: https://www.voidtools.com/
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Suche nach über die Windows Suche

Beitrag von HaPe »

Hallo Georg !
Und - es ist sauschnell
Ich nutze auch EveryThing 8)
... nach Begriffen in Dokumenten und Dateinamen
Aber leider geht hier die Suche von beliebigem Text in den gesuchten Dateien noch nicht ...
--
Hans-Peter
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Suche nach über die Windows Suche

Beitrag von Tom »

Ja, aber nicht für Inhalte. Aus den FAQs von "Everything":
File content is not indexed, searching content is slow.
Herzlich,
Tom
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Suche nach über die Windows Suche

Beitrag von Koverhage »

Danke für die Anregungen.
Gruß
Klaus
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: Suche nach über die Windows Suche

Beitrag von Marcus Herz »

Wahrscheinlich kommt noch ein Problem dazu, wenn man mit Xbase Bordmitteln den Inhalt von Dokumenten durchsucht:
- verschiedene Dokumente speichern in verschiedenen Zeichensätzen, Ansi/UFT8/Html.
Ein Stringvergleich muss das abfangen, da binät ja nicjht ident
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Suche nach über die Windows Suche

Beitrag von Tom »

verschiedene Dokumente speichern in verschiedenen Zeichensätzen, Ansi/UFT8/Html.
Oder die Texte sind nicht zusammenhängend enthalten. Oder codiert. Text in einem DOCX-Dokument ist auf diese Weise überhaupt nicht zu finden.
Herzlich,
Tom
Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 483
Registriert: So, 28. Mär 2010 19:21
Danksagung erhalten: 11 Mal

Re: Suche nach über die Windows Suche

Beitrag von azzo »

Hallo,

findstr() wäre bei WINDOWS dabei.
docx müsste man entpacken und dann darin suchen oder schon dual abspeichern.

Parameter /P
Non-Printable characters and the /P option
The /P option causes FINDSTR to skip any file that contains any of the following decimal byte codes:
0-7, 14-25, 27-31.

Mit freundlichem Gruß
Otto


Ich habe auch mit FileSeek getestet.
Ich habe mir diese Notizen gemacht:
FullTextSearch engine
I found a program which looks promising https://www.fileseek.ca .
I read in the FAQ that it should be possible to operate from command line.
So I think I could pass the search options from FW and get back a file with the results.
Calling with Parameter 0 it works without showing a window.
FileSeek returns a csv file.
Man braucht aber die Kaufversion.

function suchestarten()
local cPrg := ""
cPrg := 'c:\FileSeek\FileSeek.exe -d "c:\# DEMODATEN" -f kunden.dbf -r "Franz" -o C:\FileSeek\Lookup.csv -start'

winexec( cPrg,0 )

return nil

//----------------------------------------------------------------------------//
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Suche nach über die Windows Suche

Beitrag von HaPe »

PowerShell-Script:
Get-ChildItem -Path "C:\Programm" -Filter "*.dbf" -recurse | Select-String -pattern "Bahnhof" | Select-Object -Property Path,LineNumber | Export-CSV "C:\tmp\ResultFile.csv"

Sucht im Verzeichnis "C:\Programm" in "*.dbf" nach dem Text "Bahnhof" und schreibt das Ergebnis (Pfad und Zeilen-Nummer) in die Textdatei "ResultFile.csv".
Die CSV-Datei kann man in eine Tabelle einlesen und dem Anwender präsentieren.
--
Hans-Peter
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Suche nach über die Windows Suche

Beitrag von Werner_Bayern »

Servus,

Texte in Word und Excel sind einfach zu finden mittels deren Methode, bei Word:

Code: Alles auswählen

:find:execute()
bei Excel:

Code: Alles auswählen

:cells:find()
Zuletzt geändert von Werner_Bayern am Mi, 16. Mär 2022 22:48, insgesamt 1-mal geändert.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 483
Registriert: So, 28. Mär 2010 19:21
Danksagung erhalten: 11 Mal

Re: Suche nach über die Windows Suche

Beitrag von azzo »

Hallo Hans-Peter,
danke. Arbeitest du mit DBF Dateien? Wie machst du das dann mit den Memodateien?
Hast du da eine Funktion, wie du auf die Satznummer kommst.
Mit freundlichem Gruß
Otto
Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 483
Registriert: So, 28. Mär 2010 19:21
Danksagung erhalten: 11 Mal

Re: Suche nach über die Windows Suche

Beitrag von azzo »

Hallo Werner,
wie sieht es da mit der Geschwindigkeit aus?

Ich habe hier einen Test mit UNZIP und Suche in der XML Datei.
Es werden 116 DOCX-Dateien durchsucht. Nur in einer gibt es den Suchbegriff.

Bild

LG
Otto
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Suche nach über die Windows Suche

Beitrag von AUGE_OHR »

hi Otto,
azzo hat geschrieben: Mi, 16. Mär 2022 22:50 Ich habe hier einen Test mit UNZIP und Suche in der XML Datei.
Es werden 116 DOCX-Dateien durchsucht. Nur in einer gibt es den Suchbegriff.
nutzt du Total Commander zum "suchen" :?:
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Suche nach über die Windows Suche

Beitrag von AUGE_OHR »

hi,

es gibt verschiedene Möglichkeiten
Code Sample
https://docs.microsoft.com/en-us/window ... amples-ovw

das ganze Paket
https://github.com/microsoft/Windows-classic-samples
Microsoft.Search.Interop
Microsoft ActiveX Data Objects (ADO)
Microsoft OLE DB
aber wie Marcus schon sagte ist das für Xbase++ ein "Problem" da es UNICODE verlangt.
gruss by OHR
Jimmy
Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 483
Registriert: So, 28. Mär 2010 19:21
Danksagung erhalten: 11 Mal

Re: Suche nach über die Windows Suche

Beitrag von azzo »

Hallo Jimmy,
nein. Glaubst du, man kann den TC mit Scripts zum Suchen bringen?
Ich habe nach über 25 Jahren erst jetzt das erste Mal mit den Scripts bei TotalCommander etwas gearbeitet.

Hier ist mein Programm. Ich nutze pk.zip und nicht die eingebauten Funktionen.
Ich schau mir deine Links gleich an.

LG
Otto

Code: Alles auswählen

#include "FiveWin.Ch"
#include "Directry.ch"

STATIC aFound := {}
STATIC afiles := {}

function Main(  cDocxDir )
   
   local cSrc, cDst
   local I := 1
   // x:\xwhdaten\DMS_Safe\02\    word
   // dataDMS    WHDMS dbf file
   
   if VALTYPE( cDocxDir ) = "U"
      ? "falscher Aufruf:  Pfad fehlt"
      quit
   endif
   
   afiles   := DIRECTORYRECURSE( cDocxDir + "*.docx" )
   
   cDst := ".\tempzip"
   
   if file( "7Z.exe") = .F.
      msginfo("7Z.exe fehlt")
   endif
   if file( "7Z.dll") = .F.
      msginfo("7Z.dll fehlt")
   endif
   
   FOR I := 1 to len(afiles )
      msgwait("In Arbeit "+ str(I), "Datei "+ afiles[I,1], 0.1)
      
      if lIsDir(  ".\tempzip" ) = .f.
         lMKDir( ".\tempzip" )
      endif
      
      // aus Listbox aussuchen
      cSrc :=      afiles[I,1]                    //"c:\fwh\samples\TEST1.DOCX"                         //Vorlage kopieren
      
      filcopyraw( cSrc, cDst + "\temp.zip" )
      DCOM := '7Z.exe x ' + cDst + "\temp.zip" + " -o" +  cDst  + " *.* -r"
      
      WAITRUN(DCOM,0)
      SYSREFRESH()
      ferase (cDst + "\temp.zip" )
      
      cRCFile  := cDst + "\word\document.xml"
      cTxtFile := MemoRead( cRCFile )
      
      SYSREFRESH()
      
      SearchFile( "Isenberg", cTxtFile, cSrc   )
      
      DELETEDIR( cDst )
   NEXT
   xbrowse( aFound )
   
   
return nil

//------------------------------------------------------------------------------------------//

FUNCTION  filcopyraw( cSrc, cDst )              
   
   local hSrc, hDst, nBytes
   local nBuf  := 64000
   local cBuf  := Space( nBuf )
   local lCopied := .f.
   
   if ( hSrc := FOpen( cSrc, 64 ) ) >= 0
      if ( hDst := FCreate( cDst, 0 ) ) >= 0
         do while .t.
            nBytes   := FRead( hSrc, @cBuf, nBuf )
            if nBytes > 0
               FWrite( hDst, cBuf, nBytes )
            endif
            if nBytes < nBuf
               lCopied  := .t.
               exit
            endif
         enddo
         fClose( hDst )
      endif
      fClose( hSrc )
   endif
   
return lCopied
//----------------------------------------------------------------------------//

function SearchFile( suchbeg, cData,cSrc )
   local nOffset := 0
   
   local nPos    := 0
   
   suchbeg := ALLTRIM(Upper(suchbeg))
   cData   := Upper(cData)
   
   if Len(cData ) < 1
      //  MsgInfo("Not Data to Search","File Error")
   Return Nil
endif


nOffset := 0

do while .t.
   
   nPos :=   At( suchbeg, cData  )
   
   
   if nPos > 0                               // .and. nPos <  Header()
      AAdd( aFound,  { cSrc, substr( cData , nPos-20,100  )} )
      cData := substr( cData , (nPos + len(suchbeg) ) )
   else
      exit
      
   endif
   nOffset := nPos
   
   nPos := 0
   
enddo


Return Nil
//------------------------------------------------------------------

FUNCTION DELETEDIR( cDir )
   
   LOCAL aDir, cName
   
   LOCAL i
   
   aDir = DIRECTORY( cDir + "\*.*", "DHS" )
   
   FOR i = 1 TO LEN( aDir )
      cName = aDir[ i, 1 ]
      
      IF cName == "."; LOOP; ENDIF
         IF cName == ".."; LOOP; ENDIF
            
            cName = cDir + "\" + cName
            
            IF "D" $ aDir[ i, F_ATTR ]
               IF !DELETEDIR( cName )
               RETURN .F.
            ENDIF
         ELSE
            IF FERASE( cName ) = -1
               ? "Kann Datei nicht löschen " + cName + "."
            RETURN .F.
         ENDIF
      ENDIF
   NEXT
   
   IF !LRMDIR( cDir )
      //    ? cDir 
   RETURN .F.
ENDIF

RETURN .T.

//----------------------------------------------------------------------------//


Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Suche nach über die Windows Suche

Beitrag von AUGE_OHR »

hi Otto,
azzo hat geschrieben: Do, 17. Mär 2022 0:15 Glaubst du, man kann den TC mit Scripts zum Suchen bringen?
ich habe nur dein GIF gesehen und dachte mir ... :idea:
"ob" man "so" was machen kann müsste man im TC Forum mal anfragen

was aber geht :
wenn man das "Such Ergebnis" aufgelistet bekommt kann man es mit Ctrl-C in das Clipboard schieben

---

warum "nutzt" du "7-ZIP" ... FiveWin hat doch sicherlich was "eingebautes"

JA "7-ZIP" ist besser aber es "extern" aufzurufen wenn es "intern" auch geht
man muss ja erst "7-ZIP" haben und "installieren" ...
gruss by OHR
Jimmy
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Suche nach über die Windows Suche

Beitrag von HaPe »

Hallo Otto !
Arbeitest du mit DBF Dateien?
Ja.
Wie machst du das dann mit den Memodateien?
Für mich als Entwickler nehme ich den Total-Commander zum Suchen von Text in Dateien.
Wenn in einer Memodatei etwas gefunden wird, nehme ich mein DBF-Tool stBrowse und suche mit $ in den Memofeldern.

In alten Anwendungen hatte ich für Suchbegriffe eine separate Tabelle, die alle Wörter der zu durchsuchenden Tabelle/n in einer indizierten Spalte mit Verweis auf die Tabelle und Satznummer enthielt. Da geht die Suche ratzfatz.
Ist vom Prinzip so aufgebaut wie die Windows-Suche.

Für die Beispielsuche mit der PowerShell hatte ich DBFs genommen, weil ich wusste, darin muss der Suchtext Bahnhof enthalten sein.
So würde ich nie selbst suchen ...
--
Hans-Peter
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Suche nach über die Windows Suche

Beitrag von Koverhage »

Denke mal das es schon alleine vom Zeitaufwand für die Suche keinen Sinn macht.
Das müsste dann eine Archivverwaltung sein, die alle Dokumente indiziert hat.
Gruß
Klaus
Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 483
Registriert: So, 28. Mär 2010 19:21
Danksagung erhalten: 11 Mal

Re: Suche nach über die Windows Suche

Beitrag von azzo »

Hallo Klaus,
ich habe bisher noch keine bessere Lösung gefunden.
Man könntest ja mehrere Threads starten, zB A-K, L-Z oder ähnlich.
Ich werde das mal versuchen.
Mein IP Scanner macht das so.

LG
Otto
Zuletzt geändert von azzo am Do, 17. Mär 2022 14:43, insgesamt 1-mal geändert.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Suche nach über die Windows Suche

Beitrag von Werner_Bayern »

azzo hat geschrieben: Mi, 16. Mär 2022 22:50 Hallo Werner,
wie sieht es da mit der Geschwindigkeit aus?
ActiveX ist nicht sehr schnell, aber wir lassen das im Hintergrund als Thread laufen, hab grad einen Test gemacht: 601 Word Dateien nach dem Wort "test" durchsuchen dauert 2 Minuten, 25 Sekunden. Das finde ich akzeptabel, vor allem, weil es mit Windows Boardmitteln m. W. n. keine Alternative gibt.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Suche nach über die Windows Suche

Beitrag von AUGE_OHR »

hi,

ich habe mal im Total Commander Forum angefragt "wie" man TC "ansteuern" kann.
als Antwort liegt wurde ich auf "AutoHotkey" verwiesen

in der Wiki von TC findet sich "mehr" Informationen und Beispiele
https://www.ghisler.ch/wiki/index.php?title=AutoHotkey

---

in TC unter ALT-F7 gibt es die Option

Code: Alles auswählen

Office-xml (docx, xlsx odt usw) +EPUB
man kann auch noch weitere "Plugins" mit einbinden.
damit "könnte" man also "fast alles" suchen und zusammen mit Everything ist es sehr schnell ( Sekunden statt Minuten )

der Weg mit "AutoHotkey" scheint interessant zu sein und wenn man das nun in Xbase++ "einbinden" könnte ...
gruss by OHR
Jimmy
Antworten