"From dnsmith@watson.ibm.com Fri Nov 24 02:13:31 1995 Path: gazette.engr.sgi.com!fido.asd.sgi.com!sgigate.sgi.com!swrinde!cs.utexas.edu!uwm.edu!chi-news.cic.net!newsfeed.internetmci.com!in2.uu.net!cospo.osis.gov!portal.dia.osis.gov!swiss.ans.net!newsgate.watson.ibm.com!watnews.watson.ibm.com!yasc137.watson.ibm.com!dnsmith From: David N. Smith Newsgroups: comp.lang.smalltalk Subject: Re: Newbie Question: Formating Strings? Date: 5 Nov 1995 16:05:30 GMT Organization: IBM T J Watson Research Center, Hawthorne Lines: 81 Distribution: world Message-ID: <47inca$jq3@watnews2.watson.ibm.com> References: <47ddgr$fdi@newsbf02.news.aol.com> NNTP-Posting-Host: yasc137.watson.ibm.com Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit X-Newsreader: Nuntius 2.0.4_68K X-XXMessage-ID: X-XXDate: Sun, 5 Nov 1995 15:19:28 GMT In article <47ddgr$fdi@newsbf02.news.aol.com> Cpraber, cpraber@aol.com writes: >I would like to format a string that for exampe contains a telephone >number (ie '8101234567' so that the string is translated to (810)123-4567. > >If possible I'd like to use the same mechanism that the UI classes employ. >I'm using VW 2.0 Wouldn't it be nice if it were possible to write something like: Expression: '8101234567' formatAs: '(###)###-####' and get: '(810)123-4567' Expression: '5431234567' formatAs: '###-###-####' and get: '543-123-4567' Expression: '496449294' formatAs: '###-##-####' and get: '496-44-9294' Expression: '12345' formatAs: '$###.##' and get: '$123.45' Expression: 'SR2859591' formatAs: 'Publication number ####-####-#' and get: 'Publication number SR28-5959-1' Expression: '388350028456431097' formatAs: 'Card Number #### ###### #### Expires ##/##' and get: 'Card Number 3883 500284 5643 Expires 10/97' You can. Try Dave's patented Sunday Morning Quickie:" !String methodsFor: 'extensions'! formatAs: format " Answer a string holding format with all $# replaced successive characters from self. " | str result inStream | result := WriteStream on: (String new: format size). " Set str to self; assure no errors by fixing odd cases " str := String new: format size. (self size = 0) ifFalse: [ str replaceFrom: 1 to: self size with: self startingAt: 1 ]. str atAll: (self size + 1 to: format size) put: $ . " Process format, replacing each $# with a char from str " inStream := ReadStream on: str. format do: [ :ch | result nextPut: (ch = $# ifTrue: [ inStream next ] ifFalse: [ ch ]) ]. ^ result contents! ! "(This code was run only on the closest available Smalltalk implementation, tested only with the cases above [and three more below], and comes with no guarantee, blah, blah...). Error test cases: Expression: '543' formatAs: '###-###-####' Result: '543- - ' Expression: '' formatAs: '###-###-####' Result: ' - - ' Expression: '1234' formatAs: '' Result: '' Dave __________________________________ David N. Smith dnsmith@watson.ibm.com 70167.2274@compuserve.com IBM T J Watson Research Center Hawthorne, NY __________________________________ Any opinions or recommendations herein are those of the author and not of his employer. "