TRANS$ PowerBASIC Function |
TRANS$ function evaluates to the first parameter with its symbols translated according to the rules specified by its other two parameters (symbol-per-symbol replacement). Special cases are taken care of (see function description below). With PowerBASIC TRANS$ serves merely as a functional interface for the REPLACE ANY operator, and its sole purpose is to support the functional style of programming. With the older and less sophisticated Microsoft BASICs I also used to have the TRANS$ function, but that one had its logic fully coded. With PowerBASIC this is simply a matter of changing the coding style, and I definitely prefer the functional style for all sorts of data conversion. Example below illustrates this style difference . It is necessary here to convert description into file name by getting rid of punctuation, and substituting spaces between words by underscores. This can be achieved with three conversion steps:
Here's how this could be done using REPLACE ANY operator and COMPRES$ function: REPLACE ANY ".,:;" WITH " " IN Comment$ Comment$=COMPRES$(Comment$," ") REPLACE ANY " " WITH "_" IN Comment$ TRANS$ function makes the same sequence not only shorter, but also more clear (IMHO, of course). Comment$=TRANS$(COMPRES$(TRANS$(Comment$,".,:;"," ")," ")," ","_") TRANS$ Source Program Debugging program Debugging logout |
' TRANS$(0.0) Translate Character String Symbols 05/30/1997-02/03/2010 ' ------------------------------------------------------------------------------ ' Copyright (C) 1997-2010 by Vladimir Veytsel www.davar.net ' Type ------------------------------------------------------------------------- ' Function ' Description ------------------------------------------------------------------ ' TRANS$ function returns the first parameter with its symbols translated ' according to the rules specified by its other two parameters. ' Parameters ------------------------------------------------------------------- ' Strng$ - Source character string to be changed by translation ' Source$ - Source symbols to be translated ' Target$ - Target symbols for translation ' Value ------------------------------------------------------------------------ ' - IF specified string is EMPTY, ' THEN empty string is returned to the point of invocation ' - IF specified string is NOT empty and ' source symbols are either empty or ' not found within specified string, ' THEN original string is returned to the point of invocation ' - IF specified string is NOT empty and ' source symbols are found within specified string, ' THEN result of replacement of every entry of source symbol ' by corresponding (same position) target symbol ' is returned to the point of invocation ' Note ------------------------------------------------------------------------- ' Since translation is in fact symbol-per-symbol replacement, Target$ ' parameter should have the SAME length as Source$ parameter. If this is ' not the case, the length of Target$ parameter gets adjusted to be equal ' that of the Source$ parameter. This is done either by truncating ' Target$ parameter value, or padding it by blanks in order to match the ' length of Source$ parameter value. ' Examples --------------------------------------------------------------------- ' TRANS$("" ,"XYZ","*" )="" ' TRANS$("ABCDEF" ,"" ,"*" )="ABCDEF" ' TRANS$("ABCDEF" ,"XYZ","*" )="ABCDEF" ' TRANS$("XYZABCDEF" ,"XYZ","xyz")="xyzABCDEF" ' TRANS$("ABCXYZDEF" ,"XYZ","xyz")="ABCxyzDEF" ' TRANS$("ABCDEFXYZ" ,"XYZ","xyz")="ABCDEFxyz" ' TRANS$("XYZABCXYZDEFXYZ","XYZ","xyz")="xyzABCxyzDEFxyz" ' TRANS$("XYZABCXYZDEFXYZ","XY" ,"xyz")="xyZABCxyZDEFxyZ" ' TRANS$("XYZABCXYZDEFXYZ","XYZ","" )=" ABC DEF " ' Start Function --------------------------------------------------------------- DEFINT A-Z ' All defaulted variables are integer FUNCTION TRANS$(Strng$,Source$,Target$) ' Check Special Cases (Translation is Impossible) ------------------------------ IF ((LEN(Strng$)=0) OR _ (LEN(Source$)=0)) THEN TRANS$=Strng$ EXIT FUNCTION END IF ' Adjust Target$ Value to Match the Length of Source$ Value -------------------- Target_Str$=LEFT$(Target$+SPACE$(LEN(Source$)),LEN(Source$)) ' Form and Return Function Value to the Point of Invocation -------------------- Work_Strng$=Strng$ REPLACE ANY Source$ WITH Target_Str$ IN Work_Strng$ TRANS$=Work_Strng$ ' Finish Function -------------------------------------------------------------- END FUNCTION
TRANS$ Debugging Program Source program Debugging logout |
' TRANS$(0.0) Translate Character String Symbols 05/30/1997-02/03/2010 ' ------------------------------------------------------------------------------ #INCLUDE "TRANS" FUNCTION PBMAIN PRINT "TRANS$(0.0) Translate Character String Symbols ";DATE$; PRINT " ";LEFT$(TIME$,5) PRINT STRING$(66,"-") PRINT PRINT "TRANS$('' ,'XYZ','*' )='"; _ TRANS$("" ,"XYZ","*" ); "'" PRINT "TRANS$('ABCDEF' ,'' ,'*' )='"; _ TRANS$("ABCDEF" ,"" ,"*" ); "'" PRINT "TRANS$('ABCDEF' ,'XYZ','xyz')='"; _ TRANS$("ABCDEF" ,"XYZ","xyz"); "'" PRINT "TRANS$('XYZABCDEF' ,'XYZ','xyz')='"; _ TRANS$("XYZABCDEF" ,"XYZ","xyz"); "'" PRINT "TRANS$('ABCXYZDEF' ,'XYZ','xyz')='"; _ TRANS$("ABCXYZDEF" ,"XYZ","xyz"); "'" PRINT "TRANS$('ABCDEFXYZ' ,'XYZ','xyz')='"; _ TRANS$("ABCDEFXYZ" ,"XYZ","xyz"); "'" PRINT "TRANS$('XYZABCXYZDEFXYZ','XYZ','xyz')='"; _ TRANS$("XYZABCXYZDEFXYZ","XYZ","xyz"); "'" PRINT "TRANS$('XYZABCXYZDEFXYZ','XY' ,'xyz')='"; _ TRANS$("XYZABCXYZDEFXYZ","XY" ,"xyz"); "'" PRINT "TRANS$('XYZABCXYZDEFXYZ','XYZ','' )='"; _ TRANS$("XYZABCXYZDEFXYZ","XYZ","" ); "'" END FUNCTION
TRANS$ Debugging Logout Source program Debugging program |
TRANS$(0.0) Translate Character String Symbols 09-17-2016 14:41 ------------------------------------------------------------------ TRANS$('' ,'XYZ','*' )='' TRANS$('ABCDEF' ,'' ,'*' )='ABCDEF' TRANS$('ABCDEF' ,'XYZ','xyz')='ABCDEF' TRANS$('XYZABCDEF' ,'XYZ','xyz')='xyzABCDEF' TRANS$('ABCXYZDEF' ,'XYZ','xyz')='ABCxyzDEF' TRANS$('ABCDEFXYZ' ,'XYZ','xyz')='ABCDEFxyz' TRANS$('XYZABCXYZDEFXYZ','XYZ','xyz')='xyzABCxyzDEFxyz' TRANS$('XYZABCXYZDEFXYZ','XY' ,'xyz')='xyZABCxyZDEFxyZ' TRANS$('XYZABCXYZDEFXYZ','XYZ','' )=' ABC DEF ' |
View [and save] TRANS.BAS text View [and save] ZTRANS.BAS text (Use [Back] button or [Alt]+[CL] to return here from the viewed text) Copyright © 1997–2010 by Go to: Davar site entry | Site contents | Site index | Personal Computer | PowerBASIC | Text top |