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+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