leerer String wird zu "0"

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

Moderator: Moderatoren

clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

leerer String wird zu "0"

Beitrag von clag »

Hallo Kenner und Könner

in einer Benutzer definierten Funktion übergebe ich einen Zellen-String
in der Zelle steht =MEINEFUNKTION(A3;1)

Code: Alles auswählen

Function MeineFunktion(Text as String , Para as Integer)
MeineFunktion = Text 
end  Function
Dieses Funktion liefert mir einen Text "0" in der Zelle wenn A3 leer ist, wieso wird aus einer leeren Zelle "" ein Text "0" ?
Das erscheint mir unlogisch und störend, weil "leer" soll natürlich "leer" bleiben.

Wenn ich nun versuche das mit dieser Zeile auszubügeln

Code: Alles auswählen

if Text = "0" then Text =""  

tue ich ja etwas falsches, denn A3 könnte ja tatsächlich der Text "0" enthalten und der wird dann "platt" gemacht.
mit

Code: Alles auswählen

if isEmpty(Text) then Text ="" 
if isNull(Text) then Text =""
hatte ich keine Erfolg?

Wie kann ich das Problem lösen?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: leerer String wird zu "0"

Beitrag von Karolus »

Du kannst in einer UDF nicht unterscheiden weil bereits Calc leere Zellen und Zellen mit dem Inhalt 0 als 0 weiterreicht.
clag hat geschrieben:Wie kann ich das Problem lösen?
kümmere dich vor der Übergabe ums casten:

Code: Alles auswählen

=MEINEFUNKTION(WENN(ISTLEER(A3);"";A3);1) 
oder schreibe eine Addinfunktion, dort kannst in der .idl Beschreibung festlegen wie die übergebenen Argumente gecastet werden.
http://www.openoffice.org/api/docs/comm ... AddIn.html
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: leerer String wird zu "0"

Beitrag von clag »

Hallo Karolus,

ok, innerhalb einer normalen UDF bekommt man es dann wohl nicht in den Griff.
Aber mit deiner Formel Variante kann man zumindest schon mal das Problem umschiffen, wenn es einem bewusst ist.
Uhhh mit "ADDins" damit "tue ich mich noch sehr schwer".

Besten Dank für die Aufklärung und Unterstützung.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: leerer String wird zu "0"

Beitrag von clag »

Hallo Karolus,

jetzt wo du es so aufgezeigt hast, geht es auf die Art auch noch etwas resourcenschonender,
da ja der String aus der verknüpften Zelle verarbeitete werden soll,
braucht man die Funktion erst garnicht aufrufen wenn die verknüpfte Zelle leer ist

Code: Alles auswählen

=WENN(ISTLEER(A3);"";MEINEFUNKTION(A3);1))
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: leerer String wird zu "0"

Beitrag von Karolus »

clag hat geschrieben:Hallo Karolus,

jetzt wo du es so aufgezeigt hast, geht es auf die Art auch noch etwas resourcenschonender,
da ja der String aus der verknüpften Zelle verarbeitete werden soll,
braucht man die Funktion erst garnicht aufrufen wenn die verknüpfte Zelle leer ist

Code: Alles auswählen

=WENN(ISTLEER(A3);"";MEINEFUNKTION(A3);1))
woher sollte ich wissen das daß so gewünscht wird?
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: leerer String wird zu "0"

Beitrag von clag »

Hallo Karolus,
Karolus hat geschrieben:woher sollte ich wissen das daß so gewünscht wird?
fühlst du dich auf den Schlips getreten?

Also mein Nachsatz, meine Anmerkung war ganz sicher nicht dazu gedacht dieses zu bewirken,
sondern ein Ausdruck dessen, das ich mit der Lösung leben kann.

peace Y :D
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: leerer String wird zu "0"

Beitrag von Karolus »

Hallo
fühlst du dich auf den Schlips getreten?
Nein, ich wollte lediglich zum Ausdruck bringen, das aus dem Kontext nicht ersichtlich war, das im Falle einer leeren Zelle `MEINFUNKTION` gar nicht benötigt wird.
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: leerer String wird zu "0"

Beitrag von clag »

Hallo,

habe es jetzt doch noch einmal anders versucht und Tabelle und Zelladresse direkt als String übergeben

Code: Alles auswählen

=MEINEFUNKTION("Tabelle4"; "M"&Zeile(A2)); 1)  
und dann innerhalb der Funktion den Text aus der Zelle geholt mit

Code: Alles auswählen

FUNCTION MEINEFUNKTION(Tab$, Cell$ , Para% ) 
oCalc = ThisComponent
myText = oCalc.Sheets.getByName(Tab).getCellRangeByName(Cell).String
damit habe ich das Problem mit dem "0" String gelöst aber es braucht hiermit mehr als die doppelte Zeit
(doppelklick füllen und berechnen) 7500 Zeilen, vorher 20 Sekunden, hiermit 50 Sekunden.
Also keine wirkliche Verbesserung :(
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: leerer String wird zu "0"

Beitrag von Karolus »

Dafür das die Funktion selbst eigentlich garnichts tut, sind beide Zeiten völlig indiskutabel.

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: leerer String wird zu "0"

Beitrag von clag »

Hallo Karolus,

die beiden Varianten tun schon etwas (ich habe den Funktionsteil nur der Übersicht wegen weggelassen)
und zwar exakt das gleiche, nach dem Variante2 sich den String geholt hat, der in Variante1 übergeben wird.

Also das holen des String braucht länger wie die eigentliche Funktion war meine Erkenntnis die ich teilen wollte.
Wenn man es zurückrechnet braucht es ~ 5 mS um den String zu holen (auf meinem AMD 2x 1.8 MHz anno 2007) :wink:
~ 3 mS für die eigentliche Funktion.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: leerer String wird zu "0"

Beitrag von Karolus »

Eine ganz naiv geschriebene UDF:

Code: Alles auswählen

function my_join(a,b,c,d)
	my_join = join(array(a,b,c),d)
end function
braucht 3 bis 5 sec für 10000 Ausführungen

die "pyjoin"***-Addin-funktion ( die ähnlich der oben geposteten funktion arbeitet), benötigt für die gleiche Aufgabe <0,5sec
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Antworten