Mit Batch aus einer TXT Werte ZEILENWEISE auslesen als Variablen verwenden in einer For-Schleife
Hallo,
ich habe nach längerer Suche aufgegeben im Internet gibt es zwar viele Lösungen, aber ich habe es nicht geschafft mir eine zusammenzuschustern. Nun bitte ich euch mir zu helfen.
Also es geht darum das ich eine Datei TXT oder CSV ist eigentlich egal, deren Werte mit ";" voneinander getrennt sind zeilenweise einlesen will.
Die Werte liegen in folgender Form vor, bei mir als TXTA,B,C,D,E)
1;29.0;5.0;0.0;1.0;
2;30.5;2.925;0.0;24.03;
3;31.5;3.7;3.0;41.18;
4;50.0;3.625;1.56;50.0;
5;0.0;0.1;0.0;31.38; <<-----------
6;5.0;0.325;0.305095852;1.0;
7;26;3.775;1.65;30.4;
8;0.0;1.15;1.95;14.23;
..
..
(insgesamt 50 Zeilen)
ICH WILL: Ich will am besten aus einer Datei eine Zeile die Werte (A,B,C,D,E) übergeben mit diesen eine Simulation starten und nach der Simualtion die nächsten 5 Werte in der nächsten Zeile verwenden usw.
Also ich will nur eine Zeile mit den Variablen A,B,C,D und E verwenden und nicht 50 mal diese unten aufgeführte innere For Schleife verwenden.
Das will ich realisieren.
Dazu habe ich mir eine Test-Datei erstellt:
@echo off
ECHO TEST > INFO.txt
For /L %%k IN (1,1,4) DO (
For /F "tokens=1-5 delims=;" %%a in ('findstr /n . "DesignExp_excel.txt"^|findstr "^%%k:"') do (
set Sl=%%b
set Ss=%%c
set Y=%%d
set b=%%e
ECHO %Sl%,%b% >> INFO.txt)
)
Beim ausführen dieser Datei gibt er mir folgendes aus:
TEST
0.0,31.38
0.0,31.38
0.0,31.38
0.0,31.38
Er gibt mir also die richtigen Werte der 5ten Zeile aus (siehe Pfeil oben) und das 4 mal. ??????
Das verstehe ich nicht was mache ich falsch????
Die innere For-Schleife alleine funktioniert ohne angegebene Varibale %%k, aber mit der äußeren Schleife nicht. Ich könnte jetzt diese innere Schleife 50 mal ausführen was, aber sehr unelegant und aufwändig.
Im Internet steht zwar viel, aber nichts was mich auf eine Lösung bringen könnte.
Wenn jemand Verbesserungsvorschläge hat oder Kritik nur zu ich freue mich über jede Antwort. Bitte um Hilfe zur Lösung.
Gruß
ich habe nach längerer Suche aufgegeben im Internet gibt es zwar viele Lösungen, aber ich habe es nicht geschafft mir eine zusammenzuschustern. Nun bitte ich euch mir zu helfen.
Also es geht darum das ich eine Datei TXT oder CSV ist eigentlich egal, deren Werte mit ";" voneinander getrennt sind zeilenweise einlesen will.
Die Werte liegen in folgender Form vor, bei mir als TXTA,B,C,D,E)
1;29.0;5.0;0.0;1.0;
2;30.5;2.925;0.0;24.03;
3;31.5;3.7;3.0;41.18;
4;50.0;3.625;1.56;50.0;
5;0.0;0.1;0.0;31.38; <<-----------
6;5.0;0.325;0.305095852;1.0;
7;26;3.775;1.65;30.4;
8;0.0;1.15;1.95;14.23;
..
..
(insgesamt 50 Zeilen)
ICH WILL: Ich will am besten aus einer Datei eine Zeile die Werte (A,B,C,D,E) übergeben mit diesen eine Simulation starten und nach der Simualtion die nächsten 5 Werte in der nächsten Zeile verwenden usw.
Also ich will nur eine Zeile mit den Variablen A,B,C,D und E verwenden und nicht 50 mal diese unten aufgeführte innere For Schleife verwenden.
Das will ich realisieren.
Dazu habe ich mir eine Test-Datei erstellt:
@echo off
ECHO TEST > INFO.txt
For /L %%k IN (1,1,4) DO (
For /F "tokens=1-5 delims=;" %%a in ('findstr /n . "DesignExp_excel.txt"^|findstr "^%%k:"') do (
set Sl=%%b
set Ss=%%c
set Y=%%d
set b=%%e
ECHO %Sl%,%b% >> INFO.txt)
)
Beim ausführen dieser Datei gibt er mir folgendes aus:
TEST
0.0,31.38
0.0,31.38
0.0,31.38
0.0,31.38
Er gibt mir also die richtigen Werte der 5ten Zeile aus (siehe Pfeil oben) und das 4 mal. ??????
Das verstehe ich nicht was mache ich falsch????
Die innere For-Schleife alleine funktioniert ohne angegebene Varibale %%k, aber mit der äußeren Schleife nicht. Ich könnte jetzt diese innere Schleife 50 mal ausführen was, aber sehr unelegant und aufwändig.
Im Internet steht zwar viel, aber nichts was mich auf eine Lösung bringen könnte.
Wenn jemand Verbesserungsvorschläge hat oder Kritik nur zu ich freue mich über jede Antwort. Bitte um Hilfe zur Lösung.
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 187165
Url: https://administrator.de/contentid/187165
Ausgedruckt am: 20.11.2024 um 02:11 Uhr
12 Kommentare
Neuester Kommentar
Hallo iCan1985,
das Problem ist deine FOR-Schleife.
"For /L %%k IN (1,1,4) DO"
(1,1,4) bedeutet:
Die erste 1 ist der "Startwert" deiner Zählvariable k. Die zweite 1 bezeichnet den Wert, um den die Zählvariable k nach jedem
Schleifendurchlauf inkrementiert (=erhöht) wird. Die 4 ist der "Grenzwert" -> wenn deine Zählvariable k diesen Wert erreicht, springt das Programm aus der Schleife heraus.
-> Zusammenfassung: Die Schleife wird vier Mal durchlaufen (= 4x "ECHO %Sl%,%b% >> INFO.txt")
Gruß Ivo
PS: Den Rest habe ich mir noch nicht angesehen, da ich momentan ziemlich wenig Zeit habe. Bin nur kurz drübergeflogen ;)
das Problem ist deine FOR-Schleife.
"For /L %%k IN (1,1,4) DO"
(1,1,4) bedeutet:
Die erste 1 ist der "Startwert" deiner Zählvariable k. Die zweite 1 bezeichnet den Wert, um den die Zählvariable k nach jedem
Schleifendurchlauf inkrementiert (=erhöht) wird. Die 4 ist der "Grenzwert" -> wenn deine Zählvariable k diesen Wert erreicht, springt das Programm aus der Schleife heraus.
-> Zusammenfassung: Die Schleife wird vier Mal durchlaufen (= 4x "ECHO %Sl%,%b% >> INFO.txt")
Gruß Ivo
PS: Den Rest habe ich mir noch nicht angesehen, da ich momentan ziemlich wenig Zeit habe. Bin nur kurz drübergeflogen ;)
Hallo iCan1985!
Grüße
bastla
Meine Absicht ist nicht eine Spalte auszulesen was ich mit deinem Befehl ja auch erreichen würde,
Mein Ansatz liefert für jede Zeile den Wert der 2. und 5. Spalte, und was immer Du damit anstellen willst, wird vermutlich auch direkt über "%%b" und "%%e" (also ohne Zuweisung an eine weitere Variable) zu machen sein - Du könntest die weitere Verwendung der beiden Werte ja aber mal kurz darstellen ...Grüße
bastla
Hallo iCan1985!
Wenn es tatsächlich um einzelne Zeilen gehen sollte, musst Du natürlich zuerst festlegen, welche Zeile das sein soll, daher etwa:
Sollte Deine Datei aber, wie Dein Beispiel oben vermuten lässt, sogar ohnehhin schon in Spalte 1 eine laufende Nummer haben, ließe sich die Zeile 3 noch auf
vereinfachen ...
Grüße
bastla
Wenn es tatsächlich um einzelne Zeilen gehen sollte, musst Du natürlich zuerst festlegen, welche Zeile das sein soll, daher etwa:
@echo off & setlocal
set /p Zeile=Welche Zeile?
for /f "tokens=1-5 delims=;" %%a in ('findstr /n . "DesignExp_excel.txt"^|findstr "^%Zeile%:"') do (
echo In Zeile %Zeile% stehen die Werte %%b und %%e
)
for /f "tokens=1-5 delims=;" %%a in ('findstr "^%Zeile%;" "DesignExp_excel.txt"') do (
Grüße
bastla
Hallo iCan1985!
Wenn alle Zeilen (früher oder später, aber in der Reihenfolge, in der sie in der Datei stehen) verarbeitet werden sollen, genügt doch aber die Schleife aus meinem oberen Ansatz - anstelle der Zeile 4 kannst Du ja alle nötigen Schritte einfügen, also etwa
- damit würde also jeweils die "INFO.txt" neu erstellt, danach das "FEM Programm" ausgeführt und nach Ende des Programms eine Meldung ausgegeben und auf einen Tastendruck gewartet werden, bevor dann die nächste Zeile der Textdatei ausgelesen und verarbeitet würde ...
Grüße
bastla
Wenn alle Zeilen (früher oder später, aber in der Reihenfolge, in der sie in der Datei stehen) verarbeitet werden sollen, genügt doch aber die Schleife aus meinem oberen Ansatz - anstelle der Zeile 4 kannst Du ja alle nötigen Schritte einfügen, also etwa
>INFO.txt echo %%b,%%e
"D:\Pfad\FEM Programm"
echo Programm fertig fuer %%b,%%e
pause
Grüße
bastla