Hallo Rainer,
anbei ein iterativer "in einem Rutsch"-Lösungsvorschlag für die
"odt"-Dateien.
(A) TEST-BEISPIEL
[1] In dem Verzeichnis "E:/TMP/ODT/" sind die zu modifizierenden
"odt"-Dateien "ODT_1.odt", "ODT_2.odt" und "ODT_3".
[2] Alle drei Dateien enthalten jeweils die Zeichenfolge "ÄÖÜäöüß".
[3] Das Makro "SearchAndReplace" (Thomas' Makro leicht modifiziert)
befinde sich in "macro:///Standard.Module1.SearchAndReplace".
[4] Das PERL-Programm
[4.1] speichert alle Dateinamen im Verzeichnis "E:/TMP/ODT/" in ein
Array.
[4.2] arbeitet in einer Schleife das Array ab und bearbeitet auf diese
Weise jede "odt"-Datei mit dem Makro.
[5] Nach Beendigung des PERL-Programms enthalten alle drei Dateien
jeweils die Zeichenfolge "AeOeUeaeoeuess" gemäß Such- ("aSearch") und
Ersetzungsvorschrift ("aReplace") im Makro.
(B) ANWENDUNG
[1] Du musst lediglich in "aSearch" die zu suchenden und in "aReplace"
die zu ersetzenden Zeichen eintragen und dann das PERL-Programm starten,
wodurch ALLE "odt"-Dateien im Verzeichnis bearbeitet werden.
[2] Anschließend kannst Du dann mal schauen, ob es noch "falsche
Zeichen" in den "odt"-Dateien gibt. Wenn ja, ergänzt Du einfach
"aSearch" und "aReplace" entsprechen und startest das PERL-Programm
erneut.
[3] Punkt [2] musst Du dann so oft ausführen, bis alle "odt"-Dateien
bereinigt sind.
[4] Die Pfade im PERL-Programm musst Du entsprechen Deiner
Systemumgebung anpassen.
[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.
Grüße
Hans-Werner ;-))
(C) MAKRO
Sub SearchAndReplace(ODT as String)
Dim aSearch()
Dim aReplace()
Dim oD as Object
Dim aD() as Variant
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
oD =
StarDesktop.loadComponentFromURL(ConvertToURL(ODT),"_blank",0,aPV())
For i = 0 to ubound(aSearch)
oReplace = oD.CreateReplaceDescriptor
With oReplace
.SetSearchString(aSearch(i))
.SetReplaceString(aReplace(i))
.SearchCaseSensitive = True
End With
oD.replaceAll(oReplace)
Next
oD.StoreAsURL(ConvertToURL(ODT),aD())
oD.Close(False)
End Sub
(D) PERL
use strict;
use warnings;
use File::Find;
my @A; # Array
my $D; # Directory
my $I; # Index
my $L; # LibreOffice
my $M; # Macro
my $S; # String
$D = "E:/TMP/ODT/";
$L = "C:/Program Files/LibreOffice/program/soffice.exe";
$S = "macro:///Standard.Module1.SearchAndReplace";
find(sub{push @A,$File::Find::name if -f },$D);
for ($I=0;$I <= $#A;$I++) {
$M = $S."(".$A[$I].")";
`"$L" --nologo "$M"`;
}
--
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
- Re: [de-users] alte Dokumente unlesbar (Codierung?) · OoOHWHOoO
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.