[gelöst] Weshalb geht das nicht mit einer Variablen?

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [gelöst] Weshalb geht das nicht mit einer Variablen?

Re: Weshalb geht das nicht mit einer Variablen?

von wega » Fr, 17.09.2010 17:57

Hallo DPunch,

nochmals Danke für Deine Antworten.
Sie zeigen genau den richtigen Weg, schon Deine erste Antwort.

Ich habe die Variable myString als Private deklariert und schon funktioniert alles wie gewünscht.

Danke, ohne deine Hilfe hätte ich noch lang gesucht.

mit freundlichem Gruß
Werner

Re: Weshalb geht das nicht mit einer Variablen?

von DPunch » Fr, 17.09.2010 17:45

Aloha

Die Fehlermeldung bedeutet, dass Du der Tools-Funktion "DirectoryNameoutofPath" einen Leerstring übergibst, sprich in Deiner Variable "Liste" stehen nicht nur Filenamen, sondern auch Leerstrings.

Code: Alles auswählen

   for Zaehler = 0 to (erg - 1)
   VerzeichnisTemp = ConvertFromURL(Liste(Zaehler))
   VerzeichnisNeu = DirectoryNameoutofPath(VerzeichnisTemp,"\") '<----------------------------

Re: Weshalb geht das nicht mit einer Variablen?

von wega » Fr, 17.09.2010 17:34

Hallo DPunch,

erst mal Danke für Deine Antwort.

Die Fehlermeldung kommt aus den Systemroutinen.

Ich habe mal ein Bildschirmfoto beigelegt. An den unten abgebildeten Reitern siehst Du, wo der Fehler auftritt.



mit freundlichem Gruß
Werner
Dateianhänge
Index_auszerhalb_des_Bereiches.jpg
Index_auszerhalb_des_Bereiches.jpg (59.96 KiB) 755 mal betrachtet

Re: Weshalb geht das nicht mit einer Variablen?

von DPunch » Fr, 17.09.2010 16:52

Aloha
wega hat geschrieben:Wenn ich den Suchbegriff in die Variable "myString" packe, ob mit Anfüngrungszeichen vorne und hinten, also
chr(34) & myString & chr(34), oder ohne, bricht die Funktion mit Out of Index Range ab.
An welcher Stelle bricht er mit "Index out of range" ab?
Der von Dir markierte Codeteil enthält eigentlich nichts, was eine solche Fehlermeldung begründen könnte.

Vom ersten Blick auf Deinen Code her fällt mir jedenfalls nur eines auf:
Hast Du die Variable "myString" global oder zumindest modulweit deklariert?
Wenn nein, dann tu dies, sonst kann die Variable logischerweise nicht in der Funktion "getdirs" bekannt sein.
Wenn ja, dann nimm die erneute Deklaration aus der Prozedur "Katalog" raus, sonst verschwindet die globale Variable "myString" und es gibt ab dem Zeitpunkt nur noch eine in der Prozedur "Katalog" gültige Variable "myString".

Code: Alles auswählen

Sub Katalog
'  REM Rahmenbedingungen
   GlobalScope.BasicLibraries.LoadLibrary("Tools")
   
   Dim oDoc , oForm , CtrlTextBox as Object
   Dim VerzeichnisAlt,VerzeichnisNeu,VerzeichnisTemp,MyText as string
   Dim Laufwerk, myString as String '<--------------------------------

[gelöst] Weshalb geht das nicht mit einer Variablen?

von wega » Fr, 17.09.2010 09:37

Hallo zusammen,

ich möchte mir aus einem Writerdokument heraus einen Katalog erstellen.

Im Writerdokument gebe ich Startvariablen wie:
Laufwerk und Suchbegriff vor. (Hierzu den Bildanhang)

Mit einem Makro übernehme ich die Variablen ordnungsgemäß. Ich kann diese auch sichtbar machen durch
msgbox ....

Wenn ich den Suchbegriff in die Variable "myString" packe, ob mit Anfüngrungszeichen vorne und hinten, also
chr(34) & myString & chr(34), oder ohne, bricht die Funktion mit Out of Index Range ab.

Gebe ich aber den Suchbegriff von Hand ein, z.B. als ".ini", dann funktioniert das Ganze und ich bekomme meinen
Katalog.

Woran kann das liegen?

Ich lege meinen Code hier mal bei.

Code: Alles auswählen

Sub Katalog
'  REM Rahmenbedingungen
	GlobalScope.BasicLibraries.LoadLibrary("Tools")
	
	Dim oDoc , oForm , CtrlTextBox as Object
	Dim VerzeichnisAlt,VerzeichnisNeu,VerzeichnisTemp,MyText as string
	Dim Laufwerk, myString as String
	oDoc = thisComponent
	oform=odoc.drawpage.forms.getbyindex(0)
	CtrlTextBox = oForm.getByName("Textfeld1")
	Laufwerk = CtrlTextBox.text
	CtrlTextBox = oForm.getByName("Textfeld2")
	myString = CtrlTextBox.text ' <-- Textfelder werden richtig ausgelesen !!
	'Jetzt geht es zu auslesen

	erg=getDirs(liste(),0,Laufwerk)
	VerzeichnisAlt = ""
	
	REM Leeres Dokument erzeugen
	leerDoku
	
	for Zaehler = 0 to (erg - 1)
	VerzeichnisTemp = ConvertFromURL(Liste(Zaehler))
	VerzeichnisNeu = DirectoryNameoutofPath(VerzeichnisTemp,"\")
		If VerzeichnisNeu = VerzeichnisAlt then
			oDocument.getText().insertString(oViewC, chr(13) & (Liste(Zaehler))& chr(13), False)
		else 
			oViewC = oDocument.getCurrentController().getViewCursor()
			oDocument.getText().insertString(oViewC, chr(13) & (Liste(Zaehler))& chr(13), False)
		end if
		
		VerzeichnisAlt = VerzeichnisNeu
	next Zaehler
	msgbox "fertig"
end sub


Sub leerDoku
	Dim mArgs()
	oDocument = StarDesktop.loadComponentFromURL ("private:factory/swriter","_blank",0,mArgs())
	oDocument.title = "Katalog"
	REM Neues Dokument geöffnet
End Sub


function getdirs( liste(),z, folder) as integer

	sFolderUrl = ConvertToUrl( Folder )
	oSimpleFileAccess = createUnoService( "com.sun.star.ucb.SimpleFileAccess" )
    on error resume next
	aFolders = oSimpleFileAccess.getFolderContents( sFolderUrl,true )

	For i = LBound( aFolders ) To UBound( aFolders )-1
		sFile = aFolders( i )
		Endung = lcase(right(sFile,4))
		If oSimpleFileAccess.isFolder( sFile ) Then
			getdirs( liste(),z, sFile)
		Else
			
			'if Ucase(Endung) = Ucase(chr(34) & myString & chr(34)) then <-- funktioiert nicht !!
			'if Ucase(Endung) = Ucase(myString) then <-- funktioiert nicht !!
			if Ucase(Endung) = Ucase(".ini") then '<-- funktioiert !!
				liste(z) = sFile
				z = z + 1
			end if
		end if
	next i
	getdirs = z
	
end function
mit Gruß
Werner
Dateianhänge
Katalog-01.jpg
Katalog-01.jpg (5.41 KiB) 787 mal betrachtet

Nach oben