Bestimmte Zeilen mit VBS in eine neue TXT Datei übernehmen
Hallo an Alle,
ich habe folgendes Problem:
Eine Textdatei besteht aus mehreren Zeilen, ab einer Leerzeile beginnen die Datensätze die für mich wichtig sind.
Ich muss nun mit VBS ab der Leerzeile prüfen ob ein ; am Schluss steht oder nicht. Wenn ein ; am Schluss steht soll die Zeile gelöscht werden. Falls keines am Schluss steht soll die jeweilige Zeile außer dem letzten Wert übernomen werden.
z.B. xxxxxx - xxxxxxx;0.000;0.400;0.000;0.125;0.125
d.h. der Wert 0.125 muss gelöscht werden der Rest übernommen.
Habe mal was gefunden, weiß allerdings nicht ob mir der Befehl hier weiterhilft.
intPosRev = InStrRev(strText,",",20)
Kann mir da jemand weiterhelfen wie ich die Sache am Besten programmiere?
Wäre um jede Hilfe dankbar!
Grüße
ich habe folgendes Problem:
Eine Textdatei besteht aus mehreren Zeilen, ab einer Leerzeile beginnen die Datensätze die für mich wichtig sind.
Ich muss nun mit VBS ab der Leerzeile prüfen ob ein ; am Schluss steht oder nicht. Wenn ein ; am Schluss steht soll die Zeile gelöscht werden. Falls keines am Schluss steht soll die jeweilige Zeile außer dem letzten Wert übernomen werden.
z.B. xxxxxx - xxxxxxx;0.000;0.400;0.000;0.125;0.125
d.h. der Wert 0.125 muss gelöscht werden der Rest übernommen.
Habe mal was gefunden, weiß allerdings nicht ob mir der Befehl hier weiterhilft.
intPosRev = InStrRev(strText,",",20)
Kann mir da jemand weiterhelfen wie ich die Sache am Besten programmiere?
Wäre um jede Hilfe dankbar!
Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 168368
Url: https://administrator.de/forum/bestimmte-zeilen-mit-vbs-in-eine-neue-txt-datei-uebernehmen-168368.html
Ausgedruckt am: 20.05.2025 um 23:05 Uhr
7 Kommentare
Neuester Kommentar
Hallo m.matt85 und willkommen im Forum!
Etwa so:
Grüße
bastla
Etwa so:
Ein = "D:\Text_alt.txt"
Aus = "D:\Text_neu.txt"
Delim = ";" 'Trennzeichen für Felder
Set fso = CreateObject("Scripting.FileSystemObject")
'gesamten Text in Zeilen-Array einlesen
Zeilen = Split(fso.OpenTextFile(Ein).ReadAll, vbCrLf)
'Ausgabedatei erzeugen
Set AusDatei = fso.CreateTextFile(Aus)
'Flag für "Sollen Zeilen ab jetzt geschrieben werden?" initialisieren
Schreiben = False
'Schleife über alle Zeilen
For i = 0 To UBound(Zeilen)
'Falls bereits geschrieben werden soll und die Zeile nicht mit dem Trennzeichen endet
If Schreiben And Right(Zeilen(i), 1) <> Delim Then
'Zeile anhand des Trennzeichens in ein Array "Felder" zerlegen
Felder = Split(Zeilen(i), Delim)
'Leerzeilen berücksichtigen
If UBound(Felder) >= 0 Then
'Inhalt des letzten Feldes löschen
Felder(UBound(Felder)) = ""
'Felder wieder (mit Trennzeichen) zu einer Zeile zusammenfügen
AusZeile = Join(Felder, Delim)
'Zeile in die Datei schreiben; dabei das überzählige Trennzeichen am Ende abschneiden
AusDatei.WriteLine Left(AusZeile, Len(AusZeile) - 1)
End If
Else
'Wenn Leerzeile gefunden, folgende Zeilen schreiben
If Zeilen(i) = "" Then Schreiben = True
End If
Next
bastla

Hallo m.matt85!
Ändere mal Codezeile 21:
Wenn auch mehr als 6 Felder vorkommen können/dürfen, dann:
Gruß Dieter
Ändere mal Codezeile 21:
If UBound(Felder) = 5 Then
Wenn auch mehr als 6 Felder vorkommen können/dürfen, dann:
If UBound(Felder) >= 5 Then
Gruß Dieter
Hallo m.matt85!
Ich kann zwar anhand Deines Beispieles den Fehler nicht nachvollziehen, aber versuch es alternativ mit der folgenden Schleife (ab Zeile 15):
Sollen die Kopfzeile (bis zur ersten Leerzeile) unverändert übernommen werden, müsste die Schleife eher so aussehen:
Grüße
bastla
Ich kann zwar anhand Deines Beispieles den Fehler nicht nachvollziehen, aber versuch es alternativ mit der folgenden Schleife (ab Zeile 15):
For i = 0 To UBound(Zeilen)
'Falls bereits geschrieben werden soll und die Zeile nicht mit dem Trennzeichen endet
If Schreiben And Right(Zeilen(i), 1) <> Delim Then
'Zeichenanzahl vor dem letzten Trennzeichen ermitteln
L = InStrRev(Zeilen(i), Delim) - 1
'Wenn es Text vor dem letzten Trennzeichen gibt, ...
If L > 0 Then
'... nur diesen schreiben, ...
AusDatei.WriteLine Left(Zeilen(i), L)
Else
'... ansonsten die Zeile unverändert ausgeben
AusDatei.WriteLine Zeilen(i)
End If
Else
'Wenn Leerzeile gefunden, folgende Zeilen schreiben
If Zeilen(i) = "" Then Schreiben = True
End If
Next
Kannst du mir vll noch kurz erklären was du mit Leerzeile berücksichtigen und der Letzten if Bedingung meinst?
Ich hatte das so interpretiert, dass erst nach der ersten Leerzeile Zeilen untersucht und ausgegeben werden sollen - daher wird erst dann das Schreiben "freigegeben" ...Sollen die Kopfzeile (bis zur ersten Leerzeile) unverändert übernommen werden, müsste die Schleife eher so aussehen:
'Flag für "Sollen Zeilen ab jetzt bearbeitet werden?" initialisieren
Bearbeiten = False
For i = 0 To UBound(Zeilen)
'Falls bearbeitet werden soll (keine Kopfzeile mehr)
If Bearbeiten Then
'Zeile nur übernehmen,wenn nicht Trennzeichen am Ende
If Right(Zeilen(i), 1) <> Delim Then
'Zeichenanzahl vor dem letzten Trennzeichen ermitteln
L = InStrRev(Zeilen(i), Delim) - 1
'Wenn es Text vor dem letzten Trennzeichen gibt, ...
If L > 0 Then
'... nur diesen schreiben, ...
AusDatei.WriteLine Left(Zeilen(i), L)
Else
'... ansonsten die Zeile unverändert ausgeben
AusDatei.WriteLine Zeilen(i)
End If
End If
Else
'Kopfzeile - daher unverändert ausgeben
AusDatei.WriteLine Zeilen(i)
'Wenn Leerzeile gefunden, folgende Zeilen bearbeiten
If Zeilen(i) = "" Then Bearbeiten = True
End If
Next
bastla
@Dieter
Der Test auf
soll nur verhindern, dass
danabengeht - für eine Leerzeile ergibt "
Grüße
bastla
Der Test auf
UBound(Felder) > 0
Felder(UBound(Felder)) = ""
UBound(Felder)
" nämlich -1...Grüße
bastla

Hallo bastla!
Das ist mir schon klar, aber ich habe es so verstanden bzw. vermutet, dass es mehre unterschiedliche Datensätze gibt und m.matt85 eben nur diese speziellen Datensätze auslesen will. Kann natürlich auch sein, wie Du ja schon angedeutet hast, dass es mehrere Leerzeilen gibt oder wie auch immer (Ratespiel)
Gruß Dieter
Das ist mir schon klar, aber ich habe es so verstanden bzw. vermutet, dass es mehre unterschiedliche Datensätze gibt und m.matt85 eben nur diese speziellen Datensätze auslesen will. Kann natürlich auch sein, wie Du ja schon angedeutet hast, dass es mehrere Leerzeilen gibt oder wie auch immer (Ratespiel)
Gruß Dieter