Batch: Array?
Wie kann ich am besten ein Array in Batch umsetzten, da es dies ja so wirklich nicht gibt? Gibt es eine bestimmte for-Schleife zum Auslesen dieser Arrays?
2 Antworten
Das gute bei Batch ist, dass auch Variabelnamen variabel sein können (Dies setzt DelayedExpansion = verzögerte Variablenauslese mit !var! voraus, was ich hier nicht näher erläutern möchte.)
Hier mal ein Codebeispiel zum erstellen und füllen (mit zufälligen Nummern) eines Arrays:
@echo off & setlocal enableDelayedExpansion set "arr.length=10" for /L %%i in (1,1,%arr.length%) do ( set arr[%%i]=!random! echo arr[%%i] = !arr[%%i]! ) pause >nul
Ein anderer praktischer Aspekt ist, dass dadurch, dass kein richtiges Array erstellt wird, dieses auch jederzeit "erweitert" werden kann. Einfach die Variable mit der nächstgrößeren Nummer definieren und nicht set /a arr.length += 1 vergessen.
PS: normalerweise fängt man bei Arrays mit arr[0] an, da aber die For-Schleife nur <= und nicht < kennt und man nicht einfach 1 abziehen kann ohne eine extra Variable zu verwenden, hab ich einfach mal mit 1 angefangen.
~Tim
Tim hat ist mir schon zuvorgekommen...ich sollte vielleicht nicht so lange schlafen...
Es müssen auch nicht zwingend eckige Klammern sein um den Index zu qualifizieren... es kann auch nichts oder ein punkt oder unterstrich sein nur vom Minus sollte man die Finger lassen (zwar möglich aber bei "set /a..." können die seltsamsten Dinge passieren o.O.
was man sonst noch mit Arrays anstellen kann...
in eine Datei speichern , löschen, wieder einlesen aus der Datei
nach einem Begriff durchsuchen...
Inhalte in en neues Array kopieren
...und ein paar andere feine Sachen...
eine kleine Demo:
https://pastebin.com/Z9i7Ppzv
..ja wieder auf Pastebin, sorry ...ich stehe auf Kriegsfuß mit den GF-Editor...
Der GF-Editor ist Mist, da haste vollkommen Recht...aber dann gleich auf pastebin nen ganzen Batch-Roman reinkopieren. ;D
PS: Manchmal braucht die Batch ein Weilchen , schließlich opperiert sie mit einigen Tausend ArrayElementen
also wenn der Cursor mal einige Sekunden nutzlos blinkt, so macht die Batch trotzdem etwas...
Batch ist eben nicht C++ aber dafür kann man mit einer Zeile Code ein ganzes 3000 ArrayElemente in eine Datei verfrachten und mit einer anderen den ganzen Grusch wieder einlesen...
Das schafft kein C...:)