Textsuche in den ersten Zeichen einer Datei

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
User avatar
Peter
Power Member
Power Member
Posts: 2068
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Textsuche in den ersten Zeichen einer Datei

Post by *Peter »

Ich muss Sicherungsdateien von Autocad suchen, die so zu erkennen sind:

- die Dateiendung ist BAK (und damit nicht eindeutig, weil es auch BAK aus anderen Programmen gibt)
- die ersten 4 Zeichen heissen immer "AC10", dann folgen fast nur noch Binärdaten.

Ich brauche daher eine Textsuche in BAK, die nur die ersten vier Zeichen durchsucht. Den Rest an Binärdaten zu durchsuchen macht keinen Sinn und kostet unwahrscheinlich viel Zeit.

Wie kann ich die Textsuche reduzieren?

Peter
TC 10.xx / #266191
Win 10 x64
User avatar
Sheepdog
Power Member
Power Member
Posts: 5150
Joined: 2003-12-18, 21:44 UTC
Location: Berlin, Germany
Contact:

Post by *Sheepdog »

Vielleicht solltest Du Dich ja doch mal intensiver mit dem for Befehl beschäftigen. Und find dürfte nützlich sein, so dass das dann irgendwie

Code: Select all

for /f .... ('find   "AC10") do ...
heißen müsste.

sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
User avatar
Peter
Power Member
Power Member
Posts: 2068
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

:?:

Ich galube, jetzt sprechen wir von etwas anderem: for, find, do sind doch DOS/CMD - Befehle, die über BATCH oder cmd ablaufen.

Ich möchte das aber im TC machen, und zwar nur in den ersten Zeichen. Der normale Suchbefehl nach BAK und Text ist kein Problem, ich möchte jedoch nicht 10.000 Daten mit je knapp 1 MB Binärdaten bis ins letzte durchsuchen ...

Peter
TC 10.xx / #266191
Win 10 x64
icfu
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

Es gibt keine Sucheinschränkung nach Offsets. Wenn es sie gäbe, müßten wir sie doch im Suchdialog sehen, oder?!?
Einzige Chance wäre per Regulärem Ausdruck: ^AC10
Findet alle AC10 am Zeilenanfang. Ein regulärer Ausdruck für den Dateianfang ist mir nicht bekannt...

Ich würde diese Spezialaufgabe mit dem Unixbefehl "head" lösen:
"head *.* -c4" spuckt die ersten vier Bytes aller Dateien im Verzeichnis aus plus deren Pfadname.

head.exe gibt's im UnxTools-Paket:
http://unxutils.sourceforge.net/
http://unxutils.sourceforge.net/UnxUtils.zip
http://unxutils.sourceforge.net/UnxUpdates.zip

Darin findest Du auch den Befehl "grep", mit dem Du die Ausgabe von "head" weiter aufschlüsseln kannst, wenn Du willst, so daß Du am Ende nur noch die Pfade der Dateitreffer angezeigt bekommst.

Was ist eigentlich aus Deinem anderen Problem geworden mit dem Kontextmenü? Hat das geklappt?

Icfu
User avatar
Wawuschel
Senior Member
Senior Member
Posts: 344
Joined: 2003-02-11, 17:00 UTC

Post by *Wawuschel »

InfoRapid Suchen & Ersetzen
nehme ich für sowas
http://www.inforapid.de/html/seladen.htm

siehe auch hier
http://ghisler.ch/board/viewtopic.php?t=322&highlight=inforapid

cu
Wawuschel
TCmd 11.50b8 (64 bit) unter Windows 11 (64 bit)
#76996
User avatar
Peter
Power Member
Power Member
Posts: 2068
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

@i cfu:

regulärer Ausdruck: Werde ich testen.

unix: Das ist mir völlig fremd, und ev. ist meine Lernphase (am sehr blockierten PC) um einiges länger als die Suchzeit des TC, wenn er wirklich die ganze Datei durchsucht.

Kontextmenü: Ja, hat geklappt. Danke für die Hilfe. Mit dem Essen kommt aber der Appetit - meine weiteren Wünsche habe ich schon gepostet. :wink:

http://www.ghisler.ch/board/viewtopic.php?t=4080

Peter
TC 10.xx / #266191
Win 10 x64
icfu
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

Du brauchst keine Unixkenntnisse, diese Tools sind GNU-Tools, die auf Windows portiert wurden.

Habe die beiden Dateien mal separat auf meinen Server hochgeladen:
http://icfu.i-networx.de/grep.exe
http://icfu.i-networx.de/head.exe

Kopier sie ins Windowsverzeichnis, damit Sie durch die Pathvariable abgedeckt sind.

Leg Dir eine Datei findheader.cmd an mit folgendem Inhalt:
head.exe -c4 -v *.* | grep -B1 "AC10" | grep "==>"

Leg Dir 'nen Button an, Kommando ..\findheader.cmd
Wechsle in das Verzeichnis, das die Dateien enthält, die Du untersuchen willst und drück den Button.

Du bekommst eine Liste ausgespuckt mit allen Dateien, deren erste vier Bytes "AC10" sind.

Icfu
User avatar
Walter Matter
Junior Member
Junior Member
Posts: 14
Joined: 2003-10-09, 06:18 UTC

Post by *Walter Matter »

Ich löse solche Suchabfragen mit
ALT + F7 » AC10*.bak

Die Resultate "anwenden" kopiert alle Ergebnisse in ein neues Fenster


good luck

:D walter
User avatar
Lefteous
Power Member
Power Member
Posts: 9537
Joined: 2003-02-09, 01:18 UTC
Location: Germany
Contact:

Post by *Lefteous »

2Walter Matter

Soweit ich Peter verstanden habe geht es hier nicht um den Dateinamen, sondern um den Dateiinhalt. Das macht die Sache mit Total Commander-Boardmitteln leider unmöglich.
icfu
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

Manchmal würde es helfen, wenn sich Leute zuerst das Topic durchlesen würden:
Ich brauche daher eine Textsuche in BAK, die nur die ersten vier Zeichen durchsucht. Den Rest an Binärdaten zu durchsuchen macht keinen Sinn und kostet unwahrscheinlich viel Zeit.
Es geht also um eine Suche BEGRENZT auf die ersten vier Bytes IN einer Datei.

Ich poste ja nicht aus Spaß an der Freud' so einen umständlichen Workaround, wenn es auch eine stinknormale Suche tun würde...

Dieses Feature wäre sehr wünschenswert. Also ghisler, hau rein, Wunschzetteleintrag Nummer 387. ;)

Icfu
User avatar
Peter
Power Member
Power Member
Posts: 2068
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

icfu

danke für die genaue Beschreibung. Ich werde es zum Monatsende (dann ist wieder Saubermachen auf dem Datenspeicher angesagt) testen.

Peter
TC 10.xx / #266191
Win 10 x64
Post Reply