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-Key: 299741

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

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

Member: SaschaRD
SaschaRD Mar 22, 2016 at 09:50:23 (UTC)
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
Member: rubberman
rubberman Mar 22, 2016 at 17:49:51 (UTC)
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
Member: alexander01
alexander01 Mar 22, 2016 at 22:29:18 (UTC)
Goto Top
Danke für Deine Idee, ein Batch-Script ist mir etwas geläufiger.
Gruß Alexander
Member: alexander01
alexander01 Mar 22, 2016 at 22:39:40 (UTC)
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
Member: rubberman
rubberman Mar 22, 2016 at 22:50:14 (UTC)
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
Member: alexander01
alexander01 Mar 22, 2016 at 23:05:59 (UTC)
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
Member: rubberman
rubberman Mar 23, 2016 updated at 16:28:36 (UTC)
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
Member: alexander01
alexander01 Mar 23, 2016 at 22:00:42 (UTC)
Goto Top
Vielen Dank! Funktioniert. Feinheiten kann ich übernehmen.
Viele Grüße
Alexander