Große Datei erste Zeile austauschen

Hallo,
ich muß in einer sehr großen Textdatei die erste Zeile austauschen. Meine Lösung ist leider sehr langsam:

Öffnen der Datei
Inhalt der ganzen Datei in String lesen
Schließen
Inhalt ändern
Öffnen der Datei
String schreiben
Schließen

Wer weiß eine schnellere Lösung?

Danke

Hi!

Öffnen der Datei
in einer Schleife byteweises Einlesen, bis Satzendezeichen (CR/LF) gefunden wurde
Daten austauschen

Erspart dir das zeitintensive Einlesen der ganzen Datei

Grüße
Siegfried

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Wie kann ich wieder in die Datei schreiben
Danke für Deine Antwort.

Aber wie kann ich wieder in die Datei zurückschreiben, die Datei ist ja schon zum lesen (byteweise) geöffnet.
Bitte schick mir ein kleines Beispiel.

Danke
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Aber wie kann ich wieder in die Datei zurückschreiben, die
Datei ist ja schon zum lesen (byteweise) geöffnet.
Bitte schick mir ein kleines Beispiel.

Nachfolgend der Source-Code für dein Problem (inkl. entsprechender Erläuterungen). Ein Punkt ist dabei zu beachten: Der neue Satz darf nicht länger sein als der alte, da sonst in den Bereich der nachfolgenden Daten geschrieben wird. Wenn das erforderlich ist, dann kommst du um das Neuerzeugen der kompletten Datei nicht herum!

Die Pfadangaben und den Dateinamen mußt du natürlich anpassen!

Nun der Code:

Dim cDaten As String
Dim iFileNr As Integer
Dim lLaenge As Long

'*** nächstes freies Datei-Handle holen ***
iFileNr = FreeFile

'*** Datei im Binary-Modus öffnen ***
Open „C:\SHAREWARE\DATEI.TXT“ For Binary As #iFileNr
If LOF(iFileNr) = 0 Then
'*** Wenn Datei leer ist, schließen und löschen ***
Close iFileNr
Kill „C:\SHAREWARE\DATEI.TXT“
Else
'*** Zeiger für Byte-Position auf 1 setzen ***
'*** (für Prüfung auf vbCrLf müssen ***
'*** mindestens 2 Byte gelesen werden ***
lLaenge = 1

Do
'*** Zeiger für Byte-Position um 1 erhöhen ***
lLaenge = lLaenge + 1

'*** Zielvariable auf Länge bringen ***
cDaten = Space$(lLaenge)

'*** Daten von Position 1 bis Zeigerposition einlesen ***
Get #iFileNr, 1, cDaten

'*** Prüfen, ob Satzende erreicht wurde ***
Loop While Right$(cDaten, 2) vbCrLf

'*** kompletten Datensatz anzeigen ***
MsgBox cDaten

'*** Satzinhalt gegen neuen Wert austauschen ***
cDaten = „Erster Satz ausgetauscht“

'*** Wenn neuer Satz länger ist als alter Satz, ***
'*** dann würden Teile des 2.Datensatzes in der Datei ***
'*** überschrieben und die Datei unlesbar, ***
'*** also verhindern! ***
If Len(cDaten) > lLaenge - 2 Then
MsgBox „Neuer Eintrag zu lang“
Else
'*** Neuer Satz paßt! ***
'*** Mit Spaces ausrichten auf Länge alter Satz ***
cDaten = cDaten & Space$((lLaenge - 2) - Len(cDaten))

'*** Satzende-Zeichen anfügen ***
cDaten = cDaten & vbCrLf

'*** Satz wieder an alte Position in Datei schreiben ***
Put #iFileNr, 1, cDaten
End If

'*** Datei schließen ***
Close iFileNr
End If

So, das wär’s!

Grüße
Siegfried

1 Like

Danke
Danke

Das habe ich gesucht.