Autor Thema: String rückgabewert  (Gelesen 3631 mal)

samWare

  • Gast
String rückgabewert
« am: 13.11.09 - 11:38:52 »
Hallo Leute,

kann ich als String Rückgabewert ein klareres nichts als "" zurückgeben? Ich würde das nämlich noch gern sauber abfragen können (bspl: IsNothing usw..). Den Weg über eine ReferenzVariable werde ich nicht gehen :) Das geht doch bestimmt gleich über den Rückgabewert oder?

Danke schonmal im Vorraus..

..mfg Samuel

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: String rückgabewert
« Antwort #1 am: 13.11.09 - 12:01:53 »
Hallo,

Ich wuesste keine andere Moeglichkeit fuer die Pruefung.
Alle anderen Pruefunden, die mir spontan einfallen beziehen sich entweder auf Objekte oder auf einen Variant-Datentyp.


Andreas

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: String rückgabewert
« Antwort #2 am: 13.11.09 - 15:28:04 »
Vielleicht noch eine Frage von mir angehängt, die mir noch unklar ist:

Was gebe ich denn einem Zahlenfeld korrekterweise für einen Rückgabewert für "nichts"?

Thomas von der IuK

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: String rückgabewert
« Antwort #3 am: 13.11.09 - 15:30:52 »
Sowohl Zahlen als auch Strings kennen nicht den Zustand "nichts" - ansonsten wären es keine Zahlen oder Strings mehr.

Lohnenswert wären m.E. ein paar Erläuterungen, wozu das ganze überhaupt gut sein soll. Ich befürchte, da steckt ein (Programm-)logisches Problem dahinter, welches es in Wirklichkeit zu lösen gilt.

Bernhard

Offline heini_schwammerl

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 697
  • Geschlecht: Männlich
Re: String rückgabewert
« Antwort #4 am: 14.11.09 - 23:08:05 »
Wenn es denn wirklich sein muss könntest Du auch einen Rückgabewert / Rückgabewerte reservieren die z.B. dem Wert Nothing entspechen.
Ab und zu gebe ich fest definierte Stringwerte zurück welche man dann anschließend auswerten kann. Aber in der Tat lässt Deine Frage ein paar Fragen offen (was für ein Satz).

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: String rückgabewert
« Antwort #5 am: 16.11.09 - 11:39:57 »
Hallo Bernhard und Heini,

programmtechnische Probleme stehen derzeit eigentlich dahingehend nicht an, nur hatte mir Bernhard letzthin mal zu denken gegeben, dass es nicht ganz korrekt ist, wenn ich z.B. ein Zahlenfeld mit dem Wert @setfield("Zahlenwert";"") auf "Nichts" stelle.

Es gibt ja Fälle, in denen ich ein Zahlenfeld halt nicht mit 0 (zero) belegen möchte, weil dies ja auch schon eine Aussage darstellen kann, sondern halt auf "Nichts" zurücksetzen möchte.

Einfach den Zustand, den das Feld hatte, bevor was eingegeben wurde.

Thomas von der IuK

Offline heini_schwammerl

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 697
  • Geschlecht: Männlich
Re: String rückgabewert
« Antwort #6 am: 16.11.09 - 13:08:26 »
Evtl. greift hier der "Nachteil" der Formelsprache die in diesem Fall nicht zwischen Zahl und String unterscheidet.
Streng genommen würde ich dazu raten Zahlenfelder immer mit 0 zu initialisieren und nicht mit "".
Wenn Du z.B. in Lotusscript versuchst eine Zahl mit einem "" zu löschen wirst du eine Fehlermeldung erhalten oder ein hartes ReplaceItemValue verwandelt Dein numerisches Feld in ein Stringfeld.
Gruß
Henning

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: String rückgabewert
« Antwort #7 am: 17.11.09 - 12:00:58 »
Es ist halt so, dass die Aussage "0" was anderes ist als die Aussage "nix eingegeben".

Mir fällt jetzt grad kein furchtbar kompliziertes Beispiel ein, aber angenommen eine Datenbank in der ich Spendengelder eintrage. Da gibts halt welche die Spenden nichts (0 Euro) und welche die garnicht antworten. (Kein Eintrag)

Und wenn ich dann nach denen suche, dann sind das halt nicht die mit 0 Euro, sondern die wo noch nix eingetragen ist. (Klar, geht auch anders)

Geht das mit @nothing?











Thomas von der IuK

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: String rückgabewert
« Antwort #8 am: 17.11.09 - 12:14:26 »
Zitat
Geht das mit @nothing?
Ich wuerde ein klaes Nein sagen.

Schon mal die Hilfe zu @Nothing bemueht?


Andreas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: String rückgabewert
« Antwort #9 am: 17.11.09 - 12:19:58 »
@Nothing geht nicht. Es gibt auch sonst keinen Ausweg, weil Deine Logik nicht stimmt, Thomas. Du bringst Datentypen und Inhalte (und deren Bedeutung) durcheinander.

Wenn Du zwischen Preis = 0 (weil kostenlos) und Preis = 0 (weil noch nicht festgelegt) unterscheiden willst, musst Du zwei Informationen verwalten und brauchst dazu - völlig unabhängig von Notes - eine weitere Speicher-/Erfassungsstelle.

Bernhard

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: String rückgabewert
« Antwort #10 am: 17.11.09 - 12:35:00 »
Das ist natürlich auch möglich und ja wohl die einzige Lösung.

Was mir halt nicht klar ist, vielleicht steh ich ja aufm Schlauch:

Mit @setfield(Textfeld;"") setze ich ein Textfeld auf Nix, oder? Also kein Leerzeichen, sondern einfach ... nix, kein anderer Stringwert. Oder ist "" auch ein Stringwert?

Warum geht das mit einem Zahlenfeld nicht, wenn ich da keinen Zahlenwert drin haben möchte?

Wenn ich @Setfield(Zahlenfeld;"") eingebe, dann wird aus dem Zahlenfeldinhalt ja ein String.

Mich täts jetzt einfach mal interessieren, wie die Profis hier im Forum ein Zahlenfeld, in dem z.B. ein falscher Wert drin steht, wieder auf nix zurückstellen, und nicht auf 0.
Thomas von der IuK

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: String rückgabewert
« Antwort #11 am: 17.11.09 - 12:38:13 »
"" ist natürlich auch ein String und als solcher im Speicher gekennzeichnet (mit Länge = 0).

Und ein zahlenfeld ist nur dann ein Zahlenfeld, wenn darin auch eine Zahl steht. Dass es Notes zulässt, dass man im Backend den Datentyp wieder ändern kann als auch bei nicht vorhandenem Item einen Leerstring zurückgibt, steht auf einem ganz anderen Blatt und hat mit dieser Fragestellung überhaupt nichts zu tun (ausser, dass es verwirren kann).

Bernhard

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: String rückgabewert
« Antwort #12 am: 17.11.09 - 12:49:57 »
Es gibt eine Variante mit der man, zugegebenermaßen unsicher, aber möglich dieses Dilemma umgehen könnte.

1. Man kann ein Feld mit @isavailable auf vorhandensein prüfen.
und
2. Ein Feld muss ja im Gegensatz zu Relationalen Sprachen NICHT zwingend vorhanden sein.
außerdem kann man
3. mit @deleteField ein Feld auch löschen

Allerdings erfordert diese Kombination ein hohes Maß an Disziplin beim Entwickeln der Anwendung. Eine Routine die das Feld einfach nicht löscht oder sich selst überlässt darf es da nicht geben.

Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: String rückgabewert
« Antwort #13 am: 17.11.09 - 13:50:01 »
Na das ist ja nun eine Auskunft mit der ich was anfangen kann  ;)

@deletfield hört sich doch mal gut an, wenn ich die Hilfe dazu anschaue, dann scheint das ja genau das zu sein was ich brauche (i.V. mit @isavailable)

Danke für die Geduld mit mir und meinen Fragen
Thomas von der IuK

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: String rückgabewert
« Antwort #14 am: 17.11.09 - 15:00:13 »
Davon kann ich aus den bereits hier im Thread genannten Gründen nur abraten: Es ist unsauber und unsicher.
Und ob Du Dich an diesen Stunt bei einer anstehenden Erweiterung in einem Jahr noch erinnerst? Von einem Kollegen, der da weiter machen soll, mal ganz angesehen.

Bernhard

Offline heini_schwammerl

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 697
  • Geschlecht: Männlich
Re: String rückgabewert
« Antwort #15 am: 17.11.09 - 20:50:10 »
Also ehrlich gesagt sehe ich keinem Unterschied zwischen jemandem der 0 Euro spendet und jemandem der nichts spendet.
Aber egal. Wenn Du das unbedingt willst (und einen Vorschlag hatte ich Dir ja bereits genannt) dann verwende evtl. generell einen String und prüfe z.B. ob der dort enthaltene Wert numerisch ist.

myString$ = doc.getItemValue("FieldName")(0)

If isNumeric(myString$) Then
  MsgBox("Ich bin nur eine Nummer")
else
  MsgBox("Ich bin ein dicker, fetter String")
End If

Allerdings muss man dann alle Zahlenwerte für Berechnungen wandeln (und vorher prüfen ob der Wert in eine Zahl gewandelt werden kann).
In Script z.B. mit
If isNumeric(myString$) Then
  myNumber = CCur(myValue$) ' für Geldbeträge um bei den Spenden zu bleiben.
End If
Zugegeben ich würde mich ärgern wenn ich so einen Code zu Gesicht bekommen würde aber ich bin auch ein Admin ;-).

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: String rückgabewert
« Antwort #16 am: 17.11.09 - 22:33:02 »
Also ehrlich gesagt sehe ich keinem Unterschied zwischen jemandem der 0 Euro spendet und jemandem der nichts spendet.
Aus Sicht der Finanzbuchhaltung stimmt das. Für den Spendenwerber ist das aber anders: 0 EUR kann heissen: Der will nicht spenden. Es kann aber auch heissen: Der wurde noch gar nicht gefragt. Oder: Es gibt noch keine Rückmeldung. Oder: Er hat in diesem Jahr noch nicht gespendet.
Und das ist eben eine völlig andersartige Information. Thomas sollte dies (endlich) verinnerlichen und programmatisch umsetzen.

Zugegeben ich würde mich ärgern wenn ich so einen Code zu Gesicht bekommen würde aber ich bin auch ein Admin ;-).
Heiner, was meinst Du, was ein (richtiger, nicht nur nomineller) Entwickler hier empfindet? Ich habe gerade die undankbare Aufgabe, eine Anwendung, die vor solchem Mist strotzt, gerade zu ziehen. Undankbar, weil man den Budgetverantwortlichen erklären muss, warum sie in grösseren Teilen zum zweiten Mal bezahlen müssen. Dankbar allerdings auch in Bezug auf die Fachabteilungen, deren Daten auf einmal und ohne Verrenkungen ihrerseits zum Monatsende stimmen und sie sogar am letzten Freitag des Monats pünktlich zu ihren Lieben können.

Bernhard

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: String rückgabewert
« Antwort #17 am: 23.11.09 - 08:07:19 »
Tja,
und das ist der Grund, warum Thomas immer mal wieder nachhakt und ihm unklare Dinge nachfragt. Damit er solche Sachen (endlich) Dank der Hilfe von leidgeprüften Profis verinnernlicht und programmatisch umsetzt. Damit es bei ihm auch einigermassen klappt und er Freitags rechtzeitig heim kann.  ;)

Wie Bernhard schon richtig erläuterte, muss es für den Spendenwerber ersichtlich sein, ob einer nix spendet, oder nur noch nicht geantwortet hat, und daher der Wert noch auf Null steht. Ich hab aber kapiert, dass ich diese Abfrage halt besser nicht über das Zahlenfeld laufen lassen (@if zahlenwert ="" ...o.ä.) sondern ein anderes Flag setze, das halt z.B. gelöscht wird, sobald ein Zahlenwert, der ruhig auch Null ist, eingetragen wird.

Aber bitte nun nicht weiter vertiefen, es wahr ja letztlich nur eine Grundsatzfrage, die ich mit diesem Beispiel verdeutlichen wollte.
Thomas von der IuK

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz