Seite 1 von 2
Re: Macro für Füllwörter
Verfasst: So, 09.09.2007 17:21
von Stephan
Hat zufällig jemand hier eine Idee, ob und wie sich sowas mit Macros realisieren lässt?
indem Du die Wörter per Makro suchst und einfärbst? (sonst verstehe ich die Frage nicht)
warum verwendest Du nicht einfach Auto-Ersetzung?
Gruß
Stephan
Re: Macro für Füllwörter
Verfasst: So, 09.09.2007 20:06
von komma4
eine kleine Sonntags-Übung...
war gar nicht so schwer
Code: Alles auswählen
REM ***** BASIC *****
' 20070909
' http://de.openoffice.info/viewtopic.php?f=1&t=13889
Private oDok as Object
Private oSuchBeschr as Object
Private iLogNr, iDateiNr
Sub writer_markierenFuellwort
sMakroName = "writer_markierenFüllwort"
' Konstante zur Angabe der FüllWortListe
cFWL = "/zentrale/2007/Füllwort.Liste"
' Konstante für Log
cFWLLOG = "/zentrale/2007/Füllwort.Liste.Log"
' Aufruf aus einem Writer-Dokument?
oDok = ThisComponent
if Not oDok.supportsService(_
"com.sun.star.text.TextDocument" ) Then
Msgbox "Dieses Makro muss von einem aus Writer-Dokument aufgerufen werden",, sMakroName
exit sub
end if
' Liste der Füllworte vorhanden?
if Not FileExists( cFWL ) then
Msgbox "Füllwort.Liste nicht gefunden; erwartete Datei: " & cFWL ,, sMakroName
exit sub
end if
' Ausgabe der Fundstellen in Log
iLogNr = FreeFile
Open cFWLLog For OUTPUT AS iLogNr
' Lesen der Textdatei
iDateiNr = FreeFile
Open cFWL For INPUT as iDateiNr
' init der Suche
initSuchBeschr
' Suchen-Schleife für jedes Wort
While Not EOF( #iDateiNr )
Line Input #iDateiNr, sFW
markFW( sFW )
Wend
Close #iDateiNr
Close #iLogNr
End Sub
Sub markFW( sFW as String )
oSuchBeschr.SearchString = sFW
oAlleStellen = oDok.findAll( oSuchBeschr )
Print #iLogNr, sFW & ": " & oAlleStellen.getCount()
For i = 0 to oAlleStellen.getCount() - 1
oGefunden = oAlleStellen.getByIndex( i )
oGefunden.CharColor = RGB( 255, 0, 0 )
oGefunden.CharWeight = com.sun.star.awt.FontWeight.BOLD
Next
End Sub
Sub initSuchBeschr
oSuchBeschr = oDok.createSearchDescriptor()
With oSuchBeschr
.SearchRegularExpression = FALSE
.SearchCaseSensitive = FALSE
End With
End Sub
Die Inhalte der Konstanten für die Wortliste und das Log müssen natürlich angepasst werden.
Hilft das?
Re: Macro für Füllwörter
Verfasst: Mo, 10.09.2007 12:32
von komma4
Im Code sind die beiden Konstanten (konstant=sie ändern sich nicht während des Programmablaufs) cFWL und cFWLLog mit den Namen meiner Testdateien gesetzt: die Inhalte musst Du auf Deine Dateien umschreiben.
Als Wortliste habe ich eine Textdatei, mit einem "Suchbegriff" pro Zeile erstellt (damit gehen auch zusammengesetzte Füllworte, wie "aber auch"). Deren Namen (Pfad und Dateinamen) kommt in cFWL
In der Datei, welche durch den Namen in der Konstanten cFWLLog bestimmt wird, schreibt das Makro die gesuchten Füllworte und deren Anzahl rein.
Kommst Du damit zurecht?
Re: Macro für Füllwörter
Verfasst: Di, 11.09.2007 00:38
von komma4
Da eine solche Funktion vielleicht öfter gebraucht wird - habe ich das Ding auf die Website gestellt:
Füllwort-Liste
Kleinere Änderungen zur geposteten Version:
Dateinamen der untersuchten Datei und der Wortliste, sowie Datum und Uhrzeit der Untersuchung wird nun ins LOG geschrieben.
Re: Macro für Füllwörter
Verfasst: Sa, 22.12.2007 02:01
von majcho
Das Makro
http://www.re-solutions.de/ooo/makros/g ... artOOO.odt funktioniert bestens. Habe leider auch nur bedingte Programmiertkenntnisse und könnte mir folgende Funktionserweiterung als sehr hilfreich vorstellen:
Wie könnte ein Füllwort durch ein anderes ersetzt werden?
aber = jedoch
nicht schlecht = gut
weißer Schimmel = Schimmel
nix = ""
So würde in der angegebenen Reihenfolge das Wort aber durch jedoch ersetzt. Folgt hinter dem = ein "" so wird das Wort gelöscht. Könnten Sie den Quellode ergänzen?
Re: Macro für Füllwörter
Verfasst: Di, 25.12.2007 18:06
von komma4
Das freut mich.
Ich hoffe, auch das
Füllwort-Liste Makro funktioniert wie gewünscht.
majcho hat geschrieben:Habe leider auch nur bedingte Programmiertkenntnisse
Das kann doch schon reichen...
majcho hat geschrieben:folgende Funktionserweiterung
Das ist keine Erweiterung, sondern ein völlig neuer Zweck....
Lese die Textdatei in zwei Variable (vor und hinter einem Trennzeichen) und verwende den [url=file://opt/openoffice.org2.3_sdk/docs/DevelopersGuide/Text/Text.xhtml#1_3_3_3_Search_and_Replace]ReplaceDescriptor[/url] anstelle des SearchDescriptors
Hilft das?
Re: Macro für Füllwörter
Verfasst: Di, 25.12.2007 23:26
von majcho
Das Füllwörter-Makro meinte ich. Den SearchDescriptor habe ich durch den ReplaceDescriptor ersetzt. Es gelingt mir jedoch kein anständigen Code hinzubekommen. Vor allem mit einer Schleife, mit dem bloßen aufzeichnen eines Makros ist das nicht möglich. Werde wohl eine Weile knobeln und dabei auch lernen.
Re: Macro für Füllwörter
Verfasst: Mi, 26.12.2007 15:18
von komma4
majcho,
wenn Du Probleme mit Deinem Code hast, dann solltest Du uns diesen zeigen (in einem neuen Posting im BASIC-Bereich des Forums, mit aussagekräftigem Betreff). An welcher Stelle tritt welches Fehlverhalten auf?
Deine ursprüngliche Aufgabenstellung war ein "automatische Ersetzung anhand einer Ersetzungsliste",
right? Du hast die Eigenschaften des
ReplaceDescriptors neu gesetzt und die Datei mit den Such-/Ersatzbergriffen korrekt ausgelesen und den Variablen zugewiesen?
Zum Lernen von BASIC siehe die
Informationen zur StarBasic-Programmierung
Bis später...
Re: Macro für Füllwörter
Verfasst: Mi, 26.12.2007 22:35
von majcho
Sorry, wenn ich in diesen Thread den "Ersetzungsvorgang" für Füllwörter fortsetze, immerhin geht es noch um Füllwörter.
Mir ist zumindest der Ersetzungsvorgang durch "" (=Füllwort löschen) gelungen. Aber wie lese ich die zweite Variable aus der Textdatei hinter dem Trennzeichen (in dem Fall das Gleichheitszeichen "=" )?
Code: Alles auswählen
REM ***** BASIC *****
Private oDok as Object
Private oSuchBeschr as Object
Private oErsetzBeschr as Object
Private iDateiNr
Sub ocm_ersetzenFuellwort
sMakroName = "ocm_ersetzenFüllwort"
sMakroVersion = "1.0.0"
sMakroDatum = "2007-12-26"
' Konstante zur Angabe der FüllWortListe
cFWL = "Bereinigungsmakro/Füllworte.Liste"
' laden zum Nutzen von Standardfunktionen
GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
' Aufruf aus einem Writer-Dokument?
oDok = ThisComponent
if Not oDok.supportsService(_
"com.sun.star.text.TextDocument" ) Then
Msgbox "Dieses Makro muss von einem aus Writer-Dokument aufgerufen werden",, sMakroName
exit sub
end if
' Liste der Füllworte vorhanden?
if Not FileExists( cFWL ) then
Msgbox "Füllwort.Liste nicht gefunden; erwartete Datei: " & cFWL ,, sMakroName
exit sub
end if
' Lesen der Textdatei
iDateiNr = FreeFile
Open cFWL For INPUT as iDateiNr
' init der Suche
FWL_initErsetzSuchBeschr
' Suchen-Schleife für jedes Wort
While Not EOF( #iDateiNr )
Line Input #iDateiNr, sFW
FWL_ersetzFW( sFW )
Wend
Close #iDateiNr
End Sub
Sub FWL_ersetzFW( sFW as String )
oSuchBeschr.SearchString = sFW
oSuchBeschr.ReplaceString = ""
oDok.replaceAll( oSuchBeschr )
End Sub
Sub FWL_initErsetzSuchBeschr
oSuchBeschr = oDok.createReplaceDescriptor()
With oSuchBeschr
.SearchRegularExpression = FALSE
.SearchCaseSensitive = FALSE
End With
End Sub
P.S.: Ich bin immer noch OOo-Basic-Anfänger, sodass der Code nicht gänzlich optimal ist.
Re: Macro für Füllwörter
Verfasst: Fr, 28.12.2007 01:12
von komma4
Anfänger zu sein ist keine Schande.
Schau'n 'mer ma
aber = jedoch
nicht schlecht = gut
weißer Schimmel = Schimmel
nix = ""
Durch die Anweisung zum Einlesen einer Zeile erhälst Du Such- und Ersetzungsbegriff, durch das Trennzeichen getrennt.
( in der letzten Zeile lasse einfach die Anführungszeichen weg ).
Die Funktion SPLIT teilt Dir eine solche Zeile in Bestandteile; sie gibt ein Array zurück, das Du zuvor deklarierst:
Zur Klarstellung verwendest Du eine neue Variable im Code:
und teilst anschliessend in 2 Bestandteile, und verteilst sie auf die Variablen für 'Füllwort' und 'Ersatzbegriff':
Code: Alles auswählen
aZeilenTeil() = SPLIT( sZeile, "=", 2 )
sFW = aZeilenTeil(0)
' Ersatzbegriff
sEB = aZeilenTeil(1)
FWL_ersetzFW( sFW , sEB )
' ....
' Ersetzen Füllwort Routine
'
Sub FWL_ersetzFW( sSuch as String , Optional sErsetz as String )
oSuchBeschr.SearchString = sSuch
if isMissing( sErsetz ) then
oSuchBeschr.ReplaceString = ""
else
oSuchBeschr.ReplaceString = sEreetz
end if
oDok.replaceAll( oSuchBeschr )
Bei Fragen zum Code: fragen!
Hilft das?
Re: Macro für Füllwörter
Verfasst: Fr, 28.12.2007 23:52
von majcho
komma4 hat geschrieben:
Durch die Anweisung zum Einlesen einer Zeile erhälst Du Such- und Ersetzungsbegriff, durch das Trennzeichen getrennt.
( in der letzten Zeile lasse einfach die Anführungszeichen weg ).
Die Funktion SPLIT teilt Dir eine solche Zeile in Bestandteile; sie gibt ein Array zurück, das Du zuvor deklarierst:
Bei Fragen zum Code: fragen!
Hilft das?
Den Text einer Variable zu übergeben und einfach durch SPLIT() aufzuteilen ist genial einfach. Leider verhakte sich dann der Code an der Zeile
und teilte mir mit
Unzulässiger Wert oder Datentyp.
Index außerhalb des definierten Bereichs
Ich vermute es hängt dan der Zahl 0, 1 oder 2 innerhalb der Schleife
hier der gesamte Code:
Code: Alles auswählen
REM ***** BASIC *****
Private oDok as Object
Private oSuchBeschr as Object
Private oErsetzBeschr as Object
Dim aZeilenTeil( 0 to 1 ) as String
Private iDateiNr
Sub ocm_ersetzenFuellwort
sMakroName = "ocm_ersetzenFüllwort"
sMakroVersion = "1.0.1"
sMakroDatum = "2007-12-28"
' Konstante zur Angabe der FüllWortListe
cFWL = "/Bereinigungsmakro/Füllworte.Liste"
' laden zum Nutzen von Standardfunktionen
GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
' Aufruf aus einem Writer-Dokument?
oDok = ThisComponent
if Not oDok.supportsService(_
"com.sun.star.text.TextDocument" ) Then
Msgbox "Dieses Makro muss von einem aus Writer-Dokument aufgerufen werden",, sMakroName
exit sub
end if
' Liste der Füllworte vorhanden?
if Not FileExists( cFWL ) then
Msgbox "Füllwort.Liste nicht gefunden; erwartete Datei: " & cFWL ,, sMakroName
exit sub
end if
' Lesen der Textdatei
iDateiNr = FreeFile
Open cFWL For INPUT as iDateiNr
' init der Suche
FWL_initErsetzSuchBeschr
' Suchen-Schleife für jedes Wort
While Not EOF( #iDateiNr )
Line Input #iDateiNr, sZeile
aZeilenTeil() = SPLIT( sZeile, "=", 2 )
sFW = aZeilenTeil(0)
' Ersatzbegriff
sEB = aZeilenTeil(1)
FWL_ersetzFW( sFW , sEB )
Wend
Close #iDateiNr
End Sub
' Ersetzen Füllwort Routine
Sub FWL_ersetzFW( sSuch as String , Optional sErsetz as String )
oSuchBeschr.SearchString = sSuch
if isMissing( sErsetz ) then
oSuchBeschr.ReplaceString = ""
else
oSuchBeschr.ReplaceString = sEretz
end if
oDok.replaceAll( oSuchBeschr )
End Sub
Sub FWL_initErsetzSuchBeschr
oSuchBeschr = oDok.createReplaceDescriptor()
With oSuchBeschr
.SearchRegularExpression = False
.SearchCaseSensitive = True
End With
End Sub
Re: Macro für Füllwörter
Verfasst: Sa, 29.12.2007 10:54
von komma4
nur kurz (mein Flieger geht in ein paar Stunden):
abgesehen vom Tippfehler
oSuchBeschr.ReplaceString = sEretz
habe ich die Dateischleife schonmal falsch aufgesetzt, korrekt wäre:
* Leseversuch
* Schleife: wenn nicht EOF, bearbeiten
* nächste Zeile lesen
* Ende der Schleife
Code: Alles auswählen
' erste Zeile ?
Line Input #iDateiNr, sZeile
' Suchen-Schleife für jedes Wort
While Not EOF( #iDateiNr )
' hier bearbeiten
' ...
'
' dann weiter lesen
Line Input #iDateiNr, sZeile
Wend
Die Fehlermeldung erhalte ich hier nur, wenn ich die Variablennamen falsch schreibe.
Du musst Deinen Code also debuggen (mit PRINT Anweisungen Variableninhalte ausgeben) um die Fehlerstelle zu finden...
Lasse Dir die
sZeile anzeigen nach dem lesen...
Viel Erfolg - ich bin dann mal weg.
Re: Macro für Füllwörter
Verfasst: Sa, 29.12.2007 16:51
von Arran
Hallo Ihr Makrospezialisten.
Das ist ein Gebiet, von dem ich schon viel gehört, aber eigentlich noch nie bewusst angewendet habe. Somit besitze ich auch nicht die geringste Erfahrung mit Makros, nicht mal mit der Anwendung.
Das hier vorgestellte Makro wirklich bemerkenswert, das vor allem meine Frau auch anwenden sollte. Nun habe ich zwei Fragen:
1. Ist es egal, wo auf dem Computer diese beiden Füllwortlisten abgelegt sind? Oder gibt es bestimmte Ordner, wo solche Dateien hinein müssen?
2. Via Extras --> etc. komme ich dann auf den Makro. Dort wird mit im rechten Kasten drei Dateien angezigt. Welches ist die richtige, die angeklickt werden muss?
Vielen Dank für eine gelegentliche Antwort. Inzwiwschen Schöne Festtage!!!
Arran
Re: Macro für Füllwörter
Verfasst: So, 30.12.2007 00:37
von majcho
Arran hat geschrieben:
1. Ist es egal, wo auf dem Computer diese beiden Füllwortlisten abgelegt sind? Oder gibt es bestimmte Ordner, wo solche Dateien hinein müssen?
Das ist völlig egal wo die Datei
Füllwörter.Liste abgelegt ist. Die Datei kann auch
Füllwörter.txt lauten. Jedoch ist die Schreibweise des Dateiortes im Code eine andere als unter Windows. Der Code dazu lautet z.B.:
Arran hat geschrieben:
2. Via Extras --> etc. komme ich dann auf den Makro. Dort wird mit im rechten Kasten drei Dateien angezigt. Welches ist die richtige, die angeklickt werden muss?
Die erste und obere der drei Dateien.