Entfernen eines Strings vor einem bestimmten Zeichens in einer Textdatei
Hallo an alle Coder,
ich habe Probleme mit dem extrahieren eines String aus einer "txt"-Datei.
Ich habe folgende Zeilen untereinander stehen:
Als Extrahierung möchte ich gerne folgendes in einer separaten "txt"-Datein erhalten:
01722640180d2
0205656292-0001
020853272-001
Also alles was vor dem letzten "|" steht soll weg inklusive dem "|"-Zeichen.
Wie muss ich mein Script ändern?
Ich habe folgendes für das Entfernen einer kompletten Zeile:
Const FOR_READING = 1
Const FOR_WRITING = 2
strFileName = "C:\Dokumente und Einstellungen\user\Eigene Dateien\Downloads\Scripts\Without_String.txt"
strCheckForString = UCase("String")
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objTS = objFS.OpenTextFile(strFileName, FOR_READING)
strContents = objTS.ReadAll
objTS.Close
arrLines = Split(strContents, vbNewLine)
Set objTS = objFS.OpenTextFile(strFileName, FOR_WRITING)
For Each strLine In arrLines
If Not(Left(UCase(LTrim(strLine)),Len(strCheckForString)) = strCheckForString) Then
objTS.WriteLine strLine
End If
Next
Aber ich möchte ja nicht die ganze Zeile löschen, sondern nur einzelne Characters vor einem beliebigem Zeichen.
Geht das?
Danke für eure Hilfe!
Gruß
Privex007
ich habe Probleme mit dem extrahieren eines String aus einer "txt"-Datei.
Ich habe folgende Zeilen untereinander stehen:
Als Extrahierung möchte ich gerne folgendes in einer separaten "txt"-Datein erhalten:
01722640180d2
0205656292-0001
020853272-001
Also alles was vor dem letzten "|" steht soll weg inklusive dem "|"-Zeichen.
Wie muss ich mein Script ändern?
Ich habe folgendes für das Entfernen einer kompletten Zeile:
Const FOR_READING = 1
Const FOR_WRITING = 2
strFileName = "C:\Dokumente und Einstellungen\user\Eigene Dateien\Downloads\Scripts\Without_String.txt"
strCheckForString = UCase("String")
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objTS = objFS.OpenTextFile(strFileName, FOR_READING)
strContents = objTS.ReadAll
objTS.Close
arrLines = Split(strContents, vbNewLine)
Set objTS = objFS.OpenTextFile(strFileName, FOR_WRITING)
For Each strLine In arrLines
If Not(Left(UCase(LTrim(strLine)),Len(strCheckForString)) = strCheckForString) Then
objTS.WriteLine strLine
End If
Next
Aber ich möchte ja nicht die ganze Zeile löschen, sondern nur einzelne Characters vor einem beliebigem Zeichen.
Geht das?
Danke für eure Hilfe!
Gruß
Privex007
Please also mark the comments that contributed to the solution of the article
Content-Key: 253893
Url: https://administrator.de/contentid/253893
Printed on: April 24, 2024 at 12:04 o'clock
3 Comments
Latest comment
Hi!
Wenn Perl auch in Frage kommt, dann geht das (u.a.) so:
#!/usr/bin/perl
use strict();
use warnings();
my $file=$ARGV;
die("Bitte Datei mit angeben\n") if(! $file);
die("Datei $file existiert nicht") if(! -f $file);
while(my $line=<IN>) {
chomp($line);
$line =~ s/.*\|//;
print "Debug: ".$line."\n";
print OUT $line."\n";
}
close(IN);
close(OUT);
VG!
Ralf
Wenn Perl auch in Frage kommt, dann geht das (u.a.) so:
#!/usr/bin/perl
use strict();
use warnings();
my $file=$ARGV;
die("Bitte Datei mit angeben\n") if(! $file);
die("Datei $file existiert nicht") if(! -f $file);
while(my $line=<IN>) {
chomp($line);
$line =~ s/.*\|//;
print "Debug: ".$line."\n";
print OUT $line."\n";
}
close(IN);
close(OUT);
VG!
Ralf
Hallo privex,
kein Problem:
Grüße Uwe
kein Problem:
Dim fso,regex,matches,match,objOut
Const FILEIN = "C:\temp\test.txt"
Const FILEOUT = "C:\temp\test_out.txt"
Set fso = CreateObject("Scripting.Filesystemobject")
Set regex = CreateObject("vbscript.regexp")
'Textdatei einlesen
strContent = fso.OpenTextFile(FILEIN,1).ReadAll()
'Regex Parameter setzen
regex.Global = True: regex.IgnoreCase = True: regex.MultiLine = True
regex.Pattern = "\|([^\|]+)$"
'Regex ausführen
set matches = regex.Execute(strContent)
If matches.count > 0 Then
Set objOut = fso.OpenTextFile(FILEOUT,2,True)
For each match in matches
objOut.WriteLine match.submatches(0)
Next
objOut.Close
End If
MsgBox "Fertig"
Set fso = Nothing
Set regex = Nothing