Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: cebolina am 17.12.13 - 09:49:17

Titel: führende "0" aus Textfeld entfernen
Beitrag von: cebolina am 17.12.13 - 09:49:17
Hallo zusammen,

ich habe ein bearbeitbares Textfeld.
Wie kann ich über die Eingabeumsetzung (also mit Formel) führende "0" entfernen?
Bsp.:
Eingabe = "00012AB30X45"
Erwartetets Ergebnis = "12AB30X45"

Bin für Tipps und Anregungen dankbar.

Danke und Grüße
Stefan
Titel: Re: führende "0" aus Textfeld entfernen
Beitrag von: pram am 17.12.13 - 10:09:58
wieviele 0en können vorkommen?

Folgende Formel wäre für 4 Stück

Ausgabe := @ReplaceSubstring("~"+Eingabe; "~0000":"~000":"~00":"~0":"~"; "")

Und folgende für 8:

tmp := @ReplaceSubstring("~"+Eingabe; "~0000"; "")
Ausgabe := @ReplaceSubstring("~"+tmp; "~0000":"~000":"~00":"~0":"~"; "")

Über eine Schleife wohl auch generisch lösbar.
Titel: Re: führende "0" aus Textfeld entfernen
Beitrag von: WildVirus am 17.12.13 - 10:10:49
Moin Stefan

mit einer While left(Eingabe, 1) = 0 Schleife in der Du dann Eingabe um eine Stelle kürzt

CU,
Axel
Titel: Re: führende "0" aus Textfeld entfernen
Beitrag von: udo187 am 17.12.13 - 10:19:48
Hallo !



@For(x := 1 ;  x < @Length(test1) ; x := x + 1;
@If(
@Right(@Left(Test1;x);1) = "0";
@Success;
@return(@Right(test1;@Length(test1) - (x-1)))
)
)

...wobei test1 ist dein Feld.

Gruss
Udo
Titel: Re: führende "0" aus Textfeld entfernen
Beitrag von: cebolina am 17.12.13 - 10:31:27
wieviele 0en können vorkommen?
soviele wie der User einträgt ;-) - also unbekannt.

Die Formel von Udo funktioniert einwandfrei - Danke!

Gruß Stefan
Titel: Re: führende "0" aus Textfeld entfernen
Beitrag von: udo187 am 17.12.13 - 10:51:39
Hallo !

Noch eine kleine Korrektur:

- Wenn nur eine Stelle eingegeben wird
- x ist kleiner oder gleich der Länge

@If(test1 = "0";@Return("");@Success);

@For(x := 1 ;  x <= @Length(test1) ; x := x + 1;
@If(
@Right(@Left(Test1;x);1) = "0";
@Success;
@return(@Right(test1;@Length(test1) - (x-1)))
)
 )


Gruss
Udo
Titel: Re: führende "0" aus Textfeld entfernen
Beitrag von: pram am 17.12.13 - 11:18:36
wieviele 0en können vorkommen?
soviele wie der User einträgt ;-) - also unbekannt.
Klar ;)
Mach dann auch noch einen Trim, nicht dass ein User "  00012345" eingibt

Titel: Re: führende "0" aus Textfeld entfernen
Beitrag von: cebolina am 17.12.13 - 11:43:08
@Udo
Danke für den ergänzenden Hinweis.
Die Erfassung von "0" ist zwar sehr unwahrscheinlich, aber man weiß ja nie.

@pram
Trim ist eh schon dabei, aber Danke für den Hinweis.

Stefan
Titel: Re: führende "0" aus Textfeld entfernen
Beitrag von: Tim Pistor am 17.12.13 - 12:09:29
Auch noch was
Code
p := "~";
v := @ReplaceSubstring(@Trim(@ThisValue); p; "");
@While( @Begins( v ; "0" ) ; v := @RightBack(  p + v;  p + "0"));
v

Edit: "p" ist ein beliebiges Zeichen das bei der Eingabe nicht vorkommen darf und rausgefiltert wird.
Titel: Re: führende "0" aus Textfeld entfernen
Beitrag von: cebolina am 17.12.13 - 13:47:46
Auch noch was
Code
p := "~";
v := @ReplaceSubstring(@Trim(@ThisValue); p; "");
@While( @Begins( v ; "0" ) ; v := @RightBack(  p + v;  p + "0"));
v

Edit: "p" ist ein beliebiges Zeichen das bei der Eingabe nicht vorkommen darf und rausgefiltert wird.

Sehr elegant!

Stefan
Titel: Re: führende "0" aus Textfeld entfernen
Beitrag von: Tim Pistor am 17.12.13 - 17:25:53
Speicherplatz ist teuer, drum noch eine Sparversion:

Code
v := @Trim(@ThisValue);
@While( @Begins( v ; "0" ) ; v :=@Trim(@Middle(v; 1; @Length(v))));
v
Titel: Re: führende "0" aus Textfeld entfernen
Beitrag von: cebolina am 18.12.13 - 07:55:53
Speicherplatz ist teuer, drum noch eine Sparversion:

Code
v := @Trim(@ThisValue);
@While( @Begins( v ; "0" ) ; v :=@Trim(@Middle(v; 1; @Length(v))));
v

noch eleganter - Danke!
Titel: Re: führende "0" aus Textfeld entfernen
Beitrag von: thkn777 am 07.01.14 - 16:33:24
Ein gesundes Neues Jahr wünsch' ich!

@cebolina
Für den Fall, daß man keine Schleifen mag oder einsetzen will und t den getrimmten Ausgangswert enthält (z.B. t := @Trim(@ThisValue)), könnte man so an die Sache herangehen:

x := @Explode(t;"0");
n := @Left(t;@Subset(x;1));
r := @Right(t;n);

Wie funktionierts:
- "0" wird als Trennzeichen beim @Explode verwendet --> x
- links vom Inhalt des ersten Elements der Liste x stehen in t alle führenden Nullen --> n
- rechts von n steht in t der ganze Rest ohne die führenden Nullen --> r

Das "Verhübschen" überlasse ich Dir - Du weißt am besten, welche Sonderfälle sich Deine fleißigen Nutzer für Dich ausdenken ;)
Titel: Re: führende "0" aus Textfeld entfernen
Beitrag von: Tim Pistor am 07.01.14 - 17:00:01
In diesem Beispiel muss aber zwingend eine führende "0" geliefert werden?

Aus "0123" wird "123". Aus "123" wird "" - Abhilfe:

Code
t := "0" + @Trim(@ThisValue)
Titel: Re: führende "0" aus Textfeld entfernen
Beitrag von: thkn777 am 07.01.14 - 17:16:34
@Tim
Ich habe nur die Grundidee aufgeschrieben, korrekt. Mit ein bischen Drumherum wär's dann z.B.:

t := @Trim(@ThisValue);
x := @Explode(t;"0");
n := @Left(t;@Subset(x;1));
r := @Right(t;n);
ergebnis := @If(@Left(t;1)="0";r;t);

Sprich: wenn in t keine führende Null ist, dann wird t selbst das Ergebnis. In der letzten Zeile kann man dann r natürlich noch durch wiederholtes Einsetzen in einen langen Formelsprachebandwurm verwandeln ;) und hat nur eine einzige Zeile. Ich finde aber, das man sowas schlecht lesen kann.

Da ich nicht weiß, wieviel und welches Drumherum cebolina braucht, kann er sich das ja selber haargenau auf seine Bedürfnisse anpassen. Genau eine "0" als Eingabe wurde schon diskutiert. Dann kämen mir noch Leerzeichen mitten im String in den Sinn (Nutzer ist aus Versehen auf die Leertaste gekommen und hat es gar nicht bemerkt...). Sicher gibt's auch noch andere Prüfungen, die cebolina einbauen möchte. Minimale/maximale Länge des Strings, ein bestimmter Aufbau... usw.
Titel: Re: führende "0" aus Textfeld entfernen
Beitrag von: cebolina am 08.01.14 - 10:25:14
Nochmal Danke für die vielen Anregungen und Tipps.

In meinem konkreten Fall ging es um die Eingabe von Kontonummern und deren Konvertierung in IBAN.
Es müssen tatsächlich nur führende "0" herausgefiltert werden. Innerhalb einer Kontonummer können durchaus "0" enthalten sein (Bsp.: 1230012).
Deutsche Kontonummern dürfen max. 10-stellig sein, können aber auch kürzer sein. Da ein User allerdings auch "0001230012" erfassen könnte, brauchte ich eben eine Funktion, um diese führenden "0" zu entfernen.
Versehentliche Leerzeichen werden vor der IBAN-Konvertierung sowieso mit @Trim und @ReplaceSubstring herausgefiltert.

Letztlich habe ich die Version von Tim Pistor verwendet.

Gruß Stefan