alfabravo
Goto Top

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ß !!

Content-ID: 117014

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

Ausgedruckt am: 15.11.2024 um 01:11 Uhr

20638
20638 28.05.2009 um 12:33:34 Uhr
Goto Top
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
Woolfsmann
Woolfsmann 28.05.2009 um 12:45:18 Uhr
Goto Top
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.

#\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
alfabravo
alfabravo 28.05.2009 um 16:44:52 Uhr
Goto Top
Danke für Eure Tipps.

Die Funktion ist Bestandteil einer größeren Batchdatei, von daher sollte es schon über Batchbefehle laufen...

Mein Problem besteht hauptsächlich darin, dass das ganze in einer Schleife ausgeführt bzw. Zeile für Zeile abgearbeitet wird. Für das Auslesen des 8-stelligen Aktenzeichens habe ich momentan diese Lösung:

---snip---
@echo off & setlocal

set "Quelle=Import.txt"

for /f "tokens=2 delims=:" %%i in ('findstr "Aktenzeichen: " %Quelle%') do set Wert=%%i
set Aktenzeichen=%Wert:~1,8%

echo>> export.txt %Aktenzeichen%
---snip---
bastla
bastla 28.05.2009 um 16:45:48 Uhr
Goto Top
Hallo alfabravo!

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  
Grüße
bastla

[Edit] Suchbegriff "Aktenzeichen:" ergänzt [/Edit]
78632
78632 28.05.2009 um 16:51:05 Uhr
Goto Top
fragnurmal:
Warum in Zeile 5 nicht nur del "%Aus%" > nul ?
bastla
bastla 28.05.2009 um 16:57:09 Uhr
Goto Top
... weil's dann besser
del "%Aus%" 2>nul
heißen sollte - und dann ist die Ersparnis nicht ganz so groß ... face-wink

Natürlich hast Du Recht - ist halt vermutlich irgendwo im Hinterkopf eine Hemmschwelle (über die ich aber gelegentlich schon drübergekommen bin face-wink), absichtlich einen Fehler zu verursachen (auch, wenn er einkalkuliert und "behandelt" ist).

Grüße
bastla
78632
78632 28.05.2009 um 17:01:15 Uhr
Goto Top
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.) face-smile

Grüße
blablanick
.
alfabravo
alfabravo 28.05.2009 um 18:57:25 Uhr
Goto Top
Vielen Dank, genau so hatte ich es mir vorgestellt. Funktioniert 1A.

Gruß, alfabravo