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