yv35k0
Goto Top

Visual Basic Script fso.CreateTextFile WriteLine ohne Zeilenumbruch nach letztem Datensatz

Suche Hilfe um letzten Zeilenumbruch bei WriteLine zu entfernen oder diesen erst garnicht schreiben zu lassen.

Hallo,

ich habe ein VBS Script, dass eine CSV Datei einließt, Spalten entfernt und wieder neu schreibt.

Das schreiben erfolgt Zeile für Zeile mit fso.CreateTextFile und WriteLine.

Hier nun mein Problem. Write.Line legt nach jeder Zeile einen Zeilenumbruch an. Dies ist ansich auch gut aber am Ende soll dies nicht passieren. Kann ich das unterbinden oder den letzten Umbruch löschen? Alternativ dachte ich zuerst, dass ich die Zeilen einfach nur mit Write schreibe und dann ein & vbLf einfüge aber das bringt dann natürlich genau das gleiche Resultat.

Freundliche Grüße
Yves

Content-Key: 173953

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

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

Member: dog
dog Sep 29, 2011 at 18:25:25 (UTC)
Goto Top
nur mit Write schreibe und dann ein & vbLf einfüge aber das bringt dann natürlich genau das gleiche Resultat.

Natürlich solltest du dir dann überlegen, wann du die letzte Zeile geschrieben hast face-wink
Wenn du das nicht weißt, kann man auch immer noch den Zeilenumbruch am Anfang der nächsten Zeile einfügen.
Member: yv35k0
yv35k0 Sep 29, 2011 at 18:51:32 (UTC)
Goto Top
Keine schlechte Idee. Dann habe ich allerdings vor der ersten Zeile einen Umbruch den ich auch nicht möchte.
Member: dog
dog Sep 29, 2011 at 18:54:54 (UTC)
Goto Top
Wie wäre es mit
if(lineNum > 0)
  write linebreak

? face-wink
Member: yv35k0
yv35k0 Sep 29, 2011 at 21:37:36 (UTC)
Goto Top
Läuft nicht...bin mir auch nicht sicher ob es VBS kompatibel ist.
Member: bastla
bastla Sep 29, 2011 at 22:17:59 (UTC)
Goto Top
Hallo yv35k0 und willkommen im Forum!

Zumeist ist es sinnvoll, bereits vorhandenen Code auch (vorzugsweise mit passender ) zu posten ...

Ansonsten könntest Du etwa so vorgehen:
Mit zeilenweisem Schreiben:
For ...
    ....
    Datei.Write Prefix & Zeile
    Prefix = vbCrLf
Next
Alternativ gleich die gesamte Ausgabe als String erzeugen und dann am Stück schreiben:
For ...
    ....
    Ausgabe = Ausgabe & vbCrLf & Zeile
Next
fso.CreateTextFile(Pfad).Write Mid(Ausgabe, 3)
Grüße
bastla
Member: dog
dog Sep 29, 2011 at 23:11:52 (UTC)
Goto Top
bin mir auch nicht sicher ob es VBS kompatibel ist.

Man nennt sowas auch Pseudocode
Member: yv35k0
yv35k0 Sep 30, 2011 at 18:12:54 (UTC)
Goto Top
Hallo Bastla,

vielen Dank für deine Hilfe!

Ich habe die erste Variante genommen, da ich vorher auch schon Zeile für Zeile geschrieben habe.

Eine Frage habe ich allerdings doch noch. Wenn in der Quelldatei am Ende schon ein Umbruch ist kann ich diesen im Ziel auch verhindern?

Grüße
Yves
Member: bastla
bastla Sep 30, 2011 at 19:07:46 (UTC)
Goto Top
Hallo yv35k0!
Wenn in der Quelldatei am Ende schon ein Umbruch ist kann ich diesen im Ziel auch verhindern?
Wer soll Dich davon abhalten? Im Zweifelsfall tendiere ich dazu, gleich die ganze Datei einzulesen und zeilenweise weiter zu verarbeiten:
Zeilen = Split(fso.OpenTextFile(Pfad).ReadAll, vbCrLf)
For Each Zeile In Zeilen
    If Trim(Zeile) <> "" Then 'Keine (bis auf Leerzeichen) leere Zeile verarbeiten  
        NeueZeile = ...
        Ausgabe = Ausgabe & vbCrLf & NeueZeile
    End If
Next
fso.CreateTextFile(Pfad).Write Mid(Ausgabe, 3)
Ansonsten kannst Du ja auch bei zeilenweisem Einlesen analog zu meinem "If" feststellen, ob eine Zeile überhaupt zu verarbeiten ist (für den Fall, dass am Ende der Umbruch stünde, wäre die letzte Zeile leer) ...

Grüße
bastla
Member: yv35k0
yv35k0 Oct 04, 2011 at 12:11:39 (UTC)
Goto Top
Hallo Bastla,

also irgendwie stehe ich gerade auf dem Schlauch. Meine Schleife sieht eigentlich fast aus wie deine und ich finde den Fehler einfach nicht. Könntest du dir bitte mal den Code der For Schleife anschauen.

For i = Ab To UBound(Zeilen)
    If Trim(Zeilen(i)) = "" Then  
        ZeileNeu = Zeilen(i)
    Else
        Felder = Split(Zeilen(i), Delim)
        ZeileNeu = _
            Felder(0) & Delim & _
            Felder(1) & Delim & _
            Felder(2) & Delim & _
            Felder(12) & Delim & _
            Serie & Delim & _
            Felder(13) & Delim & _
            Leerzeichen & Delim & _
            Felder(15)
    
DateiNeu.Write Prefix & ZeileNeu

Prefix = vbCrLf

End If

Next

Grüße
Yves
Member: bastla
bastla Oct 04, 2011 at 12:52:14 (UTC)
Goto Top
Hallo yv35k0!

Platziere doch mal das "End If" in Zeile 15 anstatt 20 ...

Grüße
bastla
Member: yv35k0
yv35k0 Oct 04, 2011 at 13:07:31 (UTC)
Goto Top
Mensch du bist ja schneller als die Feuerwehr!

Jetzt funktioniert es wunderbar. Vielen Dank für deine Hilfe.

Yves