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

Antwort per Email an