76623
Goto Top

Mit Batch mehrzeilige Spalte zeilenweise auslesen und Inhalt weiterverwenden...?

Hey Leute,
Auch wenn es schon -zig Beiträge ähnlicher Art gibt, iwie bin ich einfach zu unfähig die tw schon vorhandenen Lösungen an mein Batchfile anzupassen, liegt auch daran dass ich die FOR-Anweisung noch nicht zu 100% versteh, egal...

Der Titel sagt ja schon das Wesentliche, nun zu den Details:
Ich habe eine Textdatei(Bsp.txt) mit mehreren Zeilen die wie folgt formatiert ist
(reines Bsp, in Wirklichkeit handelt es sich um 100.000 Zeilen mit total unterschiedlichen Zahlen):
	1
	2
	3
	4
	5
	6
	7
	8
	9
Mit Worten ausgedrückt: eine einzelne Spalte mit bekannter Zeilenanzahl

Bestimmte Zahlen/Zeilen möchte ich nun nacheinander auslesen um mit ihnen weiter zu arbeiten(im Prog unten ist diese "Verarbeitung" jetzt nur ein "echo" - rein der Einfachheit halber und um die Funktion zu testen. Tatsächlich folgen div. größer/kleiner Abfragen und dann entsprechende weitere Abläufe)

Mein BatchProg schaut derzeit wie folgt aus (an Bsp.txt angepasst):
@echo off
set /a counter=0
 :loop
set /a counter=%counter%+1
for /f "tokens=%counter%" %%i in (Bsp.txt) do set /a zahl=%%i  
echo %zahl%
if %counter%==9 goto :ende
goto :loop
 :ende
 pause
exit
Ergebniss dieses Ablaufes ist, dass ich 9x die Zahl 9 ausgespuckt bekomme, weil es einfach jedesmal die ganze spalte runterrattert.

Falls Unklarheiten, hier noch ne Bemerkung zum besseren Verständnis meines Anliegens:

WÜRDE meine Bsp.txt so formatiert sein (alle Werte in nur einer Zeile), ...

1 2 3 4 5 6 7 8 9

... so würde mein Batchprog wie gewünscht funktionieren(Ergebnis schaut hier so aus: nacheinander werden die Zahlen 1-9 ausgespuckt, danach pause und exit), und ich könnte mit Hilfe des %Counter%s auf das gewünschte Zeichen (z.B. 3. Zahl) zugreifen und damit bei Bedarf weiterarbeiten. (z.B. IF %counter%==3 SET irgendwas_1=%zahl%... IF irgendwas_1... etc)
Aber leider ist diese Formatierung bei meiner .txt nicht der Fall.

Das diese "tokens"-Zeichenabfrage jetzt irgendwie an den Zeilenumbrüchen scheitert ist mir schon klar, nur die Frage ist: Wie mach ich das auch meinem Batchfile klar?

Danke im Vorraus für euren PRODUKTIVEN Antworten
(especially dedicated for wannabe-DrHouse)

MfG, 5chweinsbraten


[Edit Biber] Code mit Code-Tags formatiert. [/Edit]^^

Content-Key: 111736

Url: https://administrator.de/contentid/111736

Printed on: April 19, 2024 at 16:04 o'clock

Mitglied: 60730
60730 Mar 18, 2009 at 11:21:53 (UTC)
Goto Top
Hallo Servus und auch dir ein herzhaftes Willkommen.

Mir fallen drei Dinge auf:

  • die Variable "mit der Tür ins Haus" hast du erfüllt - das ist schonmal eher ungern gelesen.
  • Dein Beitrag und deine Batch sind irgendwie "wirr" - was genau ist denn das Begehr?
  • Bitte dringendst um Hilfe !!

for /?

Gruß
[_] Benachrichtigung bei Antwort keine Arme -keine Kekse
Mitglied: 76623
76623 Mar 18, 2009 at 11:58:55 (UTC)
Goto Top
Hast tw recht, habs daher tw editiert damit auch jene Leute was davon haben, welche sich nicht ohne ultimativer Höflichkeitsform zurechtfinden

Mit dringendst mein ich, dass ich es blöderweise eilig habe, mit Hilfe mein ich: ich schaffs leider nicht allein

"Begehr" steht im Titel und im Rest des Beitrages, sogar sehr detailiert um Unklarheiten auszuschließen, daher mit Mörderlänge

wirre Batch ... bin eben kein Programmierer, aber so wirr kanns net sein, denn vom Prinzip funktionierts ja doch, eben nur bei Textdatein mit mehreren Zeichen die in ner einzelnen ZEILE stehen, nur gehts eben NICHT, wenn diese in ner SPALTE(immer Zeilenumbruch zw den Zeichen)stehen

Bitte um genauere Fragen zum Code, denn mit "irgendwie wirr" kann man die werdende Lösung zum Beitrag nicht wirklich vorantreiben

-Danke im Vorraus

MfG, 5chweinsbraten
Mitglied: 60730
60730 Mar 18, 2009 at 15:52:10 (UTC)
Goto Top
Servus,

ultimativer Höflichkeitsform

denk daran, wir sind alle auch nur Menschen und umsonst ist nicht mal der Tot, der kostet das leben.
Von daher ist es nicht wirklich ultimativ, sondern ein / das einzige was ich und einige andere bestimmt auch von demjenigen verlangen, dem wir für "umme" helfen.

Und damit du einen Einblick bekommst, wie eine Schleife funktioniert, habe ich dein Script so angepasst, das es "logischer" wird.

@echo off
set /a counter=0
 :loop
set /a counter=%counter%+1
for /f %%i in (Bsp.txt) do (
echo jetzt bin ich zum %counter% mal in der Datei und lese den Inhalt %%i && set /a zahl=%%i)

if %counter%==9 goto :ende
goto :loop
 :ende
 pause
exit

gruß
(especially dedicated for wannabe-DrHouse)
ps:(i dont wanna be ur drill instructor - but i try my very best)
Member: bastla
bastla Mar 19, 2009 at 00:37:20 (UTC)
Goto Top
Hallo 5chweinsbraten!

Wenn auch "wirr" nicht zutreffen mag, so fehlt mir doch in Deiner Beschreibung etwas an Zusatzinformation - insbes wieviele Zeilen Du auslesen willst und woher die Zeilennummern dafür stammen ...

Im einfachsten Fall (gesuchte Zeilen "hartcodiert") ginge es etwa so:
@echo off & setlocal enabledelayedexpansion
set "Datei=D:\Deine Textdatei.txt"  

set /a Z=1
for /f "usebackq delims=" %%a in ("%Datei%") do (  
    if !Z!==1 call :Verarbeitung 1 "%%a"  
    if !Z!==3 call :Verarbeitung 3 "%%a"  
    if !Z!==4 call :Verarbeitung 4 "%%a"  
    if !Z!==7 call :Verarbeitung 7 "%%a"  
    set /a Z+=1
)
goto :eof

:Verarbeitung
echo Zeile %1:%~2
goto :eof
Wenn es nur um wenige Zeilen geht, etwa so:
@echo off & setlocal
set "Zeilen=4 7 3 1"  
set "Datei=D:\Deine Textdatei.txt"  

for %%i in (%Zeilen%) do call :ProcessLine %%i
goto :eof

:ProcessLine
set /a Z=%1-1
if %Z%==0 set /p Zeile=<"%Datei%"& goto :Verarbeitung  
set Zeile=
for /f "usebackq skip=%Z% delims=" %%a in ("%Datei%") do if not defined Zeile set "Zeile=%%a"  

:Verarbeitung
echo Zeile %1: %Zeile%
goto :eof
oder so:
@echo off & setlocal
set "Zeilen=4: 7: 3: 1:"  
set "Datei=D:\Deine Textdatei.txt"  

for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Datei%"^|findstr /b "%Zeilen%"') do echo Zeile %%i: %%j  
Grüße
bastla
Mitglied: 60730
60730 Mar 20, 2009 at 09:22:27 (UTC)
Goto Top
Servus 5chweinsbraten,

auch wenn es "blöd" ist:

zuerst einmal das Lob.

  • schön - dass du deinen Beitrag etwas geändert hast.

Aber....

  • schade, das dein Beitrag - ast genau dem entspricht, den ich "erwartet" habe:
5chweinsbraten am 18.03.2009 um 11:45:28 Uhr.
/Snip
\snap
Bitte dringendst um Hilfe !!


Das du meine Hilfe nicht akzepzierst - weil Sie eine Hilfestellung eine andere als die gesuchte ist - eh klar.

Aber daß Kollege Bastla seit 19.03.2009 um 01:37:20 Uhr auf ein Feedback wartet - oder auch nicht - ist dann irgendwie traurig.

Have a nice weekend und nimm das mal alles in ruhiger Umgebung so an, wie es gemeint ist.

Gruß
Member: bastla
bastla Mar 20, 2009 at 15:25:08 (UTC)
Goto Top
@timobeil
Aber daß Kollege Bastla seit 19.03.2009 um 01:37:20 Uhr auf ein Feedback wartet - oder auch nicht
"Warten" wäre übertrieben face-wink - ist bei 5chweinsbraten wohl eine der Situationen, die zeigen, wie schnell sich Prioritäten verschieben können (oder es war nach doch beinahe 14 Stunden bereits viel zu spät). face-wink

Grüße
bastla
Member: Biber
Biber Mar 20, 2009 at 15:37:47 (UTC)
Goto Top
<OT II>
Aber daß Kollege Bastla seit 19.03.2009 um 01:37:20 Uhr auf ein Feedback wartet ...

Erfahrungsgemäß wartet Kollege bastla jetzt in der Fastenzeit nur auf eines.... das Ende derselben. face-wink
Bzw. wir alle warten jetzt auf Schweinsbraten... *gg

Und niemand sollte sollte jetzt das Wort "Feed" wie in "Feedback" erwähnen....

... oder Festplatten...

unangenehme Assoziationen..


</OT II>

Schönes Wochenende und nehmts leicht
Biber
Member: bastla
bastla Mar 20, 2009 at 15:42:51 (UTC)
Goto Top
@Biber
No problem - wozu habe ich das Sternzeichen Phlegmadicker ... face-wink

Auch Dir ein schönes Wochenende
bastla