145. Auszählen von Zeichen in String mit Batch -absolut neue Methode

Die letzte Abhandlung handelte vom Zugriff auf einen String. Was liegt da näher, als die länge eines strings mit Bordmitteln zu bestimmen. Der christliche Autor dieser Webseite bedient sich dazu der mächtigsten Waffe von Jesus Christus - dem Gleichnis-:)

Dazu nehmen wir die Bundesrepublik auseinander und zerlegen Sie in ihre Bestandteile - damit ist das Wort gemeint und jenes hat bekanntlich 14 Buchstaben.

Vielleicht erstmal die Batch und für die Profis und danach die Erklärung für die Laien...

Im zweiten Teil dieser Abhandlung steht übrigens dann der Quellcode für eine Batch, die ganze Texte ausliest - nach der folgenden Batch und Erklärung, jetzt aber mal die Grundbatch . eine reine Batchlösung:

count.bat
set destination=%~dp0%
set /a x=1
Set newstring=
:loop
set hlpstr=0,%x%%%
>"%destination%alpha.bat"  ECHO set destination=%%~dp0%%
>>"%destination%alpha.bat"  ECHO set str=Bundesrepublik
>>"%destination%alpha.bat"  ECHO set str=%%str:"=x%%
>>"%destination%alpha.bat"  ECHO set str1=%%str:~%hlpstr%%
>>"%destination%alpha.bat"  ECHO Set newstring=%%newstring%%%%str1%%
>>"%destination%alpha.bat"  ECHO if "%%newstring%%"=="%%str%%" echo aus ^>aus.txt
>>"%destination%alpha.bat"  ECHO exit
start /wait alpha.bat
if exist aus.txt goto ende
set /a x=%x%+1
goto loop
:ende
echo.%x% >auswertung.txt
del aus.txt
del alpha.bat


Ganz ohne enable...expansion..., ist doch irgendwo genial!

Das ganze im Schnelldurchlauf erklärt: Wir bestimmen die Lage der Batch: set destination=%~dp0%

Wir setzen danach erstmal eine Variable auf 1 (set /a x=1), mit der wir die Buchstaben zählen. Dann erschaffen wir eine Variable, die erstmal leer ist Set newstring=.

Danach gehen wir in eine Schleife  :loop  , in der wir zwei Sachen machen: Wir fragen den ersten Buchstaben eines Strings ab, vergleichen ihn mit dem Stringwort Bundesrepublik, stellen fest, dass ein B nicht die ganze Bundesrepublik ist und Schreiben das B in Variable newstring. Beim nächsten Durchlauf fragen wir BU ab, die Variable x wird auf zwei erhöht und beides ist immer noch gleich.

Das Spiel machen wir bis Bundesrepublik gleich 14 ist und dann setzen wir ein Zeichen, dass die Schleife beendet wird. Die 14 wird in ein Textdokument geschrieben und die Hilfsdateien zerstört. Das ist das Grundprinzip: hört sich einfach an, aber wir müssen tricksen...

So, jetzt wird es einfach.  Wir schreiben eine Hilfsbatch mit Namen  alpha.bat:

In der ersten Zeile, die nur ein > Zeichen hat (das ist wichtig, damit bei weiteren Durchläufen alte Batches überschrieben werden!), wird erstmal die Lage bestimmt:

 aus  >"%destination%alpha.bat"  ECHO set destination=%%~dp0%% wird in der Batch alpha.bat in Klarschrift:
  set destination=%~dp0%

Danach wird der String abgefragt,  der als Bundesrepublik definiert wird: >>"%destination%alpha.bat"  ECHO set str=Bundesrepublik
wird in der Batch zu set str=Bundesrepublik

Der Autor geht davon aus, dass Sie nun wissen, dasss >>"%destination%alpha.bat"  ECHO  nur die Formel zum Schreiben für eine weitere Zeile in die Batch ist und im folgenden nicht einer weiteren Erklärung bedarf... destination ist der Pfad zur Batch, den wir zuvor definierten mit set destination=%~dp0%

Weiter im Text:

>>"%destination%alpha.bat"  ECHO set str=%%str:"=x%%

Diese Zeile ist dem Umstand geschuldet, dass in der Variable Anführungszeichen auftauchen könnten, wenn Sie z. B. Er sagte:"ich liebe Dich!" als string eingeben. Dann sind da zwei Anführungszeichen und die Batch bleibt stehen.

Also wird ein Anführungszeichen durch ein x erstetzt, wenn es denn in der Variable vorkommen sollte.  Der Batch ist es egal, ob da ein x oder Anführungszeichen steht - für die Batch würde da eben stehen: Er sagte:xich liebe Dich!x...

Wir Schafffen einen Hilfestring set hlpstr=0,%x%%%,  der die Variable X enthält: %x% , also im ersten Durchlauf eine 1 beinhaltet. Die zwei Prozentzeichen sind dem Umstand geschuldet, dass %% von der cmd zu einem Prozentzeichen expandiert wird. Für die cmd steht da also set hlpstr=0,1% .


Die nächste Reihe wird ein wenig schwerer und deshalb noch mal wiederholt: >>"%destination%alpha.bat"  ECHO set str1=%%str:~%hlpstr%%

Wir schreiben also in die Batch die Zeile set str1=%str:~0,1% . Richtig, der Hilfsstring hlpstr. wurde ja vor der Erstellung der Batch oben definiert und jetzt das Ergebnis in die Batch geschrieben - einfache Frage der Syntax. Das Prozentzeichen musste wieder verdoppelt werden, damit ein % in der Alpha,bat steht (Prozentzeichen werden durch Verdopplung escaped).

Was wurde mit diesem genialen Zug erreicht? In er Hilfsbatch steht nun der Befehl zur ersten Abfrage des ersten Buchstabens, denn das B aus Bundesrepublik ist gleich  %str:~0,1% , dass in der Variable str1 gespeichert wird...

>>"%destination%alpha.bat"  ECHO Set newstring=%%newstring%%%%str1%%

Die nächste Zeile sieht als Batchzeile dann ungefähr so aus: Set newstring=%newstring%%str1%
Aha, in dieser Zeile wird dem newstring, der in der Hauptbatch leer war, um das B beim ersten Durchlauf ergänzt, sobald die Batch gestartet wird. Zudiesem Zeitpunkt wird die Batch aber erst geschrieben...
>>"%destination%alpha.bat"  ECHO if %%newstring%%==%%str%% echo aus ^>aus.txt

(^ Das Karatzeichen escaped übrigens >)


In der Alpha-Batch steht also als nächste Zeile: if "%newstring%"=="%str%" echo aus >aus.txt


Jetzt kommt also der Vergleich, wenn also das B gleich Bundesrepublik beim ersten Durchlauf wäre, dann würde ein Textdokument mit dem Namen aus.txt und als Inhalt aus da stehen.

Stellen wir uns mal vor, dass bei der Ausführung der Batch irgendwann mal der 14. Durchlauf mit dem Wort Bundesrepublik (set str1=%str:~0,14%)erreicht würde, also in newstring Bundesrepublik stehen würde, dann gibt es dieses neue Textdokument, weil Bundesrepublik (str) eben gleich Bundesrepublik (newstring) ist.

Nachtrag: 04.03.2014: Ein Nachtrag: Um mehrere Wörter in einem Satz mit Leerzeichen zu zählen, müssen die Variablen str und newstring in einem Anführungszeichen stehen. Warum? Weil die Variable als ganzes adressiert werden muss, die von Chip haben es mit einer ähnlichen Batch gemacht und es funktioniert... Es reicht aber, wenn man den VGL in Anführungszeichen setzt...

Man kann also durchaus ganze Sätze mit dieser Batch bearbeiten wie die Bundesrepublik ist toll als str Dann sollte der Satz einfach so ohne Anführungsstriche da stehen, also oben set str=Bundesrepublik ist toll! hat 24 Zeichen 22 Buchstaben und zwei Leerzeichen...

Denn irgendwann wollen wir die Schleife ja auch mal verlassen. Das lassen wir mal so im Raum stehen...

>>"%destination%alpha.bat"  ECHO exit

Die letzte Zeile ist essentiell wichtig, da ansonsten nach jedem Durchgang gefragt werden würde, ob wir die Batch wirklich weiterlaufen lassen wollen und das mit einem ja oder nein in der Hauptbatch quittieren müssten...

start /wait alpha.bat

Szenenwechsel: So, jetzt befinden wir uns wieder in der Hauptbatch und starten die Nebenbatch - beim ersten Batchdurchlauf ist newstring=B und B ( str) ungleich Bundesrepublik.
Das wurde bereits erklärt, also setzen wir nun weiter unsere Schleife, in der wir uns immer noch befinden, fort.

if exist aus.txt goto ende

Aha, wir befinden uns eigentlich in der Ausstiegsformel, denn wenn dasTextdokument aus.txt vorliegt, dann geht es zum Sprungpunkt :ende, dass ist aber beim ersten Durchlauf nicht der Fall, also weiter:

set /a x=%x%+1

X wird also in der nächsten Runde um eine Zahl erhöht. Hier kommen wir aber nur hin, wenn x im Falle des Wortes Bundesrepublik kleiner als 14 ist. Denn wenn x=14, dann würde im newstring Bundesrepublik stehen und str1 Bundesrepublik sein (set str1=%str:~0,14%). Also dieser Teil übersprungen werden...

goto loop

Der erste Versuch war ein Fehlschlag, also wird nun Bu ein weiteres mal abgeprüft mit der Hilfebatch alpha.bat, nur das die Variable x um eins erhöht wurde (set str1=%str:~0,2%), newstring=Bu und das ist wieder ungleich Bundesrepublik), also geht dieses Spiel nun 14 mal!

Jetzt ist newstring=str also Bundesrepublik gleich Bundesrepublik und nach 13 untauglichen Vergleichen gibt es nun ein valides Gleichnis...und damit geht es weiter zum Sprungpunkt: :ende

Dann wird x nur noch in ein Auswertungsdokument geschrieben. Das geht nur in der Hauptbatch, da diese ja x immer fleißig mitzählte, während die Hilfsbatch alpha.bat ja nur immer konkret die Prüfung mit den expandierten Variablen durchführte und nicht wissen kann, dass Sie schon 13 mal erfolglos erstellt wurde...
echo.%x% >auswertung.txt

Da steht also nun die Zahl drin.

Danach wird der aus.txt und die alpha.bat gelöscht, die Sie, wenn Sie die Batch nochmals nachvollziehen wollen, gerne  auch erhalten könne, wenn Sie  die Löschbefehle wegnehmen.

Hintergrund: Was ist an dieser Batch denn nun so neu und toll?

Das sehen Profis auf den ersten Blick; Einen String zu vergleichen ist easy, aber sobald die Zeile set str1=%str:~0,1% ins Spiel kommt,  wird es kompliziert, weil die rote 1 nicht einfach durch eine Variable (X) ersetzt werden kann.

Der Autor dieser Seite baut eine Brücke, indem er die Variable %str:~0,1% einfach zerlegt und eine Hilfsvariable erschafft (hlpstr=0,%x%%%), die  zusammengesetzt in Klarschrift  in der Hilfebatch hineingeschrieben wird (set str1=%%str:~%hlpstr%%). Je nachdem welcher Wert  für x steht, steht da dann in der Hilfbatch beim 3. Durchlauf z. B. set str1=%str:~3%

Ist mal wieder so eine typische Alternativkonstruktion, wie Sie der Autor z. B. für die suche nach Duobletten erfand.

Für den Autor dieser Webseite ist das auf der Metaebene nur eine weitere Abhandlung auf dem Weg zur KI und ein Merkzettel.  Ja, darüber lachen alle, aber hat der Autor nicht auch eine Dokumenten und Textverschlüsselung, die jetzt auch wegen der letzten Ereignisse bald verbessert wird, geschaffen ? - wer zu letzt lacht...




Level 2 Warum ein halbwegs anständiger Zähler schwer zu erstellen ist anhand einer Batch erklärt, die fast 80 % aus Batch besteht und die grobsten Hürden überwindet und ein Textdokument konvertiert (beste Batch zur Zeit im Internet? )



Bereits an der Überschrift erkennen Sie, dass man lieber mit Wordpad, Open Office oder Office weitaus weniger Probleme hat. Der Autor schrieb wie gesagt eine Batch, die einen VBS-Anteil hat - ist sonst zu aufwendig, man verzeihe mir meine Faulheit. Mit dieser Batch  können  Sie aus einem Textdokument fließende  Texte  auslesen, die Zeilen werden  einzeln protokolliert, das Ergebnis ohne Leerzeichen ausgegeben und die üblichen Zeichen wie !":.,()?§-= akzeptiert - dann hört es aber schon auf. <> sind tödlich, die Batch für richtig längere Texte zu langsam und bei Zeilen über 130 Zeichen dürfte es Probleme geben...

erstmal wie immer der Code und dann wird bei der Erklärung auf die Probleme eingegangen:

irgendeinname.bat

set destination=%~dp0%
set /a x=1
set /a b=0
Set newstring=
>"%destination%prtk.txt"  ECHO Zeichen in Reihen 


 
copy probe.txt quell.txt

>"%destination%alpha.vbs"  ECHO Set objFSO = CreateObject("Scripting.FileSystemObject")
>>"%destination%alpha.vbs"  ECHO Set objFile = objFSO.OpenTextFile("%destination%quell.txt", 1)

>>"%destination%alpha.vbs"  ECHO strText = objFile.ReadAll
>>"%destination%alpha.vbs"  ECHO objFile.Close
>>"%destination%alpha.vbs"  ECHO strNewText = Replace(strText, ":", "x")

>>"%destination%alpha.vbs"  ECHO Set objFile = objFSO.OpenTextFile("%destination%quell.txt", 2)
>>"%destination%alpha.vbs"  ECHO objFile.WriteLine strNewText
>>"%destination%alpha.vbs"  ECHO objFile.Close
start /wait alpha.vbs

findstr ^.$ quell.txt >quell1.txt

timeout /t 1

FOR /F "tokens=*" %%A IN ('findstr /N .* "quell1.txt"') DO echo %%A^: >> probe.log
FOR /F "tokens=1,* delims=:"  %%i  IN (probe.log) DO echo %%j >probe_%%i.log

set /a z=1

:further
for /f "tokens=1,* delims=:" %%a in (probe_%z%.log) do set nwstrg=%%a


:loop
set hlpstr=0,%x%%%
>"%destination%alpha.bat"  ECHO set destination=%%~dp0%%
>>"%destination%alpha.bat"  ECHO set str=%nwstrg%
>>"%destination%alpha.bat"  ECHO set str=%%str:"=x%%
>>"%destination%alpha.bat"  ECHO set str=%%str: =%%
>>"%destination%alpha.bat"  ECHO set str1=%%str:~%hlpstr%%
>>"%destination%alpha.bat"  ECHO Set newstring=%%newstring%%%%str1%%
>>"%destination%alpha.bat"  ECHO if "%%newstring%%"=="%%str%%" echo 1 ^>aus.txt
>>"%destination%alpha.bat"  ECHO exit
start /wait alpha.bat
if exist aus.txt goto ende
set /a x=%x%+1
goto loop
:ende
set /a b=%b%+%x%
>>"%destination%prtk.txt"  ECHO %x%
set /a x=0
del aus.txt

set /a z=%z%+1
if exist *_%z%.log (goto further) else goto final
:final
>>"%destination%prtk.txt"  ECHO %b% Zeichen ohne Leerzeichen insgesamt
del alpha.bat
del probe.log
del probe_*.log
del alpha.vbs
del quell.txt
del quell1.txt


Wenn Sie die Batch an irgendeiner Textdatei ausprobieren wollen, dann empfiehlt sich, den roten Dateinamen einfach entsprechend ihrem Dateinamen mit der Endung *.txt auszutauschen...

Als probetext nahm der Autor diesen Text:

probe.txt

I think":I

am
legend"
!":.,()?§-=
Das ist eine Textzeile geschrieben in Word, Calibri, mit der Schriftgröße11, also ein normales Dok……

und als Ergebnis kommt bei dieser Konstellation heraus prtk.txt:

Zeichen in Reihen 
9
2
7
11
86
115 Zeichen ohne Leerzeichen insgesamt

Dann mal auf zur Erklärung der Batch, die für fortgeschrittene User gedacht ist, da ein Anfänger an allen Ecken scheitert - ist wirklich eine komplexe Aufgabe...

Grundprinzip ist wieder der Vergleich eines strins mit einem string,  der Buchstabe für Buchstabe wieder aufgebaut wird und bei Übereinstimmung mit dem Originalstring  die Zahl  der Durchläufe ausgibt.

Das eben Zeile für Zeile. Der Rest sind widrige Probleme mit Syntax und Batches per se...

set destination=%~dp0%
set /a x=1
set /a b=0
Set newstring=
>"%destination%prtk.txt"  ECHO Zeichen in Reihen 


Zuerst werden Variablen und ein Textdokument erstellt - erstmal nichts besonders. Die Variable destination beinhaltet den Dateipfad  zm Ordner, wo die Batch liegt.

Der erste Satz der Protokolldatei wird geschrieben - Zeichen in Reihen

 copy probe.txt quell.txt

>"%destination%alpha.vbs"  ECHO Set objFSO = CreateObject("Scripting.FileSystemObject")
>>"%destination%alpha.vbs"  ECHO Set objFile = objFSO.OpenTextFile("%destination%quell.txt", 1)

>>"%destination%alpha.vbs"  ECHO strText = objFile.ReadAll
>>"%destination%alpha.vbs"  ECHO objFile.Close
>>"%destination%alpha.vbs"  ECHO strNewText = Replace(strText, ":", "x")

>>"%destination%alpha.vbs"  ECHO Set objFile = objFSO.OpenTextFile("%destination%quell.txt", 2)
>>"%destination%alpha.vbs"  ECHO objFile.WriteLine strNewText
>>"%destination%alpha.vbs"  ECHO objFile.Close
start /wait alpha.vbs

Der Grundtext wird erstmal kopiert, weil die Kopie im Quelltext geändert wird. Das Original bleibt hingegen erhalten - dass ist doch selbstverständlich?

Dann wird ein VBS-Script generiert: >"%destination%alpha.vbs"  ECHO ist der Pfad zur Batch mit der oben definierten Variable destination...

Dahinter sind dann die Zeilen vom VBS:

Interessant ist nu, dass ein Doppelpunkt durch ein x ersetzt wird. Dazu wird das Dokument quell.txt geöffnet, dann eingelesen und als Variable gespeichert, um dann wieder geschlossen zu werden. In der Variable werden alle Doppelpunkte durch ein X ersetzt. Dann wird das Dokument quell.txt geöffnet und der Text mit dem neuen veränderten Text aus der Variablen überschrieben.

Der Autor verwendete das VBS auch ein wenig mit Absicht, um ihnen zu zeigen: Sie können in VBS ein ganzes Dokument einlesen und mit zwei Befehlen mehr  schnell die Anzahl eines Textes ermitteln, während mit der CMD so etwas lange dauert und der Erfolg eher fraglich ist...

Na ja, die Doppelpunkte sind nach dem  Start der Batch jedenfalls ersetzt und nachdem das innerhalb von wenigen Milisikunden erledigt ist, während die Batch wartet (wait) geht es weiter...ab jetzt nur noch Batch...

findstr ^.$ quell.txt >quell1.txt Als erstes werden sämtliche Leerzeilen entfernt. Das geht mit nur einem Befehl, der ein wenig sich dem Umstand bedient, dass Sätze mit Leerzeilen keinen Textinhalt haben - der Autor zitiert mal die Windowshilfe von findstr:

Schnellübersicht regulärer Ausdrücke:
  .         Platzhalter: beliebiges Zeichen
  *         Wiederholung: keine oder mehrere Wiederholungen
            des/der vorhergehenden Zeichens/Klasse
  ^         Zeilenposition: Anfang der Zeile
  $         Zeilenposition: Ende der Zeile

Also werden alle Zeilen selektiert,  die Text beinhalten...

Merke: Leerzeilen sind bei der Batchbearbeitung tödlich, weil der zu untersuchende Text Zeile für Zeile abgearbeitet wird. Egal, wie Sie dann weiterarbeiten...

 timeout /t 1

FOR /F "tokens=*" %%A IN ('findstr /N .* "quell1.txt"') DO echo %%A^: >> probe.log
FOR /F "tokens=1,* delims=:"  %%i  IN (probe.log) DO echo %%j >probe_%%i.log

set /a z=1

:further
for /f "tokens=1,* delims=:" %%a in (probe_%z%.log) do set nwstrg=%%a


 Der Autor setzt jetzt mal einen Ruhepunkt von einer Sekunde, da ja so ein Doument gröér sein kann...

Dann kommen zwei for-Schleifen - in der ersten werden die Zeilen nummeriert nach dem Schema: 01:Text und nach ein weiterer Doppelpunkt eingefügt...

Aus diesem Konstrukt werden die Zeilen in der zweiten for-Schleife in einzelne Textdokumente je einer Zeile zerlegt.

Die Dokumente übernehmen die Zeilennummerierung als probe_1.log...Dabei werden die Nummern wieder im Text des Dokumentes gelöscht.

Mit der Zeile: for /f "tokens=1,* delims=:" %%a in (probe_%z%.log) do set nwstrg=%%a  wird dann eine Zeile als String übergeben.

Die liegt in einer Schleife. Der Sprungpunkt ::further liegt unmittelbar davor. Die Variable Z wird bei jedem Schleifendurchlauf um 1 erhöht und in probe_%z%.log)  liegt immer nur eine Zeile vor. Die Variable newstring ist also der Zeileninhalt und wird übergeben.

Der Ausstieg aus der Schleife geschieht am Ende dieser Schleife mit if exist *_%z%.log (goto further) else goto final, aber das wird dann später erklärt. So viel hierzu: Wenn kein probe_7.log in unserer Demo vorliegt, also z > 5 ist, dann wird am Ende der Schleife auf den Ausstiegspunkt final verwiesen...

Zwischenstand: wir haben nun fünf  Textdokumente mit jeweils einer Textzeile.




:loop
set hlpstr=0,%x%%%
>"%destination%alpha.bat"  ECHO set destination=%%~dp0%%
>>"%destination%alpha.bat"  ECHO set str=%nwstrg%
>>"%destination%alpha.bat"  ECHO set str=%%str:"=x%%
>>"%destination%alpha.bat"  ECHO set str=%%str: =%%
>>"%destination%alpha.bat"  ECHO set str1=%%str:~%hlpstr%%
>>"%destination%alpha.bat"  ECHO Set newstring=%%newstring%%%%str1%%
>>"%destination%alpha.bat"  ECHO if "%%newstring%%"=="%%str%%" echo 1 ^>aus.txt
>>"%destination%alpha.bat"  ECHO exit
start /wait alpha.bat
if exist aus.txt goto ende
set /a x=%x%+1
goto loop
:ende
 
Im ersten Duchlauf (z=1) wird das erste Zeilendokument probe_%z%.log = probe_1.log als String übergeben.

Die nächsten Zeilen wurden bereits im ersten Teil der Abhandlung erklärt: Eine Batch wird geschrieben, die den ersten Buchstaben abfragt. Die Variable newstring  wird abgefragt, die Anführungszeichen im Text durch ein X ausgetauscht (set str=%%str:"=x%%) und Leerzeichen (set str=%%str: =%%) entfernt. Ist der Newstring gleich dem Originalstring, so wird ein Kontrolltext geschrieben, der die zweite innere Schleife beendet. Das Ganze passiert in einerBatch. Ist das erledigt (if exist aus.txt goto ende), wird die Schleife für diesen String beendet.
Sonst wird die Variable x um eine Nummer in der inneren Schleife erhöht


set /a b=%b%+%x%
>>"%destination%prtk.txt"  ECHO %x%
set /a x=0
del aus.txt


So, Am Ende der Bearbeitung des ersten Strigengs wird X in der Variablen b gesichert, damit x wieder auf null gesetzt werden kann und der nächste String  gezählt werden kann. >>"%destination%prtk.txt"  ECHO %x%  , ohne zu vergessen un unserem Protokolltext die Anzahl der bisherigen Zeichen auszudrucken...




set /a z=%z%+1
if exist *_%z%.log (goto further) else goto final
:final
>>"%destination%prtk.txt"  ECHO %b% Zeichen ohne Leerzeichen insgesamt
del alpha.bat
del probe.log
del probe_*.log
del alpha.vbs
del quell.txt
del quell1.txt

Dann wird z um eine Zahl höher gesetzt, damit nun das Dokument probe_2.txt im zweiten Durchlauf bearbeitet werden kann. Erstmal wird aber gefragt, ob es ein probe_2.txt - Dokument überhaupt noch gibt (if exist *_%z%.log (goto further) else goto final), ansonsten geht es zum Sprungpunkt :further, wo wieder die for Schleife aktiv wird und eben das zweite Dokument überprüft, dass wieder innerhalb der kleinen Schleife den  String zerlegt, um Ende wieder in die große Schleife zu gehen, wo dann das dritte probe_3_txt überprüft wird...

Das geht dann so bis zum siebenten Dokument, da nach Entfernug der Leerzeilen  nur  fünf Zeilen ausgewertet werden.

Das ist jetzt alles ein wenig Larifari erklärt, aber wer  Zählen will, muss schon ein wenig Ahnung haben.

Aus diesem Grund sind die Angaben im Internet immer sehr  unpräzise, weil egal, welcher Lösungsansatz auch beschritten wird, dass in For - Befehlen, dann in Schleifen  und Sonderbefehlen ausufert.

Der Autor vermied jetzt mal die schweren Befehle und verwendete nur Basisbefehle...

Fazit:

Jedes Kleinkind kann Zeichen  zählen, aber für uns erwachsene Batchschreiber ist das eine ausgewachsene Herausforderung.

Der Autor gab am Anfang mit VBS den halben Weg zur Lösung ein: Dort wird der Text einfach als Variable eingelesen und danach können Sie mit einer einfachen Schleife ziemlich einfach die Zeichen lesen, aber das hier ist ja eine Abhandlung über Batch.

Es gibt jede Menge Zeichen, die die Batch stoppen und wenn es nur < > Zeichen sind.

Hey, Sie könnten diese Batch mit set local... und so einen Gedöns verbessern, aber es bleibt dabei: Batches allein sind suboptimal, um wirklich richtig gute Ergebnisse zu erzielen und als Admin müssen Sie die Batches sowieso an Zeichen und Bedürfnisse anpassen.

Hinzu kommt, dass Sie mit einmal copy und paste Zeichen, Leerzeichen, Wöter ...auszählen können.

Mit den zwei hier vorgestellten Batches haben Sie zumindest gute Anhaltspunkte und die erste gut erklärte Batch reicht für Admins aus - die wissen, was ich meine und wozu man das gebrauchen kann-:)

In diesem Sinne viel Erfolg für andere Batchschreiber...

Nachtrag 08.02.2014

Hm, im Nachhinein ist vielleicht die Schleifenkonstruktion genial - nur die Art der Zählung lässt zu wünschen übrig. Wenn Sie die Zerlegung des Strings in Zeilen durchführen und dann einen Abgleich nach einem Zeichen am Ende des Satzes machen, das Sie vorher implementierten und dabei die einzelnen Abfragen wieder in einer anderen Variablen zählen, dann ließe sich da eine bessere Batch aus der Vorlage konstruieren. Der Autor ist dazu zu faul. Er braucht das so nicht, aber wer den Ehrgeiz hat, eine besser Lösung zu finden...




 

Impressum
Datenschutz