String zählen
String zählen
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
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
Re: String zählen
Falls sowas nicht auffindbar ist, könnte ich es schnell programmieren. Melden, wenn Interesse.
Re: String zählen
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
dann koennte 'find /c "Zeichenfolge" Dateiname' dir helfen...
/c zeigt nur die Anzahl der Zeilen an, die die angegebene Zeichenfolge enthalten
Re: String zählen
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
Zu finden hier:
http://www.imperial-games.de/z/countstr.zip
Viel Spaß damit
Re: String zählen
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
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
Re: String zählen
sorry Tippfehler.
Muß natürlich heißen:
Find interpretiert den Backslash wohl als Schalter...
Gruß Frank
Muß natürlich heißen:
Find interpretiert den Backslash wohl als Schalter...
Gruß Frank
Re: String zählen
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.
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.
Re: String zählen
Hallo DOSferatu!
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.
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
Bin mir nicht sicher, ob ich dich richtig verstehe.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...
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
...
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
Re: String zählen
Nein. Es ist alles in Ordnung.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.
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.
Re: String zählen
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
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
Re: String zählen
Klasse, werde es testen.
Dann kann ich meine 66 Parameterdateien auf eine reduzieren.
Gruß Frank
Dann kann ich meine 66 Parameterdateien auf eine reduzieren.
Gruß Frank
Re: String zählen
Getestet, funktioniert einwandfrei.
Damit ich mir die Syntax nicht merken muß, habe ich folgende Batch angelegt:
START.BAT
...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
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
-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...
Re: String zählen
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 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.
Re: String zählen
Hallo DOSferatu!
Noch einmal recht herzlichen Dank.
Gruß Frank
Oh, DAS habe ich nicht getestet.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...
Noch einmal recht herzlichen Dank.
Gruß Frank