[gelöst]Finden von Variablen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Devil
**
Beiträge: 44
Registriert: Mi, 08.07.2015 10:05
Wohnort: Hölle

[gelöst]Finden von Variablen

Beitrag von Devil »

Ich habe ein OOo Writer Dokument, in welchem beliebig viele Variablen mit einer bestimmten Syntax verbaut sind (als beispiel "{<Test>}").
gibt es irgndeine möglichkeit herauszufinden welche Variablen im Text vorkommen? Denn dadurch liesse sich mein Makro vermutlich um einiges beschleunigen wenn ich nicht alle 400 möglichkeiten suchen und ersetzen muss.
Bei Fragen einfach melden. Vielen Dank im Vorraus

Devil
Zuletzt geändert von Devil am Do, 09.07.2015 16:47, insgesamt 1-mal geändert.
Höllische Grüße
Devil
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Finden von Variablen

Beitrag von komma4 »

Wie "stehen" die Variablen denn im Dokument?

Als Text - in der beschriebenen Syntax, oder als Feldbefehl eingefügt?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Devil
**
Beiträge: 44
Registriert: Mi, 08.07.2015 10:05
Wohnort: Hölle

Re: Finden von Variablen

Beitrag von Devil »

Sie stehen als Text im Dokument.
Ist es Evtl Sinnvoll diese z.B. als Feldbefehl/Variabel in den Text zu schreiben? wenn ja, dann muss ich allerdings noch wissen wie ich diese durch Text ersetze. Bisher nutze ich die Suchen_und_ersetzen funktion von Karolus: viewtopic.php?f=18&t=64515
Höllische Grüße
Devil
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Finden von Variablen

Beitrag von komma4 »

Naja - eine Variable hat den Vorteil nur *einmal* an *einer Stelle* geändert werden zu müssen.

Der folgende Code liefert ein Beispiel zum Zugriff... und eine Möglichkeit, mit einer Konfigurationsdatei Deine 400 Variablen (!) zu setzen. Musst jetzt "nur noch" die Datei einlesen und zeilenweise abarbeiten. :)

Code: Alles auswählen

Sub de66003
' 20150709
' Benutzer definiertes Feld:
' Einfügen>Feldbefehl>Andere...>Variablen>Benutzerfeld>[Format]Text

oDok = ThisComponent
oTFM = oDok.getTextFieldMasters()

' hier eine...
' Zeile aus Konfigurationsdatei
zeile = "var1:neuer Inhalt !"

aZeile = SPLIT(zeile, ":")
var = aZeile(0)
txt = aZeile(1)

' 
IF oFeld = oTFM.hasByName("com.sun.star.text.fieldmaster.user." & var) THEN 
   oFeld = oTFM.getByName("com.sun.star.text.FieldMaster.User." & var) 
   oFeld.Content = txt
END IF 

' ggfs. aktualisieren
oDok.getTextFields.refresh()
End Sub
Achtung! die unterschiedliche Schreibweise beim hasByName/getByName ist bei meiner aktuell genutzten / der getesteten Version (AOO 4.1.1) nötig, um die Variable zu finden und auf sie zuzugreifen. Weiss der Geier warum (wahrscheinlich ein Fehler)

Viel Spass damit
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Devil
**
Beiträge: 44
Registriert: Mi, 08.07.2015 10:05
Wohnort: Hölle

Re: Finden von Variablen

Beitrag von Devil »

Nur damit ich dich richtig verstehe...

Ich lade aus meiner Konfig-Datei eine Zeile und der Teil

Code: Alles auswählen

aZeile = SPLIT(zeile, ":")
Trennt dann die Zeile an dem ":" in 2 Teile und setzt diese in ein Array richtig???
Höllische Grüße
Devil
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Finden von Variablen

Beitrag von komma4 »

Richtig verstanden
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Devil
**
Beiträge: 44
Registriert: Mi, 08.07.2015 10:05
Wohnort: Hölle

Re: Finden von Variablen

Beitrag von Devil »

Ersteinmal vielen vielen Dank dafür. Aber noch eine Frage: besteht die Möglichkeit das Benutzerfeld komplett zu ersetzen? also quasi so, dass danach nur noch Text da steht und nicht "Benutzerfeld XY=BlaBlaBla" ?
Wenn nicht ist es auch nicht allzuschlimm, denn dann sollte das auch so gehen. ;)
Höllische Grüße
Devil
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Finden von Variablen

Beitrag von komma4 »

STRG+F9 schaltet um
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Devil
**
Beiträge: 44
Registriert: Mi, 08.07.2015 10:05
Wohnort: Hölle

Re: Finden von Variablen

Beitrag von Devil »

Danke Danke Danke ;)
Ich beschäftige mich um ehrlich zu sein noch nicht allzulange mit OOo...
Aber danke für deine Geduld mit mir :D
Höllische Grüße
Devil
Devil
**
Beiträge: 44
Registriert: Mi, 08.07.2015 10:05
Wohnort: Hölle

Re: Finden von Variablen

Beitrag von Devil »

Ich habe noch ein Problem gerade festgestellt und weiss nicht weiter :? Kann es sein, dass das Makro komplett abgebrochen wird, wenn die entsprechende Variable nicht vorhanden ist? Denn das wäre eher Kontraproduktiv, da ich ja in keinem Dokument alle 400 Variablen vergebe (Gott bewahre :shock: ). Das ist mir gerade beim Testen aufgefallen.

Beispiel:
Aufbau INI:

Dokument:Test.odt
User:ich
Name:Devil
Vorname:Satan

Vergebene Variablen im Dokument:
Dokument
User
Vorname

Nach durchlaufendes Makros:
Test.odt
ich
Vorname
Höllische Grüße
Devil
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Finden von Variablen

Beitrag von komma4 »

Entschuldige, hat sich ein Kopier-Fehler eingeschlichen... die Abfrage muss lauten:

Code: Alles auswählen

IF oTFM.hasByName("com.sun.star.text.fieldmaster.User." & var) THEN 
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Devil
**
Beiträge: 44
Registriert: Mi, 08.07.2015 10:05
Wohnort: Hölle

Re: Finden von Variablen

Beitrag von Devil »

Weiteres Problem: Ich habe einen code, der liefert mir eine Zeile der Konfig Datei nach der anderen. Das funktioniert auch (habe mit mit "Print" die einzelnen Werte ausgeben lassen.)
An der stelle des "Print" befehls die Prozedur zum ersetzen aufgerufen, damit ich jedes Feld durchlaufe. Nun mein Problem: wenn die Prozedur da aufgerufen wird wird der komplette code nur einmal durchlaufen...

Hier der ausschnitt aus dem Code:

Code: Alles auswählen

  
Sub Main
  
  ReadInicomplete("C:\Users\Devil\Datei.INI", "DatenAnTextverarbeitung", "")
  Print "Fertig"

End Sub

function readinicomplete( inifile as string, bereich as string, default as string) as string
   Dim inBereich as boolean
   Dim aFile as String
   Dim #inumber
   Dim INIzeile as String 
   Dim Start as String
   Dim parameter as String
   Dim breich as String
   inBereich=false
   readinicomplete=default
   breich=bereich
   Bereich="["+bereich+"]"
   #iNumber = Freefile
   aFile = inifile
   on error goto ende
   if FileExists(inifile) then
   Open aFile For Input As #iNumber
   Print eof(#iNumber)
   While not eof(#iNumber)

    
   Line Input #iNumber, INIZeile
   if INIzeile=Bereich then inBereich=true   
   if inBereich then
     ipos=InStr(INIZeile,"=")
      if ipos>0 then
   Print INIZeile
'################################################################
   Variablen(INIZeile)			'Wenn ich diese Zeile Weg lasse, dann funktioniert der Code einwandfrei.
'################################################################
      end if
    end if
    wend
    Close #iNumber
   end if
  exit function
  ende: 
end function

Sub Variablen(Datazeile as String)
'Prozedur von "komma4" (http://de.openoffice.info/viewtopic.php?f=18&t=66003&p=257020#p257020)
oDok = ThisComponent
oTFM = oDok.getTextFieldMasters()
' hier eine...
' Zeile aus Konfigurationsdatei

aZeile = SPLIT(Datazeile, "=")
var = aZeile(0)
txt = aZeile(1)
IF oTFM.hasByName("com.sun.star.text.fieldmaster.User." & var) THEN 
   oFeld = oTFM.getByName("com.sun.star.text.FieldMaster.User." & var)
   oFeld.Content = txt
END IF

' ggfs. aktualisieren
  Dok.getTextFields.refresh()

End Sub
Und das dir mal ein Fehler passiert ist doch nicht schlimm... Da merkt man wieder das alle nur menschlich sind und Fehler machen dürfen :D ausserdem hast du bereits so viel schon geholfen :D
Höllische Grüße
Devil
Devil
**
Beiträge: 44
Registriert: Mi, 08.07.2015 10:05
Wohnort: Hölle

Re: Finden von Variablen

Beitrag von Devil »

Ok Sorry hat sich erledigt... hab das kleine o in der Refresh Zeile übersehen... das muss heissen oDok und nicht Dok...
Trotzdem danke an alle die Gegrübelt haben :D Jetzt funktioniert es :D
Höllische Grüße
Devil
Antworten