Date: prev next · Thread: first prev next last
2020 Archives by date, by thread · List index


Hallo Rainer,

das kann ich schon verstehen. Es war eine schnelle Lösung mit PERL.

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".

[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 !!!


Gutes Gelingen,
Grüße
Hans-Werner ;-))


  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


------ Originalnachricht ------
Von: "Rainer" <spots4as@gmx.de>
An: users@de.libreoffice.org
Cc: "OoOHWHOoO" <OoOHWHOoO@t-online.de>
Gesendet: 08.01.2020 10:19:57
Betreff: Re: [de-users] alte Dokumente unlesbar (Codierung?)

Hallo Hans-Werner,

wenn ich mir Deine Vorschläge und das hier ansehe:

https://wiki.ubuntuusers.de/Perl/

muss ich wohl passen. Übersteigt meine Kompetenz. Einzig das hier wäre
für mich vermutlich ein Weg:

Am Mon, 06 Jan 2020 16:13:16 +0000
schrieb OoOHWHOoO <OoOHWHOoO@t-online.de>:

 [5] Alternativ kann man das PERL-Programm auch durch ein
 entsprechendes BASH-Skript ersetzen. Kann ich leider nicht anbieten,
 da meine Systemumgebung "Windows 10" ist.

Vielleicht weiß ein Linuxer hier, wie das Skript aussehen müsste
(eines, das sich für die Stapelverarbeitung idealerweise des nun
vorhandenen Makros bedient)?

Viele Grüße

Rainer

--
Liste abmelden mit E-Mail an: users+unsubscribe@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+unsubscribe@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

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.