Hallo Rainer,
da hat wohl WINDOWS mit seinem Zeichensatz zugeschlagen :-o ...
Die falsch umgesetzten Zeichen kommen nur in den Kommentarzeilen vor,
nicht aber im Makro-Code, von daher wird sich das nicht auswirken auf
das Makro.
ABER: Die paar Umlaute und das "ß" in den Kommentarzeilen zu korrigieren
ist ja schnell gemacht und dann ist alles fehlerfrei in der Darstellung.
ALTERNATIV: Das Makro aus meiner vorherigen Mail kopieren, ist aber
wegen ABER nicht wirklich notwendig.
"[...] Immer ? Ich wäre davon ausgegangen, dass es genügt, bei einem
Testdurchlauf so zu verfahren. Wenn es funktioniert müsste doch alles
gut sein, oder ? [...]"
Erstelle einfach ein BACKUP der zu bearbeitenden Dateien in einem
anderen Verzeichnis. Wenn dann doch was "schief" geht, ist nichts
verloren. Alles andere wäre leichtsinnig und unprofessionell !
"[...] Den nachfolgenden Abschnitt komplett so als Makro übernehmen, d.h. inkl. der
darin enthaltenen Kommentare ? [...]"
Ja, denn die Kommentare sind erlaubte BASIC-Makro-Kommentare. Alles, was auf '
folgt ist Kommentar.
Gruß
Hans-Werner
------ Originalnachricht ------
Von: "Rainer" <spots...@gmx.de>
An: users@de.libreoffice.org
Cc: "OoOHWHOoO" <ooohwh...@t-online.de>
Gesendet: 08.01.2020 17:05:38
Betreff: Re: [de-users] alte Dokumente unlesbar (Codierung?)
Hallo Hans- Werner,
Am Wed, 08 Jan 2020 13:08:37 +0000
schrieb OoOHWHOoO <ooohwh...@t-online.de>:
Ich habe jetzt mal Thomas' Marko-Idee aufgegriffen und so
modifiziert, dass bei einmaligem Aufruf alle "odt"-Dateien im
Verzeichnis bearbeitet werden.
[1] Ich habe Dir das Makro auch an Deine private Email-Adresse
gesendet mit Dateianhang "SuchenUndErsetzenInAllenDateien.txt". In
der eMail (hier) gehen immer die Leerzeichen-Einrückungen und somit
auch die Struktur verloren. Kopiere das Makro aus der Datei
"SuchenUndErsetzenInAllenDateien.txt"bei Dir nach "Module1".
Das wird nicht gehen, denn die von Dir als PN übermittelte Textdatei
enthält einiges, was mir irgendwie bekannt vorkommt ;-) Beispiele:
- Datei mit dem Pfad-/Dateinamen 'dODT & aODT(iODT)' öffnen:
- Ãœber alle 'aSearch'-Zeichen:
- gefundenen 'aSearch'-Zeichen durch das zugehörige "aRepalce"-Zeichen
ersetzen
- Das aktuell indizierte 'aODT'-Dokument schließen:
[2] Lege ein Verzeichnis (beispielsweise ".../ODT/") an und trage den
kompletten Pfad im Makro ein:
dODT = "E:\TMP\ODT\"
ersetzen durch
dODT = "deine vollständige pfadangabe"
[3] Zum Testen erstelle in Deinem Verzeichnis drei "odt"-Dateien
(ODT_1.odt + ODT_2.odt + ODT_3.odt) mit jeweils dem Inhalt: ÄÖÜäöüß
[4] Öffne eine neue Datei mit WRITER und starte das Makro.
[5] Nach Ausführung des Makros sollte in den drei Dateien "ÄÖÜäöüß"
ersetzt sein durch "AeOeUeaeoeuess".
[6] Wenn Du in dem Makro
aPV(0).value = True
ersetzt durch
aPV(0).value = False
wird die jeweils bearbeitete Datei für Dich sichtbar geöffnet und Du
kannst, wenn Du ganz schnell schaust, die Ersetzungen beobachten.
Kann man mal bei den obigen drei Test-Dateien machen, ist aber bei
der Verarbeitung vieler Dateien nicht empfehlenswert - verlangsamt
nur die Verarbeitungsgeschwindigkeit.
[8] 'aSearch' und 'aReplace' musst Du nur um die neuen
'aSearch'-Zeichen und die zugehörigen 'aReplace'-Zeichen erweitern.
Vorherige Einträge müssen nicht gelöscht werden, außer natürlich
diesen Einträgen für den Makro-Test, da Du ja die Umlaute und "ß"
nicht ersetzen willst:
aSearch = array("Ä" ,"Ö" ,"Ü" ,"ä" ,"ö" ,"ü" ,"ß" )
aReplace = array("Ae","Oe","Ue","ae","oe","ue","ss")
[7] Arbeite bitte IMMER NUR MIT KOPIEN DEINER DATEIEN, wenn Du dieses
Makro anwendest !!!
Immer? Ich wäre davon ausgegangen, dass es genügt, bei einem
Testdurchlauf so zu verfahren. Wenn es funktioniert müsste doch alles
gut sein, oder?
Den nachfolgenden Abschnitt komplett so als Makro übernehmen, d.h. inkl.
der darin enthaltenen Kommentare?
Sub SuchenUndErsetzenInAllenDateien
' D E K L A R A T I O N E N
Dim oDocument as Object
Dim oReplace as Object ' object
Dim aDummy() as Variant ' array
Dim aReplace() as Variant ' array
Dim aSearch() as Variant ' array
Dim iSearch as Integer ' index
Dim aODT() as Variant ' array
Dim dODT as String ' directory
Dim fODT as String ' file
Dim iODT as Integer ' index
' V O R B E L E G U N G E N
dODT = "E:\TMP\ODT\"
aSearch = array("Ä" ,"Ö" ,"Ü" ,"ä" ,"ö" ,"ü" ,"ß" )
aReplace = array("Ae","Oe","Ue","ae","oe","ue","ss")
Dim aPV(0) as New com.sun.star.beans.PropertyValue
aPV(0).name = "Hidden"
aPV(0).value = True
' D A T E I N A M E N E I N L E S E N
' Ersten Dateinamen aus dem Verzeichnis 'dODT' in das Array 'aODT'
einlesen:
fODT = Dir(dODT & "*.odt",0)
If (fODT = "") Then
MsgBox ("Keine Dateien im Verzeichnis " & Chr(10) &_
dODT & Chr(10) &_
"gefunden !")
End
EndIf
ReDim Preserve aODT(0)
aODT(0) = Dir(dODT & "*.odt",0)
iODT = 0
' Alle weiteren Dateinamen aus dem Verzeichnis 'dODT' in das Array
'aODT' einlesen:
Do
fODT = Dir
If ( fODT = "" ) Then
Exit Do
EndIf
iODT = iODT + 1
ReDim Preserve aODT(iODT)
aODT(iODT) = fODT
Loop
' Z E I C H E N S U C H E N U N D E R S E T Z E N
' Über alle Dateinamen in dem Array 'aODT':
For iODT = 0 To Ubound(aODT) Step 1
' Datei mit dem Pfad-/Dateinamen 'dODT & aODT(iODT)' öffnen:
oDocument =
StarDesktop.loadComponentFromURL(ConvertToURL(dODT &
aODT(iODT)),"_blank",0,aPV())
' Über alle 'aSearch'-Zeichen:
For iSearch = 0 to Ubound(aSearch) Step 1
' Das aktuell indizierte 'aSearch'-Zeichen in der aktuell
indizierten Datei suchen und alle
' gefundenen 'aSearch'-Zeichen durch das zugehörige
"aRepalce"-Zeichen ersetzen:
oReplace = oDocument.CreateReplaceDescriptor
With oReplace
.SetSearchString(aSearch(iSearch))
.SetReplaceString(aReplace(iSearch))
.SearchCaseSensitive = True
End With
oDocument.replaceAll(oReplace)
Next
' Das aktuell indizierte 'aODT'-Dokument speichern:
oDocument.StoreAsURL(ConvertToURL(dODT &
aODT(iODT)),aDummy()) ' Das aktuell indizierte 'aODT'-Dokument
schließen: oDocument.Close(False)
Next
End Sub
Viele Grüße
Rainer
--
Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org
Probleme?
https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
--
Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org
Probleme?
https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy