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


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


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.