chtoasty
Goto Top

Jede 6 Zeile aus txt File auslesen

Hallo

Ich würde gerne aus folgendem txt (orginal 12MB) jede 6 Zeile auslesen.

Codeschnipsel:

--> PC no code !
--> PC
--> PC
--> PC

--> PC TT=___30ms MG=_98% n=_1 AK=1
--> PC 0110999966
--> PC 25IL 100% ST=0 CP=_50 CL=10 CA=__6 CS=__5 CK=__6 DI=R
--> PC
--> PC

--> PC TT=___30ms MG=_98% n=_1 AK=1
--> PC 0110999959
--> PC 25IL 100% ST=0 CP=_50 CL=10 CA=__6 CS=__6 CK=__6 DI=R
--> PC
--> PC

Das Resultat müsste dann so aussehen.

--> PC no code !
--> PC 0110999966
--> PC 0110999959
usw.

Ich hab es mal mit dem Befehl
find /v /i "" test.txt >textfilename.txt
ausprobiert. Denke das würde so auch funktionieren, existiert da nicht ein einfacherer Befehl der jede 6 Zeile ausliest?

Würde mich über eine Antwort freuen.
Gruss Toasty

Content-Key: 53978

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

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

Member: bastla
bastla Mar 13, 2007 at 17:21:05 (UTC)
Goto Top
Hallo CHToasty und willkommen im Forum!

Wenn die entsprechenden Zeilen kein spezielles Merkmal haben, wirst Du mit einem "find" wohl nicht zum Ziel kommen. Versuch es vielleicht eher so:
@echo off & setlocal enabledelayedexpansion
set /a Zeile=0
for /f "delims=" %%i in ('type test.txt') do (  
	set /a Zeile+=1
	if !Zeile!==6 (
		set /a Zeile=0
		echo %%i
	)
)
Hinweis: Leerzeilen werden nicht gezählt.

Zum Erstellen der neuen Datei beim Aufruf der Batch-Datei dann einfach eine Umleitung (>textfilename.txt ) anhängen.

HTH
bastla
Member: Biber
Biber Mar 13, 2007 at 20:40:01 (UTC)
Goto Top
Moin CHToasty,

wilkommen im Forum auch von mir.

Fussnote zu bastla's Lösung:
Falls aber Leerzeilen auch mitgezählt werden müssen, hätte ich folgenden Oneliner vom CMD-Prompt aus anzubieten:

for /F "delims=: tokens=1,2" %i in ('findstr /n "." test.txt') do @for /f %a in ('@set /a "%i % 6"') do @if [%a]== @echo %j  

Das Prinzip:
- Die test.txt wird nach allen Zeilen mit FindStr durchsucht und durchnummeriert [im Format "nnn:Zeileninhalt"]
- Der erste Teil ("nnn"), die Zeilennummer wird mit dem Modulo-Operator durch 6 geteilt.
- wenn der Rest gleich 0 ist,d.h. die Zeilennummer ein Vielfaches von 6 ist, wird der Zeileninalt angezeigt.

Wenn Du an das Ende der CMD-Zeile noch ein ">>output.txt" hängst, hast Du das Ergebnis in einer Datei.

Falls Du es für sinnvoll hältst, diese eine Zeile als Batchdatei dauerhaft aufzubewahren, dann alle %-Zeichen durch "%%" ersetzen.

Gruss
Biber
Member: CHToasty
CHToasty Mar 14, 2007 at 13:05:36 (UTC)
Goto Top
Hallo bastla & Biber

Vielen Dank für die schnelle Antwort, hat alles super geklappt. Habe >>output.txt noch eingebaut.
@echo off & setlocal enabledelayedexpansion
set /a Zeile=0
for /f "delims=" %%i in ('type neutest.txt') do (  
    set /a Zeile+=1
    if !Zeile!==6 (
        set /a Zeile=0
        echo %%i  

    )  >>output.txt
)
Schöner Tag & Grüsse
Toasty