Parameter direkt übergeben ohne diese neu aufzuzählen ...
Verfasst: Di, 23. Mär 2021 16:01
Hallo,
ich habe Beispielcode mit #command um ? oder ?? zu nutzen um Daten in XLSX Blätter zu schreiben von Osvaldo.
Bei der Einarbeitung in meine HBLibXL fiel mir auf, dass beide Methoden im Prinzip gleich sind, nur bei Q wird noch der Zeilenvorschub eingebaut.
Warum hat Osvaldo das so geschrieben, ich vermute dass er - wie ich auch - nicht in der Lage war die Parameter, welche an Q übergeben wurden einfach an QQ weiter zu reichen ohne sie neu zu verpacken ...
Hat jemand eine Idee ?
so bräuchte ich das nur in Methode QQ ablegen und spare mir 2 mal fast den gleichen Code in 2 Methoden,
aber mir fällt kein Weg ein, die Parameter einfach durchzureichen ohne alles in Vars umzuladen etc.
Natürlich könnte ich die Schnittstelle ändern, aber dann würde ich seinen Code brechen, das will ich nicht.
ich habe Beispielcode mit #command um ? oder ?? zu nutzen um Daten in XLSX Blätter zu schreiben von Osvaldo.
Bei der Einarbeitung in meine HBLibXL fiel mir auf, dass beide Methoden im Prinzip gleich sind, nur bei Q wird noch der Zeilenvorschub eingebaut.
Code: Alles auswählen
// Q, QQ etc. von/from Osvaldo Ramírez
// ? xxxx => oSheet:Q(...xxxx...)
#command ? [<list,...>] => oSheet:Q( <list> )
#command ?? [<list,...>] => oSheet:QQ( <list> )
Code: Alles auswählen
METHOD xlSheet:QQ()
LOCAL cText
LOCAL i,nParams
LOCAL xValue,cType
LOCAL aValues := {}
******* how many params?
nParams := PCount()
IF nParams > 1
FOR i := 1 TO nParams
aadd( aValues , { PValue(i) , valtype( PValue(i) )})
NEXT
ELSE
if nParams = 1
xValue := PValue(1)
// Vamos a ver si la separacion es por chr(19)
do while ! empty( xValue )
if at( chr(9) , xValue ) > 0
aadd( aValues , { substr( xValue , 1 , at( chr(9) , xValue )-1) , 'C' })
xValue := substr( xValue , at( chr(9) , xValue )+1)
else
aadd( aValues , { xValue , 'C' })
exit
endif
enddo
endif
ENDIF
FOR i := 1 to len( aValues )
IF aValues[i][2] == "C"
::SheetWriteStr( ::qRow , ::qCol , aValues[i][1] )
ELSEIF aValues[i][2] == "D"
::SheetWriteDate( ::qRow , ::qCol ,aValues[i][1] )
ELSEIF aValues[i][2] == "N"
::SheetWriteNum( ::qRow , ::qCol , aValues[i][1])
ELSEIF aValues[i][2] == "L"
::SheetWriteStr( ::qRow , ::qCol , var2char( aValues[i][1] ))
ENDIF
::qCol ++
NEXT
RETURN NIL
Code: Alles auswählen
METHOD xlSheet:Q()
LOCAL cText
LOCAL i,nParams
LOCAL xValue,cType
LOCAL aValues := {}
******* how many params?
nParams := PCount()
IF nParams > 1
FOR i := 1 TO nParams
aadd( aValues , { PValue(i) , valtype( PValue(i) )})
NEXT
ELSE
if nParams = 1
xValue := PValue(1)
// Vamos a ver si la separacion es por chr(19)
do while ! empty( xValue )
if at( chr(9) , xValue ) > 0
aadd( aValues , { substr( xValue , 1 , at( chr(9) , xValue )-1) , 'C' })
xValue := substr( xValue , at( chr(9) , xValue )+1)
else
aadd( aValues , { xValue , 'C' })
exit
endif
enddo
endif
ENDIF
FOR i := 1 to len( aValues )
IF aValues[i][2] == "C"
::SheetWriteStr( ::qRow , ::qCol , aValues[i][1] )
ELSEIF aValues[i][2] == "D"
::SheetWriteDate( ::qRow , ::qCol ,aValues[i][1])
ELSEIF aValues[i][2] == "N"
::SheetWriteNum( ::qRow , ::qCol , aValues[i][1])
ELSEIF aValues[i][2] == "L"
::SheetWriteStr( ::qRow , ::qCol , var2char( aValues[i][1] ))
ENDIF
::qCol ++
NEXT
*** HB *** nur das ist unterschiedlich
::qCol := 0
::qRow ++
*** HB ***
RETURN NIL
Hat jemand eine Idee ?
Code: Alles auswählen
? "Unbestimmte Anzahl","von","Paramtern sind das Problem " , nZahl ...
=>
o:Q() // hier kommen die von COMMAND übergebenen ? Parameter an ...
...
method x:Q()
// Parameter ermitteln und weitergeben an QQ ...
::QQ() --- aber wie wenn QQ auch direkt von Command aufgerufen werden kann ohne alles wieder zu verpacken ????
*** HB *** nur das ist unterschiedlich
::qCol := 0
::qRow ++
*** HB ***
return NIL
aber mir fällt kein Weg ein, die Parameter einfach durchzureichen ohne alles in Vars umzuladen etc.
Natürlich könnte ich die Schnittstelle ändern, aber dann würde ich seinen Code brechen, das will ich nicht.