46933
Goto Top

aus mehreren txt. Dateien Zeilen auslesen welche mit der selben Zahl beginnen

Hallöchen alle zusammen.
Ich bin am ende.
Mein Problem sieht folgender massen aus.
ich habe fünf txt Dateien.
Die einzelnen Datensätze beginnen mit einer zehnstelligen Zahl und sind alle verschieden.
Ich möchte jetzt jedoch nur alle Datensätze auslesen und in die Datei Gesamt.txt speichern, welche als 1 Zahl von den 10 Stellen eine 2 hat.
Alle anderen sollen in eine Datei geschrieben werden mit Namen wertlos.txt.

Leider bin ich am Ende meiner Kräfte und meines Wissen face-smile

Vielleicht kann mir jemand helfen.

Schon mal danke im voraus.

Content-ID: 56879

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

Ausgedruckt am: 23.11.2024 um 02:11 Uhr

GODOFWAR
GODOFWAR 17.04.2007 um 15:14:04 Uhr
Goto Top
Also damit ich es richtig verstehe

Du hast 5 dateien
darin sind 10 stellige zahlen
z.b. 1234567891

und es soll nur in die datei GESAMT.txt wenn eine 2 darunter ist?
46933
46933 17.04.2007 um 15:19:44 Uhr
Goto Top
mal ein beispiel wie die txt dateien aussehen:

255416789A 09.01.05 23.03.06 ....
2444846610 05.07.06 05.08.06 ....
100486131D 10.02.06 10.03.06 ....
3488519753 20.02.99 20.01.00 .....

so sehen alle txt dateien aus.
Ich möchte aber nur die Zeilen die mit 2 beginnen. (in dem Fall wären es die ersten beiden)
Biber
Biber 17.04.2007 um 15:58:49 Uhr
Goto Top
Moin ginivpj,

willkommen im Forum.

Vom CMD-Prompt aus:
for /f "delims=: tokens=3" %i in ('findstr /b "2" d:\temp\*.txt') do @echo %i >>Gesamt.txt  

-bzw. im Batch-
:: ---- snipp GetAllBeginningWith2.bat
for /f "delims=: tokens=3" %%i in ('findstr /b "2" d:\temp\*.txt') do @echo %%i   

Aufruf mit "GetAllBeginningWith2 >gesamt.txt"

Gruss
Biber
miniversum
miniversum 17.04.2007 um 15:59:43 Uhr
Goto Top
@echo off & setlocal enabledelayedexpansion
for /F "delims=" %%a in ('dir *.txt /b /a-D') do (  
FOR /F "delims=" %%b in ('type %%a') do (  
set zeile=%%b
if [!zeile:~0,1!]==[2] (
echo !zeile!>>Gesamt.txt
) else (
echo !zeile!>>wertlos.txt
)

miniversum

edit: [2] statt [ ]
46933
46933 17.04.2007 um 16:16:12 Uhr
Goto Top
soweit hab ich es verstanden.
Leider geht es nicht.
Kann es daran liegen das es auch vorkommt das vereinzelte Zeilen mit einem Buchstaben anfangen?
risc2000
risc2000 17.04.2007 um 16:33:03 Uhr
Goto Top
Besorge dir grep und cat für Windows, oder wenn es geht nimm ein Linux. Grep bzw. Cat für Windows müsste mit einer Suchmaschine zu finden sein. Öffne eine Konsole, gehe in das Verzeichnis mit den Textdateien. Und gib dann folgende Befehle ein:

cat * | grep "^2" > Gesamt.txt

und für "Wertlos"

cat * | grep -v "^2" > Wertlos.txt
GODOFWAR
GODOFWAR 17.04.2007 um 16:34:25 Uhr
Goto Top
also soweit ich miniversum's lösung angesehen habe geht es darum nur das das erster ZEICHEN EINE ZAHL IST.
46933
46933 17.04.2007 um 16:36:19 Uhr
Goto Top
vom cmd prombt klappt es super.
nur verstehe ich das mit dem aufruf nicht.
wo rufe ich das auf?
und kann ich alle anderen Daten in die txt wertlos packen?
46933
46933 17.04.2007 um 16:40:24 Uhr
Goto Top
ja und das wird das macht probleme.
leider sind in dateien auch ein paar mit buchstaben am anfang.
Da die dateien aber alle sehr lang sind kann mann sie nicht alle einzeln anfassen und diese daten raus löschen.
aktualisiert werden sie auch immer.
der cmd prombt geht aber wunderbar.
miniversum
miniversum 17.04.2007 um 16:54:40 Uhr
Goto Top
ups habs grade korrigiert. immer dieser fehlerteufel.
Aber ich hatte da nicth kontrolliert obs eine Zahl ist sondern ob da ÜBERHAUPT etwas steht

miniversum
Biber
Biber 17.04.2007 um 20:44:10 Uhr
Goto Top
Na ja, mit grep und cat ist es mir auch durchaus sympathisch.

Aber der sympathische Weltmarktführer hat uns doch ein paar Regular-Expression-Features in die Findstr.exe eingebaut.
Nehmen wir die doch:

Demo am CMD-Prompt:
>echo GTE2345>test98.txt
>echo ABC2888>test99.txt
>echo 2345888>test97.txt

(=20:42:42  D:\temp=)
>findstr /B /R "[A-Z]*2" d:\temp\test9?.txt  
d:\temp\test97.txt:2345888
d:\temp\test98.txt:GTE2345
d:\temp\test99.txt:ABC2888

Also im Batch
::----------snipp FilterNachDer2.bat
REM alle Zeilen, die mit "A-Z" gefolgt von einer "2" beginnen ins Töpfchen...  
for /f "tokens=3 delims=:" %%i in ('findstr /B /R "[A-Z]*2" d:\temp\*.txt') do @echo >>gesamt.txt  
REM alle Zeilen, die NICHT mit "A-Z" gefolgt von einer "2" beginnen ins Kröpfchen...  
for /f "tokens=3 delims=:" %%i in ('findstr /V /B /R "[A-Z]*2" d:\temp\*.txt') do @echo >>wertlos.txt  

Gruss
Biber
risc2000
risc2000 17.04.2007 um 23:35:07 Uhr
Goto Top
Hi Biber, kannte die findstr.exe noch nicht. Nutze in der Regel auch lieber die Mittel welche mir vom OS bereit gestellt werden. Gut zu wissen, dass der sympathische Weltmarktführer eine Alternative zu grep entwickelt und in das OS implementiert hat face-wink
Biber
Biber 18.04.2007 um 08:50:25 Uhr
Goto Top
Moin nsc2000,

eine Alternative zu grep entwickelt ...

Na ja, "entwickelt".....das habe ich so nicht geschrieben...
Ich habe bewusst nur geschrieben, dass M$ ein paar Features eingebaut hat, die auf richtigen anderen Betriebssystemen schon im letzten Jahrtausend state of the art waren.

Wie die Redmonder wohl zu dem Sourcecode gekommen sein mögen, darüber möchte ich nicht öffentlich spekulieren.
Vielleicht war es ja eine Eigenentwicklung.

Grüsse
Biber
46933
46933 18.04.2007 um 09:19:16 Uhr
Goto Top
Hallo Biber.
Danke erst einmal für deine Mühen.
Ich habs probiert im batch.
Kriege aber nur: ECHO ist eingeschaltet (ON).
?????
Biber
Biber 18.04.2007 um 09:34:06 Uhr
Goto Top
Moin ginivpj,

Kriege aber nur: ECHO ist eingeschaltet (ON).
dann probiere doch erstmal den (auf Deine Pfade angepassten) Kern
findstr /B /R "[A-Z]*2" d:\temp\*.txt  

Wie sehen den Deine Pfade und Dein angepasster Batch aus?

Gruss
Biber
46933
46933 18.04.2007 um 09:54:04 Uhr
Goto Top
findstr /B /R "[A-Z]*2" H:\privat\test\*.txt  
> 
funktioniert.
Da gibt er mir alle Zeilen mit einer 2 als erstes aus.
findstr /V /B /R "[A-Z]*2" H:\privat\test\*.txt  
funktioniert auch.
Da sind alle anderen.
46933
46933 18.04.2007 um 09:58:44 Uhr
Goto Top
es hat geklappt.
ich hatte %%i vergessen

noch eine frage.
damit er die batch datei, immer wenn sie ausgeführt wird, die dateien Gesamt.txt und wertlos.txt überschreibt???
Biber
Biber 18.04.2007 um 10:15:33 Uhr
Goto Top
Moin ginivpj,

damit er die batch datei, immer wenn sie ausgeführt wird, die dateien Gesamt.txt und wertlos.txt überschreibt???

Dazu als neue zweite Zeile (nach dem "@echo off) ergänzen
 If exist gesamt.txt del gesamt.txt
If exist garbage.txt del garbage.txt
..

Gruss
Biber
46933
46933 18.04.2007 um 11:22:40 Uhr
Goto Top
klasse!!!
es funktioniert alles?
kann ich den pfad den auch so deklarieren das er sich ändern kann?
Mein jetziger Pfad ist ja H:\privat\test
was wenn ich jetzt den ordner test auf k oder i packe?
Muß ich denn da den Pfad in der batch datei jedes mal manuell ändern?
Biber
Biber 18.04.2007 um 17:11:31 Uhr
Goto Top
Moin ginivpj,

Du kannst den Pfad dadurch variabel halten, dass Du
  • ihn nur an einer Stelle im Sourcecode stehen hast und
  • ihn als optionalen Parameter (Parameter mit Default) einrichtest

Beispiel
::----------snipp FilterNachDer2.bat
@echo off & setlocal
REM ----ab hier anpassen
REM optionaler erster Parameter 1 == Pfad, wo die Daten sind
If [%1]== (Set "datenpfad=H:\Privat\test") Else Set "Datenpfad=%1"  
Set "ergebnispfad=X:\Auswert"  
If exist %ergebnispfad%\gesamt.txt del %ergebnispfad%\gesamt.txt
If exist %ergebnispfad%\garbage.txt del %ergebnispfad%\garbage.txt
REM ----bis hier anpassen
REM alle Zeilen, die mit "A-Z" gefolgt von einer "2" beginnen ins Töpfchen...  
for /f "tokens=3 delims=:" %%i in ('findstr /B /R "[A-Z]*2" "%datenpfad%\*.txt"') do @echo >>%ergebnispfad%\gesamt.txt  
REM alle Zeilen, die NICHT mit "A-Z" gefolgt von einer "2" beginnen ins Kröpfchen...  
for /f "tokens=3 delims=:" %%i in ('findstr /V /B /R "[A-Z]*2" "%datenpfad%\*.txt"') do @echo >>%ergebnispfad%\wertlos.txt  
::----------snapp FilterNachDer2.bat

Gruss
Biber
46933
46933 18.04.2007 um 17:17:14 Uhr
Goto Top
Hat alles super geklappt.
Ich danke für die schnelle Hilfe!
Echt super Forum.

Gruß gini