ich möchte in einer Textdatei (kein Writer-Dokument, sondern ASCII) bestimmte Textteile durch andere ersetzen. Da auf einer String-Variable ein .createReplaceDescriptor() nicht funktioniert, schreibe ich die Datei zuerst in ein Writer-Dokument, wende darauf die .createReplaceDescriptor()-Funktion und die Ersetzung an und exportiere das Ergebnis wieder als ASCII-Datei. Das funktioniert soweit auch ganz passabel. Jedoch erscheint das Hilfs-Writer-Dokument immer im Vordergrund und man sieht wie die Datei erst einmal gefüllt wird. Bei mehreren KB großen Textdateien dauert das schon mal paar Sekunden.
Wie kann ich also das Erscheinen dieses Hilfs-Dokuments unterdrücken? Ich habe schon versucht, die Option "Hidden" bei der Erzeugung des Hilfs-Dokumentes zu verwenden, aber dann funktioniert die Methode ".text" auf das ThisComponent nicht mehr (im Code unten einfach mal die Kommentare wegnehmen).
Hier ist mein Code. Zum Testen müsst Ihr natürlich den Pfad zur Textdatei auf Eurem Rechner umbiegen. Je größer die Datei ist, desto besser sieht man den Effekt, bei ca. 260 KB sind es bei mir ca. 6 Sekunden.
Code: Alles auswählen
Sub SuchenErsetzen
Dim Arg(1) as new com.sun.star.beans.PropertyValue
Dim Arg_save(3) as new com.sun.star.beans.PropertyValue
oSimpleFileAccess = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
'Datei bei Euch anpassen
oDatei = oSimpleFileAccess.OpenFileReadWrite("file:///home/daswaldhorn/Pfad/zur/Datei.txt")
oInputStream = createUnoService("com.sun.star.io.TextInputStream")
oInputStream.SetInputStream(oDatei.getInputStream)
'Diese zwei Zeilen einfach mal auskommentieren
'Arg(0).Name = "Hidden"
'Arg(0).Value = "True"
vDoc = StarDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Arg())
oDoc = ThisComponent
oText = oDoc.text
do while not oInputStream.isEOF
oDateiende = oText.getEnd()
oText.insertString(oDateiende, oInputStream.Readline(), False)
oText.insertControlCharacter(oDateiende, 0, False)
loop
oInputStream.closeInput()
oSuche = oDoc.createReplaceDescriptor
oSuche.setSearchString("Muss weg!")
oSuche.SetReplaceString("Muss hin!")
oDoc.ReplaceAll(oSuche)
'Datei bei Euch anpassen
sZiel_Datei = "file:///home/daswaldhorn/Pfad/zur/Ziel_Datei.txt"
Arg_save(0).Name = "URL"
Arg_save(0).Value = sZiel_Datei
Arg_save(1).Name = "FilterName"
Arg_save(1).Value = "Text"
Arg_save(2).Name = "FilterData"
Arg_save(2).Value = aFilterData()
oDoc.storeAsURL(sZiel_Datei, Arg_save())
oDoc.close(True)
End Sub

Vielen Dank für's Lesen und Gruß, Carsten