BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

makro verbessern

Alles zur Programmierung im LibreOffice.
Antworten
albert1534
Beiträge: 202
Registriert: Di 1. Mär 2016, 09:58

makro verbessern

Beitrag von albert1534 » Mo 26. Aug 2019, 20:46

Zyklade hat ein Makro für das Auslesen der Stichworte erstellt.
Die werden in eine sdi ausgegeben. Diese hat bei mir 807 Zeilen.
Dafür hätte ich gerne drei Ergänzungen.
1. Gibt es in einem längeren Stichwort Kommas, dann wird nach dem, der Text in die folgende Spalte eingetragen.
2. Derzeit wird in die Spalte A Überschrift #Suchbegriff nur ein Wort eingetragen.
Dort sollte die zugehörige Seitenzahl eingetragen werden.
3. Es kommt ziemlich häufig vor, dass das gleiche Stichwort mehrere Seitenzahlen hat.
Jede sollte in eine eigene Zeile eingetragen werden.
Wer sagt mir, wie ich diese 3 Punkte einfügen kann?
Gruß Albert
Hier der Code:

Code: Alles auswählen

REM  *****  BASIC  *****

Sub AlleStichworteInKonkordanzSDI
  DIM LV				'Laufwerk und Verzeichnis (Windows)
  DIM Datei				'Zieldatei = Konkordanzdatei ohne Endung
  DIM FileName			'Laufwerk & Verzeichnis & Datei
  DIM n					'File-Nummer
  DIM m					'File-Nummer
  DIM TrS as string		'Trennzeichen für eine Datei vom Typ CSV, z.B. Konkordanz.sdi
  DIM F0 as string		'Füllzeichen 0
  DIM F1 as string		'Füllzeichen 1
  DIM Stich				'ermitteltes Stichwort
  DIM Z1				'erste Zeile der Konkordanzdatei
  DIM Temp as string	'Hilfszeile
  DIM i as integer		'Laufvariable
  Dim Eintrag
  Dim Schluessel1
  Dim Schluessel2
  Dim GrossKlein
  Dim GanzesWort
  Dim sReturn As String     'Rückgabewert
  Dim sMsg As String        'Eingabeaufforderung
  Dim sTitle As String      'Fenstertitel
  Dim sDefault As String    'Standardtext
  Dim nXPos As Integer      'Twips vom linken Rand
  Dim nYPos As Integer      'Twips vom oberen Rand
  LV = "c:\users\Peter\Gedichte\"
  nXPos = 1440 * 2          'Zwei Zoll Abstand vom linken Fensterrand
  nYPos = 1440 * 4          'Vier Zoll Abstand vom oberen Fensterrand
  sMsg  = "Bitte korrigieren Sie Laufwerk und Verzeichnis:"
  sTitle = "LaufwerkVerzeichnis"
  sDefault = LV
  sReturn = InputBox(sMsg, sTitle, sDefault, nXPos, nYPos)
  If sReturn <> "" Then
    REM Gibt den eingegebenen Text aus, eingeschlossen in doppelten Anführungszeichen
    Print "Sie haben """; sReturn; """ eingegeben."
  Else
    Print "Sie haben entweder einen leeren String eingegeben " & _
          "oder die Schaltfläche Abbrechen gewählt."
  End If
  LV = sReturn
  Datei = "Konkordanzdatei"
  nXPos = 1440 * 2          'Zwei Zoll Abstand vom linken Fensterrand
  nYPos = 1440 * 4          'Vier Zoll Abstand vom oberen Fensterrand
  sMsg  = "Bitte korrigieren Sie den Dateinamen:"
  sTitle = "Datei"
  sDefault = Datei
  sReturn = InputBox(sMsg, sTitle, sDefault, nXPos, nYPos)
  If sReturn <> "" Then
    REM Gibt den eingegebenen Text aus, eingeschlossen in doppelten Anführungszeichen
    Print "Sie haben """; sReturn; """ eingegeben."
  Else
    Print "Sie haben entweder einen leeren String eingegeben " & _
          "oder die Schaltfläche Abbrechen gewählt."
  End If
  FileName = LV & Datei & ".sdi"
  Print "Die Konkordanzdatei befindet sich unter: ", FileName
  n = FreeFile()                                     'Nächste freie Dateinummer
  Open FileName For Output Access Read Write As #n   'Geöffnet mit Lese-/Schreibzugriff
  REM	Stichworte auslesen und Zwischenspeichern
  seek #n, 1
  Z1 = "#Suchbegriff;Registereintrag;1. Schlüssel;2. Schlüssel;Groß/Klein;ganzes Wort"
  TrS = ";"
  Tr0 = "0"
  Tr1 = "1"
  indexes = ThisComponent.getDocumentIndexes()
  for i=0 to indexes.count-1
    index = indexes(i)
    if index.supportsService("com.sun.star.text.DocumentIndex") then
      marks = index.DocumentIndexMarks
      for j=lBound(marks()) to uBound(marks())
        Stich=marks(j).getAnchor.getString()
		Eintrag = marks(j).AlternativeText()
		Schluessel1  =  marks(j).PrimaryKey()
        Schluessel2  =  marks(j).SecondaryKey()
        GrossKlein   = 1
        GanzesWort   = 0
	    print #n,  Stich ; TrS ; Eintrag ; TrS ; Schluessel1 ; TrS ; Schluessel2 ; TrS ; GrossKlein ; TrS ; GanzesWort
	  next
    End If
  next
  REM Maximale Zeilenzahl = Stichworte Ermitteln 
  seek #n, 1
  REM Maximale Zeilenzahl Ermitteln 
  i=0
  do until eof(#n)
  	i=i+1
  	line input #n, Temp
  loop
  maxi = i
  REM Unsortierte Stichwortzeilen in array einlesen
  seek #1, 1
  i=0
  DIM Sang(maxi)
  do until eof(#n)
  	i=i+1
  	line input #n, Sang(i)
  loop
  REM  Stichworte Sortieren
  Dim iOuter As Integer, iInner As Integer
  For iOuter = maxi To 1 Step -1
    For iInner = 1 To iOuter - 1
      If Sang(iInner) > Sang(iInner + 1) Then
        Temp = Sang(iInner)
        Sang(iInner) = Sang(iInner + 1)
        Sang(iInner + 1) = Temp
        bSomethingChanged  = True
      End If
    Next iInner
  Next iOuter
  close #n
  m = FreeFile()
  Open FileName For Output As #m    'Konkordanzdatei mit Schreibzugriff erneut geöffnet
  seek #m, 1
  print #m, Z1						'1. Zeile der Konkrodanzdatei mit Strukturangaben geschrieben
  for i=1 to maxi
    if i > 1 then
    	if Sang(i) <> Temp then		'gleichartige Stichworte werden nur einmal geschrieben
    		Temp = Sang(i)
    		print #m, Temp
    	end if
    else 
    	Temp = Sang(i)
    	print #m, Temp
    end if
  next
End Sub



nikki
Beiträge: 1026
Registriert: Sa 18. Mär 2017, 22:25
Kontaktdaten:

Re: makro verbessern

Beitrag von nikki » Di 27. Aug 2019, 12:35

albert1534 hat geschrieben:
Mo 26. Aug 2019, 20:46
Zyklade hat ein Makro für das Auslesen der Stichworte erstellt.
Diese Forumsteilnehmer ist hier unbekannt. Ich kenne nur Pit Zyclade.
Gruß

---------------------------------------------------
Win.10 Prof. 64-bit, LO 6.3.4 (x64), LO 6.2.6 Portable, AOO 4.1.7

albert1534
Beiträge: 202
Registriert: Di 1. Mär 2016, 09:58

Re: makro verbessern

Beitrag von albert1534 » Di 27. Aug 2019, 14:33

Entschuldigung,
leider habe ich mich vertippt
Pit Zyclade ist natürlich ok.
Albert
Dennoch wäre es schön, wenn mir jemand helfen würde.
Danke

nikki
Beiträge: 1026
Registriert: Sa 18. Mär 2017, 22:25
Kontaktdaten:

Re: makro verbessern

Beitrag von nikki » Mi 28. Aug 2019, 11:08

Wenn der Code von PIt stammt, weshalb sendest du ihm dann nicht einfach eine PN-Nachricht ?
Gruß

---------------------------------------------------
Win.10 Prof. 64-bit, LO 6.3.4 (x64), LO 6.2.6 Portable, AOO 4.1.7

albert1534
Beiträge: 202
Registriert: Di 1. Mär 2016, 09:58

Re: makro verbessern

Beitrag von albert1534 » Mi 28. Aug 2019, 12:48

Hallo Nikki
weil der sich zurzeit nicht meldet.
Und ich habe es eilig.
Ich werde es gleich noch mal versuchen
ALBERT

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten