Autor Thema: Telefonnummer "entformatieren"  (Gelesen 14079 mal)

Offline inu

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 594
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Telefonnummer "entformatieren"
« am: 20.05.10 - 10:55:33 »
Hallo Leute,

in einer DB von uns werden Telefonnummern nach folgendem Format eingepflegt:

"01234 - 1 23 45 67 89"

Nun benötige ich eine Ansicht, welche in einer Spalte diese Telefonnummer so darstellt:

"01234123456789"

Es sollen also alle Zeichen, die keine Ziffern sind, herausgenommen werden. Wie kann ich das mit der Formelsprache umsetzen?

Viele Grüße
David

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Telefonnummer "entformatieren"
« Antwort #1 am: 20.05.10 - 11:05:40 »
Denkansatz:

_tmp := @ReplaceSubstring (Telefonnummer; "0" : "1": ...; "")

Dann hast Du in _tmp alle Zeichen, die Du aus Telefonnummer entfernen musst.

Über eine Schleife (habe noch nie eine Schleife in @Formel geschrieben) kannst Du dann mit
For x = 1 to Len (_tmp) (-> das ist die Script-Schleife, die musst Du natürlich in Formel schreiben)
@Middle (_tmp; x; 1) jedes zu ersetzende Zeichen ermitteln und ersetzen

Offline Axel

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Telefonnummer "entformatieren"
« Antwort #2 am: 20.05.10 - 11:16:26 »
Ich habe das mal in einer Ansichtenspalte mit dieser Formel gelöst:

@ReplaceSubstring(list; "-":"/":"(":")":" "; "");

Axel

Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Telefonnummer "entformatieren"
« Antwort #3 am: 20.05.10 - 12:28:24 »
Denkansatz:

_tmp := @ReplaceSubstring (Telefonnummer; "0" : "1": ...; "")

Dann hast Du in _tmp alle Zeichen, die Du aus Telefonnummer entfernen musst.

Und wenn man dann noch den Denkansatz von Peter ein wenig erweitert und anstelle von "" ein
Code
_tmp := @ReplaceSubstring (Telefonnummer; " ": "0" : "1": ...; @char(13))
durchführt und dabei auch vorhandene " " Leerzeichen ersetzt. Die machen sonst nämlich als Zeichen unter Umständen Probleme.

Und dann noch einen zweiten ReplaceSubstring baut der
Code
NurZahlenTelefonnummer := @ReplaceSubstring(Telefonnummer;@Unique(@Explode(_tmp;@char(13)));"")
durchführt, dann bekommt man egal was der Benutzer da reingeschrieben hat und ohne alle Sonderfälle, Vielleichtzeichen oder andere Formatierungsmöglichkeiten berücksichtigen zu müssen immer die reinen Zahlen raus.

Selbst bei so einer Eingabe ...
(+)0049Hastdunichtgese/hen(0)89\21 - ?123    @  26 Thomas Schulte 678

Kommt immer das hier raus ...
00490892412326678

Nur CRs sollte der Benutzer in diesem Fall nicht eintragen dürfen!!! Aber das Problem wäre auch noch lösbar.  ;)
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 Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Telefonnummer "entformatieren"
« Antwort #4 am: 20.05.10 - 12:45:40 »
Genial, ich ahnte, dass es auch ohne Schleife geht, kam aber nicht drauf.

Wenn man dann auch noch immer @char(13) ersetzt, bleibt keine Eventualität mehr übrig:

NurZahlenTelefonnummer := @ReplaceSubstring(Telefonnummer;@Unique(@Explode(_tmp;@char(13))):@char(13);"")

Offline cebolina

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
Re: Telefonnummer "entformatieren"
« Antwort #5 am: 20.05.10 - 13:16:37 »
Wenn man dann auch noch immer @char(13) ersetzt, bleibt keine Eventualität mehr übrig:

ich widerspreche ungern, aber es bleiben noch " " und @NewLine zu berücksichtigen.

So gehts aber (zumindest in einem berechneten Feld; in Ansicht habe ich nicht probiert):

feldname := Feld1 ;
erlaubt := (" " : "0" : "1" : "2" : "3" : "4" : "5" : "6" : "7" : "8" : "9") ;
verboten := @ReplaceSubstring(feldname ; erlaubt ; @Char(13)) ;
@ReplaceSubstring(feldname ; @Unique(@Explode(verboten ; @Char(13))) : @Char(13) : @NewLine : " " ; "")

Gruß
Stefan
Server: Lotus Domino 9.0.1FP4 HF70
Client: Release 9.0.1FP6

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Telefonnummer "entformatieren"
« Antwort #6 am: 20.05.10 - 13:30:51 »
ich widerspreche ungern ...
Ich auch, aber  :)

Das Leerzeichen muss nur deshalb entfernt werden, da es in "erlaubt" enthalten ist (also dort, erstes Element, zu entfernen).

@Newline ist normalerweise @Char (13) + @Char (10) (zumindest im Win-Umfeld), wenn man über @Char (13) explodiert, müsste erst @Char (10) und dann @Char (13) ersetzt werden. Falls das generell ein Problem gibt, kann man aber auch irgendein nicht erlaubtes Zeichen als Trennzeichen nehmen.

feldname := Feld1 ;
erlaubt := ("0" : "1" : "2" : "3" : "4" : "5" : "6" : "7" : "8" : "9") ;
trennzeichen = "#";
verboten := @ReplaceSubstring(feldname ; erlaubt ; trennzeichen) ;
@ReplaceSubstring(feldname ; @Unique(@Explode(verboten ; trennzeichen)) : trennzeichen ; "")

Damit sollte das eine allgemeingültige Formel sein, um in einem String bekannte erlaubte Zeichen stehen zu lassen, ohne alle unerlaubten Zeichen zu kennen (hab es aber nicht getestet).

Offline Tim Pistor

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
    • www.pistor.is - Tim Pistor IT-Beratung
Re: Telefonnummer "entformatieren"
« Antwort #7 am: 20.05.10 - 13:53:57 »
Auch mein Senft dazugeb :

dirtyNumber := "+00++1aaa2s   ss345d" + @NewLine + "dd6  ddd7s8  ss9s0&$s";
cleanNumber := @implode( @Explode(dirtyNumber; @implode(@Explode( dirtyNumber ; "0123456789"))) ; "" );

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Telefonnummer "entformatieren"
« Antwort #8 am: 20.05.10 - 14:04:52 »
Tim bekommt eindeutig den Preis für das Kreativste Denken verliehen.
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 cebolina

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
Re: Telefonnummer "entformatieren"
« Antwort #9 am: 20.05.10 - 14:10:35 »
Tim bekommt eindeutig den Preis für das Kreativste Denken verliehen.
stimmt, die Lösung von Tim ist wirklich "elegant"!

Gruß
Stefan
Server: Lotus Domino 9.0.1FP4 HF70
Client: Release 9.0.1FP6

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Telefonnummer "entformatieren"
« Antwort #10 am: 20.05.10 - 14:18:15 »
Tim bekommt eindeutig den Preis für das Kreativste Denken verliehen.
stimmt, die Lösung von Tim ist wirklich "elegant"!
Respekt, kann mich nur anschließen

Offline Tim Pistor

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
    • www.pistor.is - Tim Pistor IT-Beratung
Re: Telefonnummer "entformatieren"
« Antwort #11 am: 20.05.10 - 14:47:32 »
Tim bekommt eindeutig den Preis für das Kreativste Denken verliehen.
stimmt, die Lösung von Tim ist wirklich "elegant"!
Respekt, kann mich nur anschließen

Vielen Dank :)

Und noch zur Erklärung :

@implode( @Explode(dirtyNumber; @implode(@Explode( dirtyNumber ; "0123456789"))) ; "" )
=> Erlaubte Zeichen

@implode( @Explode(dirtyNumber; @implode(@Explode( dirtyNumber ; "0123456789"))) ; "" )
=> Die erlaubten Zeichen sind die Trenner. Die verbotenen Zeichen bleiben übrig

@implode( @Explode(dirtyNumber; @implode(@Explode( dirtyNumber ; "0123456789"))) ; "" );
=> Nun wird der String nach den verbotenen Zeichen getrennt und wieder zusammengefügt. Die erlaubten Zeichen bleiben übrig

Was meint Ihr? Gibt es bei @Explode ein Problem wenn das gleiche Zeichen mehrmals bei den Trennern vorkommt?
@Explode( "1a2b3c4d" ; "aaabbbcccdddeee");

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Telefonnummer "entformatieren"
« Antwort #12 am: 20.05.10 - 14:59:47 »
Nein, ich glaube nicht, dass das ein Problem gibt. Notes trennt, sobald eines der Zeichen vorkommt, warum sollte es dann noch nach weiteren Zeichen weiter hinten suchen?

Habe mal mit "01234567890123456789" getestet, das Ergebnis ist das gleiche.

Offline WernerMo

  • @Notes Preisträger
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.050
  • Geschlecht: Männlich
Re: Telefonnummer "entformatieren"
« Antwort #13 am: 20.05.10 - 15:55:40 »
Hallo,

ich will ja nicht vorlaut sein, aber evtl. gibt es ein Zeichen, das Ihr so nicht entfernen wollt?

Gerade im Internationale Umfeld ist das Kreuz"+" in der Telefonnummer von großer Bedeutung, evtl. sollte man dem zumindest an erste Stelle eine Sonderrolle zukommen lassen?

Gruß Werner
Gruß Werner
  o                                                  o   
 /@\  Nächster @Notes-Stammtisch  /@\  online Sept. 2020?
_/_\__________________________/_\_ Details folgen.

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Telefonnummer "entformatieren"
« Antwort #14 am: 20.05.10 - 16:07:28 »
Man nimmt alle die Zeichen, die man nicht entfernen möchte, in den String mit den erlaubten Zeichen auf, z.B. auch das +

cleanNumber := @Implode (@Explode (dirtyNumber; @Implode (@Explode (dirtyNumber ; "+0123456789"))) ; "" );

Die richtigen Zeichen anzugeben ist dann Sache des jeweiligen Entwicklers.

Offline Tim Pistor

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
    • www.pistor.is - Tim Pistor IT-Beratung
Re: Telefonnummer "entformatieren"
« Antwort #15 am: 20.05.10 - 16:11:05 »
Hallo,

ich will ja nicht vorlaut sein, aber evtl. gibt es ein Zeichen, das Ihr so nicht entfernen wollt?

Gerade im Internationale Umfeld ist das Kreuz"+" in der Telefonnummer von großer Bedeutung, evtl. sollte man dem zumindest an erste Stelle eine Sonderrolle zukommen lassen?

Gruß Werner

Und um das zweite "+" bei "+49 9229+2345" zu killen macht man sowas :

A := @implode( @Explode(dirtyNumber; @implode(@Explode( dirtyNumber ; "0123456789+"))) ; "" );
@Left(A; 1) + @Left(@replacesubstring(A; "+"; "") ; -1);

Jetzt wirds aber langsam schmutzig ;) Für solche "extremfälle" brauchts dann mal halt ein wenig IQ beim Anwender ;)

Offline WernerMo

  • @Notes Preisträger
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.050
  • Geschlecht: Männlich
Re: Telefonnummer "entformatieren"
« Antwort #16 am: 20.05.10 - 16:46:46 »
Hallo,

damit wäre ich ganz und garnicht einverstanden:
Man nimmt alle die Zeichen, die man nicht entfernen möchte, in den String mit den erlaubten Zeichen auf, z.B. auch das +

Zum Glück hat ja Tim aus seiner "eleganten" Lösung eine "elegant²" gemacht.

Suuuuuuuper gut Tim.

Gruß aus Weißenburg (=Gefängnis)
Werner
Gruß Werner
  o                                                  o   
 /@\  Nächster @Notes-Stammtisch  /@\  online Sept. 2020?
_/_\__________________________/_\_ Details folgen.

Offline cebolina

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
Re: Telefonnummer "entformatieren"
« Antwort #17 am: 20.05.10 - 17:28:45 »
Zitat
Und um das zweite "+" bei "+49 9229+2345" zu killen macht man sowas :

A := @implode( @Explode(dirtyNumber; @implode(@Explode( dirtyNumber ; "0123456789+"))) ; "" );
@Left(A; 1) + @Left(@replacesubstring(A; "+"; "") ; -1);

damit bin jetzt ich nicht einverstanden  ;D

Es gibt viele Telefonnummern, die in diesem Format vorhanden sind:

+49(0)123 456789

Ergebnis ist dann +490123456789 = falsch
korrekt müsste das Ergebnnis lauten: +49123456789 (ohne 0)

Und wenn die Zeichenfolge nicht mit + anfängt (man weiß ja nie), ist das Ergebnis wieder falsch.
"0123 456789" ergibt dann "00123456789".

Aber wie Tim schon sagte - jetzt wirds langsam wirklich schmutzig.

Gruß
Stefan
Server: Lotus Domino 9.0.1FP4 HF70
Client: Release 9.0.1FP6

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Telefonnummer "entformatieren"
« Antwort #18 am: 20.05.10 - 19:05:45 »
Wenn wir schon mal am Erbsenzählen sind:

Die Aufgabe/Anfrage war:

"Es sollen also alle Zeichen, die keine Ziffern sind, herausgenommen werden. Wie kann ich das mit der Formelsprache umsetzen?"

Diese Aufgabe ist, denke ich, bestens gelöst worden.

Die Annahme, dass die "elegant²"

A := @implode( @Explode(dirtyNumber; @implode(@Explode( dirtyNumber ; "0123456789+"))) ; "" );
@Left(A; 1) + @Left(@replacesubstring(A; "+"; "") ; -1);

einen Fehler bei fehlendem + als erstem Zeichen bringt, ist ein Interpretationsfehler, aber tatsächlich ist sie nicht 100%ig, denn bei mehr als einem + am Anfang wird die erste Ziffer nach den + entfernt. Erst @Left und dann @ReplaceSubstring (Reihenfolgeproblem) ist hoffentlich ganz korrekt.

A := @Implode (@Explode (dirtyNumber; @Implode (@Explode (dirtyNumber; "0123456789+"))) ; "" );
@Left(A; 1) + @ReplaceSubstring(@Left(A; -1); "+"; "");

Doch das ist jetzt oberpingelig. Wenn eine Telefonnummer wirklich ganz korrekt angezeigt werden soll (z.B. um damit direkt zu wählen), würde ich das schon bei der Eingabe entsprechend validieren, und nicht erst in einer Ansicht irgendwie geraderechnen. Und das erfolgt ja, entweder technisch oder organisatorisch, wenn ich David richtig verstanden habe.

Offline FriFra

  • Senior Mitglied
  • ****
  • Beiträge: 397
  • Geschlecht: Männlich
Re: Telefonnummer "entformatieren"
« Antwort #19 am: 20.05.10 - 23:45:56 »
"+" durch "" zu ersetzen ist falsch. Richtig wäre hier "00", denn "+49" ist "0049".

Ich hab vor kurzem genau für diese Probleme eine Lösung gebaut.

ich ersetze z.B. immer "(0)" -> "", "+"->"00"

Erst danach fliegen alle nicht numerischen Zeichen raus. Weiterhin ersetze ich im Nachgang alle "0049" durch "0"
Und zum Schluß schneide ich von allen lokalen Nummern die Orstvorwahl weg. Die Landes und Ortsvorwahl hab ich dabei konfigurierbar gehalten, damit man das Ergebnis gem. den lokalen Gegebenheitem steuern kann.

Gruß
Michael


IBM Certified Advanced Application Developer (PCLP AD 8.5,8,7,6,5)
IBM Certified Associate System Administrator (CLS SA 8.5)
Domino 10.0.1 (Windows Server 2016)
Inventor of the 00.00.200x?

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz