Mit Batch Suchbegriff in .txt finden und die nachfolgenden 8 Stellen auslesen und in neue Datei schreiben
Hallo Admins,
Ich habe eine Datei Import.txt mit folgendem Inhalt:
Der Vorgang mit Aktenzeichen: 12345678 ist erledigt!
Der Vorgang mit Aktenzeichen: 01234567 ist erledigt!
Ein neuer Vorgang mit Aktenzeichen: 34567012 wurde erstellt.
Der Vorgang mit Aktenzeichen: 45670123 ist erledigt!
Ein neuer Vorgang mit Aktenzeichen: 23456701 wurde erstellt.
Ein neuer Vorgang mit Aktenzeichen: 70123456 wurde erstellt.
Daraus möchte ich jeweils Zeile für Zeile das 8-stellige Aktenzeichen auslesen, welches sich immer hinter dem Suchbegriff 'Aktenzeichen: ' befindet. Das Ergebnis soll in eine neue Datei (Export.txt) geschrieben werden. So soll das ganze aussehen:
12345678
01234567
34567012
45670123
23456701
70123456
Vielen Dank & Gruß !!
Ich habe eine Datei Import.txt mit folgendem Inhalt:
Der Vorgang mit Aktenzeichen: 12345678 ist erledigt!
Der Vorgang mit Aktenzeichen: 01234567 ist erledigt!
Ein neuer Vorgang mit Aktenzeichen: 34567012 wurde erstellt.
Der Vorgang mit Aktenzeichen: 45670123 ist erledigt!
Ein neuer Vorgang mit Aktenzeichen: 23456701 wurde erstellt.
Ein neuer Vorgang mit Aktenzeichen: 70123456 wurde erstellt.
Daraus möchte ich jeweils Zeile für Zeile das 8-stellige Aktenzeichen auslesen, welches sich immer hinter dem Suchbegriff 'Aktenzeichen: ' befindet. Das Ergebnis soll in eine neue Datei (Export.txt) geschrieben werden. So soll das ganze aussehen:
12345678
01234567
34567012
45670123
23456701
70123456
Vielen Dank & Gruß !!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 117014
Url: https://administrator.de/contentid/117014
Ausgedruckt am: 15.11.2024 um 01:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo,
Du suchst also sowas hier?
Const ForReading = 1
Dim test
Set FSO=CreateObject("Scripting.FileSystemObject")
Set File = FSO.OpenTextFile("c:\import2.txt", ForReading, False)
Set FSI = CreateObject("Scripting.FileSystemObject")
Set file2 = FSI.CreateTextFile("C:\export.txt", True)
While Not File.AtEndOfStream
text = File.readline
Set Regex = CreateObject("Vbscript.Regexp")
With Regex
.Pattern = "\D"
.Global = True
NurZahlen = .Replace(text, "")
file2.WriteLine(nurzahlen)
End With
Set Regex = Nothing
Wend
File.Close
file2.close
Ist nur etwas schnell zusammen geflickt.
Aber denke es reicht für dein Vorhaben.
Gruß
JT
edit: Ist keine Batch! Speicher es als Datei.VBS
Du suchst also sowas hier?
Const ForReading = 1
Dim test
Set FSO=CreateObject("Scripting.FileSystemObject")
Set File = FSO.OpenTextFile("c:\import2.txt", ForReading, False)
Set FSI = CreateObject("Scripting.FileSystemObject")
Set file2 = FSI.CreateTextFile("C:\export.txt", True)
While Not File.AtEndOfStream
text = File.readline
Set Regex = CreateObject("Vbscript.Regexp")
With Regex
.Pattern = "\D"
.Global = True
NurZahlen = .Replace(text, "")
file2.WriteLine(nurzahlen)
End With
Set Regex = Nothing
Wend
File.Close
file2.close
Ist nur etwas schnell zusammen geflickt.
Aber denke es reicht für dein Vorhaben.
Gruß
JT
edit: Ist keine Batch! Speicher es als Datei.VBS
Hi,
hört sich nach ner Arbeitsanweisung für nen Praktikanten an ... oder nen Auftrag an nen Dienstleister ..
Was hast du bisher geschrieben ?
Wie sind deine Ansätze?
Wenn du es in Batch Schreiben möchtest soltest du dir die For Schleife mal angucken.
Um hier auch was Produktives zu schreiben
Ich kann Batch nich so dolle aber Perl krieg ich hin. Da kannst du dir ja dann was abgucken für die Batch.
gruß
Woolfsmann
hört sich nach ner Arbeitsanweisung für nen Praktikanten an ... oder nen Auftrag an nen Dienstleister ..
Was hast du bisher geschrieben ?
Wie sind deine Ansätze?
Wenn du es in Batch Schreiben möchtest soltest du dir die For Schleife mal angucken.
Um hier auch was Produktives zu schreiben
Ich kann Batch nich so dolle aber Perl krieg ich hin. Da kannst du dir ja dann was abgucken für die Batch.
#\usr\bin\perl -w
open (IN, "<Import.txt") or die "Can't open Import\n";
open (OUT, ">export.txt")or die "Can't open Export\n";
@Import=<IN>;
foreach $imp (@Import)
{
$imp=~/(\d+)/;
print OUT "$1\n";
}
close IN;
close OUT;
gruß
Woolfsmann
Hallo alfabravo!
Soferne Du Dich auf den Doppelpunkt als Trennzeichen verlassen kannst, sähe ein Batch dazu etwa so aus:
Grüße
bastla
[Edit] Suchbegriff "Aktenzeichen:" ergänzt [/Edit]
Soferne Du Dich auf den Doppelpunkt als Trennzeichen verlassen kannst, sähe ein Batch dazu etwa so aus:
@echo off & setlocal
set "Ein=D:\Import.txt"
set "Aus=D:\Aktenzeichen.txt"
if exist "%Aus%" del "%Aus%"
for /f "tokens=1* delims=:" %%i in ('findstr "Aktenzeichen:" "%Ein%"') do for /f %%a in ("%%j") do >>"%Aus%" echo %%a
bastla
[Edit] Suchbegriff "Aktenzeichen:" ergänzt [/Edit]
fragnurmal:
Warum in Zeile 5 nicht nur del "%Aus%" > nul ?
Warum in Zeile 5 nicht nur del "%Aus%" > nul ?
... weil's dann besser
heißen sollte - und dann ist die Ersparnis nicht ganz so groß ...
Natürlich hast Du Recht - ist halt vermutlich irgendwo im Hinterkopf eine Hemmschwelle (über die ich aber gelegentlich schon drübergekommen bin ), absichtlich einen Fehler zu verursachen (auch, wenn er einkalkuliert und "behandelt" ist).
Grüße
bastla
del "%Aus%" 2>nul
Natürlich hast Du Recht - ist halt vermutlich irgendwo im Hinterkopf eine Hemmschwelle (über die ich aber gelegentlich schon drübergekommen bin ), absichtlich einen Fehler zu verursachen (auch, wenn er einkalkuliert und "behandelt" ist).
Grüße
bastla
Dann Ist's ja ok. Es hätte ja sein können, dass ich was nicht beachtet habe (außer 2>nul, da nehme ich es nicht so genau.)
Grüße
blablanick
.
Grüße
blablanick
.