alexander01
Goto Top

Bearbeitung einer Textdatei mittels cmd-Script

Hallo,
kann mir ein Tüfftler bei der Erstellung eines Scriptes helfen?
Ich möchte mittels cmd-Script eine Datei bearbeiten, die strukturell immer gleich aufgebaut ist (fortlaufende Zeilen beginnend mit 7 Ziffern).
Ich möchte von jeder einzelnen Zeile die ersten 7 Ziffern "abschneiden" und den Rest der Zeile belassen und nach Durchlaufen der Datei eine neue Datei erstellen lassen (in der also jeweils die ersten 7 Ziffern jeder Zeile fehlen)
Zudem möchte ich, das nach jeder Zeile in der Originaldatei, die mit einer bestimmten Ziffernfolge (xyz8310, wobei xyz verschieden sind, die 8310 der Marker ist) beginnt, in der erzeugten Datei eine Leerzeile erstellt wird (der besseren Übersicht halber).

aus:
1234567xytsdhdwhd --> xytsdhdwhd
2370376djcnenevnvnvv --> djcnenevnvnvv
0148310cwcncndcew -->
cwcncndcew

u.s.w.

Vielen Dank für Eure Hilfe!

alexander

Content-ID: 299741

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

Ausgedruckt am: 22.11.2024 um 19:11 Uhr

SaschaRD
SaschaRD 22.03.2016 um 10:50:23 Uhr
Goto Top
Hallo Alexander,

Powershell wird deine Lösung sein:
$Logfile = "C:\davor.txt"  
$Logfile2 = "C:\danach.txt"  

(gc $Logfile) | Where-Object {$_ -notmatch "8310"} | Foreach-Object {$_.Remove(0,7)} | Out-file $Logfile2  

Gruß, Sascha
rubberman
rubberman 22.03.2016 um 18:49:51 Uhr
Goto Top
Hallo alexander,

als Batchscript bspw. so
@echo off &setlocal
set "infile=test.txt"  
set "outfile=test2.txt"  
set "separate=8310"  

setlocal EnableDelayedExpansion
<"!infile!" >"!outfile!" (  
  for /f %%i in ('type "!infile!"^|find /c /v ""') do for /l %%j in (1 1 %%i) do (  
    set "line=" &set /p "line="  
    if not defined line (
      echo(
    ) else (
      if "!line:~3,4!"=="!separate!" echo(  
      echo !line:~7!
    )
  )
)
Grüße
rubberman
alexander01
alexander01 22.03.2016 um 23:29:18 Uhr
Goto Top
Danke für Deine Idee, ein Batch-Script ist mir etwas geläufiger.
Gruß Alexander
alexander01
alexander01 22.03.2016 um 23:39:40 Uhr
Goto Top
Danke, funktionierte auf Anhieb!
Wenn ich wiederum eine bestimmte ziffernfolge ( sagen wir 012) durch ein bestimmtes Wort ersetzen möchte ( sagen wir Test) würde ich oben eine neue Zeile
set "Ziel=012" einfügen sowie weiter unten die Else-Schleife anpassen?
Grüße
Alexander
rubberman
rubberman 22.03.2016 um 23:50:14 Uhr
Goto Top
Hmm, verstehe ich jetzt nicht ganz. Du wolltest ja die 7 führenden Ziffern abschneiden. Warum dann also irgendwas ersetzen? Am besten du postest noch mal ein aussagekräftiges Beispiel, vorher - nachher ...

Grüße
rubberman
alexander01
alexander01 23.03.2016 um 00:05:59 Uhr
Goto Top
Ja gern.
In jedem Fall sollen die ersten 7 Ziffern entfernt werden.
Die Routine soll aber prüfen, ob in einer Zeile eine bestimmte Ziffernkombination vorliegt ( hier 012), um in diesem Fall die 7 Ziffern durch ein bestimmtes Wort ersetzen.
Beispiel:
8451654hfhfhfugjg. --> hfhfhfugjg
5367436gtzertd --> gtzertd
0125677teoigwe --> Wort teoigwe
Grüße
Alexander
rubberman
rubberman 23.03.2016 aktualisiert um 17:28:36 Uhr
Goto Top
Hallo Alexander,

OK verstanden.
Das Prinzip könnte etwa so aussehen
@echo off &setlocal
set "infile=test.txt"  
set "outfile=test2.txt"  

set "separate=8310"  

set "target1=012"  
set "prefix1=Beispielwort1"  
set "target2=345"  
set "prefix2=Beispielwort2"  

setlocal EnableDelayedExpansion
<"!infile!" >"!outfile!" (  
  for /f %%i in ('type "!infile!"^|find /c /v ""') do for /l %%j in (1 1 %%i) do (  
    set "line=" &set /p "line="  
    if not defined line (
      echo(
    ) else (
      if "!line:~3,4!"=="!separate!" echo(  

      if "!line:~0,3!"=="!target1!" (  
        echo !prefix1! !line:~7!
      ) else if "!line:~0,3!"=="!target2!" (  
        echo !prefix2! !line:~7!
      ) else (
        echo !line:~7!
      )
    )
  )
)
Wenn es am Ende nicht um mehrere Ersetzungen geht, schmeißt du das else if und die darauffolgende Zeile raus...

Grüße
rubberman
alexander01
alexander01 23.03.2016 um 23:00:42 Uhr
Goto Top
Vielen Dank! Funktioniert. Feinheiten kann ich übernehmen.
Viele Grüße
Alexander