String zählen

Konfiguration, Anwendungen, Treiber und TSRs unter DOS
Antworten
frank9652
Norton Commander
Beiträge: 142
Registriert: Di 27. Mär 2007, 13:03
Wohnort: Göppingen

String zählen

Beitrag von frank9652 »

Hallo Leute!

Ich suche ein Programm, das in einer Log-Datei nach einem Textstring sucht und die Ausgabe in eine Datei schreibt.
Als Ergebnis soll in die Datei geschrieben werden, wie oft der String in der Datei gefunden wurde.
Die zu durchsuchende Datei kann mehrere MB groß sein.

Beispiel:
Es wird nach folgendem Textstring gesucht:
<sat>10</sat>

Ausgabedatei:
<sat>10</sat> = 534

Die Anzahl der gefundenen Strings kann 4-5 stellig sein.

So etwas gibt es bestimmt schon irgendwo in den Tiefen des www oder irgendeiner Festplatte

Gruß Frank
DOSferatu
DOS-Übermensch
Beiträge: 1145
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: String zählen

Beitrag von DOSferatu »

Falls sowas nicht auffindbar ist, könnte ich es schnell programmieren. Melden, wenn Interesse.
Benutzeravatar
Dosenware
DOS-Gott
Beiträge: 3218
Registriert: Mi 24. Mai 2006, 20:29

Re: String zählen

Beitrag von Dosenware »

kommt der String nur einmal pro Zeile vor?

dann koennte 'find /c "Zeichenfolge" Dateiname' dir helfen...

/c zeigt nur die Anzahl der Zeilen an, die die angegebene Zeichenfolge enthalten
DOSferatu
DOS-Übermensch
Beiträge: 1145
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: String zählen

Beitrag von DOSferatu »

OK, hab mal schnell sowas zusammengehackt. Hatte gerade nichts besseres zu tun.

Zu finden hier:

http://www.imperial-games.de/z/countstr.zip

Viel Spaß damit
frank9652
Norton Commander
Beiträge: 142
Registriert: Di 27. Mär 2007, 13:03
Wohnort: Göppingen

Re: String zählen

Beitrag von frank9652 »

Hallo Dosferatu!

Du bist einfach SPITZE !!!
Funzt ganz hervorragend.

Im Internet hatte ich nur Lösungen für PHP oder Excel gefunden, aber nicht für DOS - und wenn dann wurde meistens nur nach einzelnen Zeichen gesucht.

Die Lösung von Dosenware funktioniert nicht, die Abfrage strört sich entweder an den spitzen Klammern und/oder an den Blackslash der im String enthalten ist.
String interpretiert den Backslash wohl als Schalter, und kann mit dem anschließenden vermeintlichen folgenden Parameter nichts anfangen.

Super Leute, für die schnellen Antworten.
Habe mich schon lange nicht mehr gemeldet, weil ich keine Probleme/Wünsche hatte. :-)

Gruß Frank
frank9652
Norton Commander
Beiträge: 142
Registriert: Di 27. Mär 2007, 13:03
Wohnort: Göppingen

Re: String zählen

Beitrag von frank9652 »

sorry Tippfehler.

Muß natürlich heißen:
Find interpretiert den Backslash wohl als Schalter...

Gruß Frank
DOSferatu
DOS-Übermensch
Beiträge: 1145
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: String zählen

Beitrag von DOSferatu »

Ja, das mit den spitzen Klammern ist ganz einfach zu erklären. Das sind sogenannte "Umleitungen":

programm.exe >beispiel.txt

Führt das Programm aus und leitet alle Textausgaben, die normaleweise übers BIOS an den Bildschirm gegeben werden, in eine Datei (hier namens beispiel.txt) um.

programm.exe <beispiel.txt

Führt das Programm aus und für jede (von BIOS-Funktionen gesteuerte) Tastenabfrage werden erstmal alle Zeichen, die in der Datei beispiel.txt enthalten sind, an das Programm übergeben (und erst, wenn die Datei "ausgelesen" ist, wird die normale Tastenabfrage benutzt.

Auch andere Zeichen (z.B. das Pipe-Zeichen | ) sind in der Kommandozeile für spezielle Funktionen reserviert. Ich hätte nun diese Zeichen "escapen" können, also, daß man z.B. für unerlaubte Zeichen einfach deren Hexadezimalcode eingibt, (mit einem Zeichen davor, um das zu kennzeichnen) das wäre dann für <sat>10</sat> z.B. so etwas wie:

#3Csat#3E10#3C#2Fsat#3E

Aber ich dachte, da hat vielleicht keiner Lust, jedesmal zu überlegen a) welche Zeichen muß ich escapen (man könnte dann zwar auch alle escapen, aber dann würde die Kommandozeile vielleicht zu lang) und b) welcher Hex-Code (man könnte auch dezimal nehmen. Man müßte eben nur immer (bei dieser Form, siehe oben) eine feste Ziffernlänge benutzen, z.B. entweder 2 - dann könnte man Zeichen 00 bis 99 escapen - oder 3, dann 000 bis 255...

OK, das soll zur Erklärung erst einmal reichen.
frank9652
Norton Commander
Beiträge: 142
Registriert: Di 27. Mär 2007, 13:03
Wohnort: Göppingen

Re: String zählen

Beitrag von frank9652 »

Hallo DOSferatu!
DOSferatu hat geschrieben: #3Csat#3E10#3C#2Fsat#3E
Aber ich dachte, da hat vielleicht keiner Lust, jedesmal zu überlegen a) welche Zeichen muß ich escapen...
Bin mir nicht sicher, ob ich dich richtig verstehe.
Man müßte also in der LOG-Datei zuerst die Umleitzeichen durch ein Hash ersetzen?
o.k., könnte man mit "Textreplace" machen, das ich von früher her kenne.

Mit dem Programm COUNTSTR klappt die Auswertung ganz hervorragend und bin sehr zufrieden damit.

Ich brauche es für GPX-Log-Dateien die locker mehrere MB groß sein können.

Habe mir mittlerweile eine Batch und 66 Parameterdateien zu COUNTSTR erstellt.
Es wird nach den Strings <sat>...</sat> gesucht (wobei ... für 1 bis 66 steht), und das Ergebnis in eine Datei geschrieben.
Als Ausgabe erhalte ich dann z.B.

Code: Alles auswählen

<sat>1</sat> = 0
<sat>2</sat> = 0
<sat>3</sat> = 0
<sat>4</sat> = 0
<sat>5</sat> = 0
<sat>6</sat> = 2
<sat>7</sat> = 90
<sat>8</sat> = 735
<sat>9</sat> = 1339
<sat>10</sat> = 534
<sat>11</sat> = 58
<sat>12</sat> = 0
...
so kann ich anhand der Anzahl der gefundenen Satelliten einen Eindruck von der Datenqualität bekommen.
Um einen GPX-Standort mit Höhenangabe zu erhalten benötigt man mindestens 4 Satelliten.
Mehr Satelliten bedeutet eine höhere Standortgenauigkeit und somit eine bessere Datenqualität.
An der obigen Auswertung kann man sehen, das zweimal der Kontakt mit "nur 6 Satelliten" bestand.
Die Bedingungen waren aber fast ideal, ich muß noch weitere Auswertungen unter schlechteren Bedingungen machen um einen Eindruck von dem verwendeten Gerät zu bekommen.

Gruß Frank
DOSferatu
DOS-Übermensch
Beiträge: 1145
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: String zählen

Beitrag von DOSferatu »

frank9652 hat geschrieben:Bin mir nicht sicher, ob ich dich richtig verstehe.
Man müßte also in der LOG-Datei zuerst die Umleitzeichen durch ein Hash ersetzen?
o.k., könnte man mit "Textreplace" machen, das ich von früher her kenne.
Nein. Es ist alles in Ordnung.
Es ging nur darum, daß ich erklärt habe, warum ich es so gelöst habe, daß man den zu findenden String in ein File schreiben muß und ihn nicht direkt per Kommandozeile übergíbt. Weil eben manche Zeichen in der Kommandozeile nicht gehen, weil sie dann nicht normal gelesen würden (liegt nicht an mir, sondern am DOS), weil z.B. so etwas wie spitze Klammern spezielle Funktionen auslösen würden.

Und ich habe nur ein BEISPIEL gegeben, wie es ginge, daß man es DOCH direkt per Kommandozeile eingeben könnte - nämlich, indem man diese "bösen" Zeichen durch etwas anderes ersetzt. Das Programm würde das dann so einlesen und diese Stellen wieder intern durch das richtige Zeichen ersetzen. Das Hash-Zeichen war nur ein Beispiel. Gemeint war:

Anstatt:
COUNTSTR logfile.txt <sat>10</sat>
(Was ja nicht geht, weil der 2. Parameter diese < > Zeichen enthält) würde man dann schreiben:
COUNTSTR logfile.txt #3Csat#3E10#3C#2Fsat#3E
Das # wäre in dem Fall nur irgendein Zeichen, das angibt: Jetzt kommt ein "verschlüsseltes Zeichen". Und danach 2 Hex-Ziffern, die dem ASCII-Code des Zeichens entsprechen. Statt # könnte man auch & oder $ oder was auch immer benutzen. Das war eben nur ein Beispiel dafür, wenn man den zu findenden String direkt selnst in die Kommandozeile schreiben wollen würde. So ein zu findender String könnte ja theoretisch auch Leerzeichen enthalten - auch diese müßte man auf irgendeine Art "escapen", weil ein richtiges Leerzeichen ja die Parameter voneinander trennt.

Aber, so wie ich das gelesen habe, bräuchtest Du es eigentlich, daß Du gleich nach mehreren Strings suchen kannst. Auch das wäre ohne Weiteres möglich zu implementieren - also z.B., daß man gleich mit einem Durchlauf nach bis zu 255 Strings suchen könnte. Der Suchvorgang würde dann zwar etwas länger dauern - aber das tut er ja auch, wenn man für jeden String extra das Programm neu starten muß (dann dauerts ja NOCH länger). Also, man KÖNNTE das Programm bei Bedarf auch so verändern, daß man in das Suchstring-File (also da, wo Du jetzt den einen String einträgst) bis zu 255 zu suchende Strings einträgt und das Programm gleich mi einem Durchgang nach allen sucht und sie zählt.

Ich sags mal so: Du schreibst ja hier mit dem, der das Ding programmiert hat. Also ist es auch ohne Probleme möglich, das Programm entsprechend abzuändern.
DOSferatu
DOS-Übermensch
Beiträge: 1145
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: String zählen

Beitrag von DOSferatu »

Mir war grad langweilig...
Also habe ich es so abgeändert, daß man im String-File (also dem File, das man als 2. Parameter angibt) auch mehrere (maximal 255) zu scannende Strings angeben kann. Diese sind einfach zeilenweise untereinander einzutragen.

D.h. diese Version (v0.02) funktioniert auch weiterhin genau wie Version 0.01, wenn man eben nur einen Súchstring einträgt - ODER man trägt eben mehrere zu suchende Strings ein und es wird nach mehreren gleichzeitig gesucht (das ist die neue Funktion).

Herunterzuladen wieder dort:
http://www.imperial-games.de/z/countstr.zip
frank9652
Norton Commander
Beiträge: 142
Registriert: Di 27. Mär 2007, 13:03
Wohnort: Göppingen

Re: String zählen

Beitrag von frank9652 »

Klasse, werde es testen.
Dann kann ich meine 66 Parameterdateien auf eine reduzieren.

Gruß Frank
frank9652
Norton Commander
Beiträge: 142
Registriert: Di 27. Mär 2007, 13:03
Wohnort: Göppingen

Re: String zählen

Beitrag von frank9652 »

Getestet, funktioniert einwandfrei.

Damit ich mir die Syntax nicht merken muß, habe ich folgende Batch angelegt:

START.BAT

Code: Alles auswählen

@echo off
countstr test.gpx param.txt
...man könnte die Batch natürlich noch ausschmücken, indem zuerst geschaut wird ob die zu scannende Datei überhaupt vorhanden ist,
-und wenn nicht, daß dann eine Fehlermeldung mit dem entsprechenden Hinweis ausgegeben wird.

Die Datei PARAM.TXT enthält die Parameter

Code: Alles auswählen

<sat>1</sat>
<sat>2</sat>
<sat>3</sat>
<sat>4</sat>
<sat>5</sat>
<sat>6</sat>
usw...
DOSferatu
DOS-Übermensch
Beiträge: 1145
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: String zählen

Beitrag von DOSferatu »

frank9652 hat geschrieben:...man könnte die Batch natürlich noch ausschmücken, indem zuerst geschaut wird ob die zu scannende Datei überhaupt vorhanden ist,
-und wenn nicht, daß dann eine Fehlermeldung mit dem entsprechenden Hinweis ausgegeben wird.
Muß man aber nicht unbedingt, weil COUNTSTR.EXE ja schon selbst eine Fehlermeldung ausgibt, wenn das zu scannende File oder das File mit den Strings nicht vorhanden ist...
frank9652
Norton Commander
Beiträge: 142
Registriert: Di 27. Mär 2007, 13:03
Wohnort: Göppingen

Re: String zählen

Beitrag von frank9652 »

Hallo DOSferatu!
DOSferatu hat geschrieben: Muß man aber nicht unbedingt, weil COUNTSTR.EXE ja schon selbst eine Fehlermeldung ausgibt, wenn das zu scannende File oder das File mit den Strings nicht vorhanden ist...
Oh, DAS habe ich nicht getestet.
Noch einmal recht herzlichen Dank.

Gruß Frank
Antworten