home *** CD-ROM | disk | FTP | other *** search
- String
- Handling
-
-
-
- "Guests, like fish, begin to smell after three days."
-
- Benjamin Franklin
-
-
-
- The totSTR unit provides a set of routines for converting data to and
- from string format. Although the unit includes the object FmtNumberOBJ,
- the majority of the routines are good ol' functions.
-
-
- String Functions
-
- These functions are grouped into the following categories reflecting
- their primary purpose: string adjustment, string searching, word man-
- agement and number conversion.
-
-
- String Adjustment
- Squeeze
-
- Squeeze(L:char;Str:string;Width:byte);
- Returns a string that has been squeezed (or expanded) to a specific
- length. If the source string is too long, either the leftmost or right-
- most characters are removed. The function is passed three parameters; a
- character to indicate which side of the string to truncate ('L' or
- 'R'), the source string, and the desired string width. If the source
- string is shorter than the desired width, the string is padded with
- spaces. For example:
-
- TIGHT :=SQUEEZE('L','ARKANSAS',6);
- Assigns the value 'KANSAS' to TIGHT.
-
-
-
- PadLeft
- Padleft(Str:string;Size:byte;ChPad:char):string;
-
- Expands and left justifies a string to a specified width. The function
- is passed three parameters; the source string, the length of the
- expanded string, and the character used to pad the string. For example:
- MyString := PadLeft('LOAD FILE',20,' ');
-
- Assigns the value 'LOAD FILE ' to MyString.
-
- 14-2 User's Guide
- --------------------------------------------------------------------------------
-
- PadRight
-
- PadRight(Str:string;Size:byte;ChPad:char):string;
- Expands and right justifies a string to a specified width. The function
- is passed three parameters; the source string, the length of the
- expanded string, and the character used to pad the string. For example:
-
- MyString := PadRight('RIGHT',10,'*');
- Assigns the value '*****RIGHT' to MyString.
-
-
-
- PadCenter
- PadCenter(Str:string;Size:byte;ChPad:char):string;
-
- Expands and centers a string to a specified width. The function is
- passed three parameters; the source string, the length of the expanded
- string, and the character used to pad the string. For example:
- Bored := PadCenter('Middle',14,'-');
-
- Assigns the value '----Middle----' to Bored.
-
-
- Pad
-
- Pad(PadJust:tJust;Str:string;Size:byte;ChPad:char):string;
- This function combines the features of PadLeft, PadRight and PadCenter
- into a single function. The totSTR unit includes the declaration of an
- enumerated type tJust, with the following members: JustLeft, Just-
- Center, and JustRight. The function is passed four parameters; a member
- of tJust to indicate the required justification, the source string, the
- length of the expanded string, and the character used to pad the
- string. For example:
-
- PadStr := Pad(JustCenter,'Middle',14,'-');
- Assigns the value '----Middle----' to PadStr.
-
-
-
- SetUpper
- SetUpper(Str:string):string;
-
- Returns a string with all the alpha characters converted to upper case.
- The string is passed one parameter; the source string. For example:
- MyString := SetUpper('123abc456dEf');
-
- Assigns the value '123ABC456DEF' to MyString.
-
- String Handling 14-3
- --------------------------------------------------------------------------------
-
- SetLower
-
- SetLower(Str:string):string;
- Returns a string with the alpha characters converted to lower case. The
- string is passed one parameter; the source string. For example:
-
- MyString := SetLower('123ABC456DeF');
- Assigns the value '123abc456def' to MyString.
-
-
-
- SetProper
- SetProper(Str:string):string;
-
- Returns a string with the first character of each word converted to
- upper case. The string is passed one parameter; the source string. For
- example:
- MyString := SetProper('eeny meeny miny mo');
-
- Assigns the value 'Eeny Meeny Miny Mo' to MyString.
-
-
- AdjCase
-
- AdjCase(NewCase:tCase; Str:string): string;
- This function combines the features of SetUpper, SetLower and SetProper
- into a single function. The totSTR unit includes the declaration of an
- enumerated type tCase, with the following members: Lower, Upper,
- Proper, and Leave. If the member Leave is specified, the string will
- not be adjusted. The function is passed two parameters; a member of
- tCase to indicate the required capitalization, and the source string.
- For example:
-
- PStr := AdjCase(Proper,'tracy chapman');
- Assigns the value 'Tracy Chapman' to PStr.
-
-
-
- Last
- Last(N:byte; Str:string):string;
-
- Returns the last part of a string. The function is passed two parame-
- ters; the number of characters to extract, and the source string. For
- example:
- NewString := Last(11,'Never take drugs!');
-
- Assigns the value 'take drugs!' to NewString.
-
- 14-4 User's Guide
- --------------------------------------------------------------------------------
-
- First
-
- First(N:byte; Str:string):string;
- Returns the first part of a string. The function is passed two parame-
- ters; the number of characters to extract, and the source string. For
- example:
-
- MyString := First(10,'I want sextuplets');
- Assigns the value 'I want sex' to MyString.
-
-
-
- Strip
- Strip(L,C:char; Str:string): string;
-
- Returns the string with a specific character removed. The function is
- passed three parameters; a character to indicate which part of the
- string to strip, the character to strip, and the source string. The
- strip can be performed on the left of the string, the right of the
- string, the left and right, or all occurrences throughout the string.
- The first parameter would be the character 'L', 'R', 'B' or 'A',
- respectively. For example:
- NoTees := Strip('A','T','THE TTT MAN');
-
- Assigns the value 'HE MAN' to NoTees.
-
-
- OverType
-
- OverType(N:byte; StrS,StrT:string):string;
- Places one string "on top of" another string and overlays the underly-
- ing characters. The function is passed three parameters; the character
- position in the target string to start the overtyping, the source
- string, and the target string. For example:
-
- Result := Overtype(8,'TechnoJock','I love you');
- Assigns the value 'I love TechnoJock' to Result.
-
-
-
- PicFormat
- PicFormat(Input,Picture:string;Pad:char):string;
-
- This function was specifically used to complement the PictureIOOBJ
- object used for obtaining formatted user input. The function returns a
- formatted string, and is passed three parameters; the source string,
- the picture string containing the format characters '!@*#', and the
-
-
- String Handling 14-5
- --------------------------------------------------------------------------------
-
- character used to pad the string if the source is not long enough.
- Refer to chapter 11 for a full description of format characters. For
- example:
-
- TelStr := PicFormat('713493635','(###) ###-####','*');
- Assigns the value '(713) 493-635*' to TelStr.
-
-
-
- TruncFormat
- TruncFormat(Input:string; Start,Len:byte; Pad:char):string;
-
- Truncates (or expands) a string from a specified character position.
- The function is passed three parameters; the source string, the posi-
- tion of the first character to extract, and the total length of the
- returned string. For example:
- NewStr := TruncFormat('Hidey Hidey Ho',9,10);
-
- Assigns the value 'dey Ho ' to NewStr.
-
-
- String Searching
-
- FirstCapital
- FirstCapital(Str:string):char;
-
- Returns the first capital letter in a string. Note that this function
- returns type char. If a capital letter is not found, a null (#0) is
- returned. The function is passed one parameter; the source string. For
- example:
- MyChar := FirstCapital('7 File Save');
-
- Assigns the value 'F' to MyChar.
-
-
- FirstCapitalPos
-
- FirstCapitalPos(Str:string):byte;
- Returns the character position of the first capital letter in a string.
- Note that this function returns type byte. If a capital letter is not
- found, a zero is returned. The function is passed one parameter; the
- source string. For example:
-
- ByteVar := FirstCapitalPos('how yer doin Bob');
- Assigns the value 14 to ByteVar.
-
-
-
- 14-6 User's Guide
- --------------------------------------------------------------------------------
-
- LastPos
-
- LastPos(C:char;Str:string):byte;
- Returns a byte indicating the position of the last occurrence of a
- character in a string. If the character is not found, a zero is
- returned. The function is passed two parameters; a character to search
- for, and the source string. For example:
-
- BytePos := LastPos('A','My Accommodation');
- Assigns the value 4 to BytePos.
-
-
-
- LastPosBefore
- LastPosBefore(C:char;Str:string;Last:byte): byte;
-
- Returns a byte indicating the position of the last occurrence of a
- character, up to a specified part of the string. If the character is
- not found, a zero is returned. The function is passed three parameters;
- a character to search for, the source string, and the position of the
- last character to include in the search. For example:
- SubPos := LastPosBefore('s','Mississippi',5);
-
- Assigns the value 4 to SubPos.
-
-
- PosAfter
-
- PosAfter(C:char;Str:string;Start:byte):string;
- Returns a byte indicating the position of the first occurrence of a
- character, starting from a specified position in the string. If the
- character is not found, a zero is returned. The function is passed
- three parameters; a character to search for, the source string, and the
- position of the first character to include in the search. For example:
-
- SubPos := PosAfter('s','Mississippi',5);
- Assigns the value 6 to SubPos.
-
-
- Word Management
- WordCnt
-
- WordCnt(Str:string):byte;
- Returns the number of words in a string. The procedure is passed one
- parameter; the source string. For example:
-
- TotWords := WordCnt('eeny meeny miny mo');
-
- String Handling 14-7
- --------------------------------------------------------------------------------
-
- Assigns the value 4 to TotWords.
-
-
-
- PosWord
- PosWord(WordNo:byte; Str:string):byte;
-
- Returns the position of the first character of a specific word in a
- string. The function is passed two parameters; the word number, and the
- source string. If there are insufficient words in the string, a zero is
- returned. For example:
- MyWord := PosWord(4,'What a stupid idea son!');
-
- Assigns the value 15 to MyWord.
-
-
- ExtractWords
-
- ExtractWords(StartWord,NoWords:byte; Str:string):string;
- Returns a substring containing a specified number of words (real words,
- not computer words!) extracted from a source string. The function is
- passed three parameters; the number of the first word to extract, the
- total number of words to extract, and the source string. For example:
-
- NewString := ExtractWords(5,3,'who the hell says
- censorship is good');
- Assigns the value 'censorship is good' to NewString.
-
-
-
- Number Conversions
- ValidInt
-
- ValidInt(Str:string):boolean;
- This function returns true if the source string represents a valid
- integer, i.e. contains sensible numbers with no spaces or alpha charac-
- ters. The only passed parameter is the source string. For example:
-
- OK := ValidInt('23xy45');
- Assigns the value false to OK.
-
-
-
- ValidHEXInt
- ValidInt(Str:string):boolean;
-
-
-
- 14-8 User's Guide
- --------------------------------------------------------------------------------
-
- This function returns true if the source string represents a valid HEX
- notation integer, i.e. contains the numbers 0 through 9, or letters 'A"
- through 'F' with no spaces. The only passed parameter is the source
- string. For example:
-
- OK := ValidHEXInt('2E4A');
- Assigns the value true to OK.
-
-
-
- ValidReal
- ValidReal(Str:string):boolean;
-
- This function returns true if the source string represents a valid real
- number, i.e. contains numbers with no spaces or alpha characters. The
- only passed parameter is the source string. For example:
- OK := ValidReal('89.95');
-
- Assigns the value true to OK.
-
-
- StrtoInt
-
- StrToInt(Str:string):integer;
- Converts a number string and returns an integer. If the string is not a
- valid integer, a zero is returned. The function ValidInt can be used to
- check that the string is convertible. For example:
-
- Salary := StrToInt('30000');
- Assigns the value 30000 to Salary.
-
-
-
- StrtoLong
- StrToLong(Str:string):longint;
-
- Converts a number string and returns a longint. If the string is not a
- valid integer, a zero is returned. For example:
- GoodSalary := StrToLong('300000');
-
- Assigns the value 300000 to GoodSalary.
-
-
- StrToReal
-
- StrToReal(Str:string):extended;
-
-
- String Handling 14-9
- --------------------------------------------------------------------------------
-
- Converts a number string and returns a real. If the string is not a
- valid real, a zero is returned. The function ValidReal can be used to
- determine whether the string is convertible. For example:
-
- Taxes := StrToReal('15643.27');
- Assigns the value 15643.27 to Taxes.
-
-
-
- HEXStrToLong
- HEXStrToLong(Str:string):longint;
-
- Converts a hexadecimal string and returns a longint. If the string is
- not a valid hex number, a zero is returned. The function ValidHEXInt
- can be used to determine whether the string is convertible. For exam-
- ple:
- Val := HEXStrToLong('FF');
-
- Assigns the value 255 to Val.
-
-
- IntToStr
-
- IntToStr(Number:longint):string;
- Returns a number converted to a string. The function is passed one
- parameter; the source number of type byte, word, shortint, integer or
- longint. For example:
-
- NumStr := IntToStr(365);
- Assigns the value '365' to NumStr.
-
-
-
- RealToStr
- RealToStr(Number:extended; Decimals:byte):string;
-
- Returns a real number converted to a string. The function is passed two
- parameters; the source real number, and the number of decimal places.
- If the number of decimal places is passed as FLOATING (a constant), the
- function will return only the significant digits. For example:
- MeatPie := RealToStr(3.546000,FLOATING);
-
- Assigns the value '3.546' to MeatPie.
-
- IntToHEXStr
-
- IntToHEXStr(Number:longint):string;
-
- 14-10 User's Guide
- --------------------------------------------------------------------------------
-
- Returns a hexadecimal string representing the value of a number. The
- function is passed one parameter; the source number, and it may be of
- type byte, word, shortint, integer or longint. For example:
-
- SillyPower := IntToHexStr(255);
- Assigns the value 'FF' to SillyPower.
-
-
-
- RealtoSciStr
- RealToSciStr(Number:extended; D:byte):string;
-
- Returns a real number converted to a scientific notation string. The
- function is passed two parameters; the source real number, and the
- number of decimal places. For example:
- Velocity := RealToSciStr(45678.984564,8);
-
- Assigns the value '4.56789846E+04' to Velocity.
-
-
- NthNumber
-
- NthNumber(Str:string; Nth:byte):char;
- This function is actually used internally by the Toolkit in the totDATE
- unit, but can be used if you can think of a reason! This function
- returns the character representing a number found in the string. The
- function is passed two parameters; the source string, and a byte indi-
- cating the position of the number to be returned. For example:
-
- NumChar := NthNumber('02/20/48',5);
- Assigns the value '4' to NumChar.
-
-
-
- Examples
- Listed below are the demo programs DEMST1.PAS and DEMST2.PAS, which
- illustrate how to use the string functions. Following each listing is a
- figure detailing the resultant output.
-
- program DemoStringOne;
- {demST1 - string functions}
- Uses DOS, CRT,
- totFAST, totSTR;
-
- Var
- DemoStr : string;
-
-
-
- String Handling 14-11
- --------------------------------------------------------------------------------
-
- begin
- ClrScr;
- with Screen do
- begin
- DemoStr := ' TechnoJock''s Object Toolkit string demo ';
- WriteAt(5,1,lightgray,'Source String: ');
- WriteAt(30,1,lightcyan,'"'+DemoStr+'"');
- WriteAt(1,4,lightgray,'SetUpper:');
- WriteAt(30,4,yellow,'"'+SetUpper(DemoStr)+'"');
- WriteAt(1,5,lightgray,'SetLower:');
- WriteAt(30,5,yellow,'"'+SetLower(DemoStr)+'"');
- WriteAt(1,6,lightgray,'SetProper:');
- WriteAt(30,6,yellow,'"'+SetProper(DemoStr)+'"');
- WriteAt(1,7,lightgray,'Total words:');
- WriteAt(30,7,lightgreen,IntToStr(WordCnt(DemoStr)));
- WriteAt(1,8,lightgray,'Posn. Word 3:');
- WriteAt(30,8,lightgreen,IntToStr(PosWord(3,DemoStr)));
- WriteAt(1,9,lightgray,'Words 2..5 are:');
- WriteAt(30,9,yellow,'"'+ExtractWords(2,4,DemoStr)+'"');
- WriteAt(1,10,lightgray,'Strip Leading spaces:');
- WriteAt(30,10,yellow,'"'+Strip('L',' ',DemoStr)+'"');
- WriteAt(1,11,lightgray,'Strip Trailing spaces:');
- WriteAt(30,11,yellow,'"'+Strip('R',' ',DemoStr)+'"');
- WriteAt(1,12,lightgray,'Strip Lng. & Tng. spaces:');
- WriteAt(30,12,yellow,'"'+Strip('B',' ',DemoStr)+'"');
- WriteAt(1,13,lightgray,'Strip All spaces:');
- WriteAt(30,13,yellow,'"'+Strip('A',' ',DemoStr)+'"');
- end;
- GotoXY(1,23);
- end.
-
-
- Figure 14.1 [SCREEN]
- String
- Functions
-
-
- program DemoStringTwo;
- {demST2 - more string functions}
- Uses DOS, CRT,
- totSTR;
-
- Const
- MyInt:integer = 4000;
- MyReal:real = 89.99;
- MyIntStr = '8000';
- MyRealStr = '89.95';
- MyHexStr = 'FFFF';
-
-
-
- 14-12 User's Guide
- --------------------------------------------------------------------------------
-
- begin
- ClrScr;
- writeln('Test number - ',MyInt);
- writeln;
- writeln('IntToStr: ',IntToStr(MyInt));
- writeln('IntToHEXStr: ',IntToHEXStr(MyInt));
- writeln;
- writeln;
- writeln('Test number - ',MyReal:5:2);
- writeln;
- writeln('RealToStr: ',RealToStr(MyReal,5));
- writeln('RealToStr: ',RealToStr(MyReal,1));
- writeln('RealToStr: ',RealToStr(MyReal,FLOATING));
- writeln('RealToSciStr: ',RealToSciStr(MyReal,FLOATING));
- writeln;
- writeln;
- writeln('Test Strings: ',MyIntStr,' ',MyRealStr,' ',MyHEXStr);
- writeln;
- writeln('ValidInt: ',ValidInt(MyIntStr));
- writeln('ValidInt: ',ValidInt(MyHEXStr));
- writeln('ValidInt: ',ValidInt(MyRealStr));
- writeln('ValidReal: ',ValidReal(MyIntStr));
- writeln('ValidReal: ',ValidReal(MyRealStr));
- GotoXY(1,23);
- end.
-
-
-
- Figure 14.2 [SCREEN]
- More String
- Functions
-
-
-
- FmtNumberOBJ
- The totSTR unit includes the object FmtNumberOBJ. This object includes
- function methods which accept numbers, and return them as formatted
- strings. The object is used to provide formatting capabilities to the
- number input fields in the totIO units (see page 11-21), but it may
- also be used independently to provide sophisticated number formatting
- control.
-
- The object can format both integer and real numbers, and the format
- options include the following:
- Prefix The number can be preceded by a character or short string,
- e.g. '$'.
-
- Suffix The number can be succeeded by a character or short string,
- e.g. 'FFr'
-
-
- String Handling 14-13
-
- --------------------------------------------------------------------------------
-
- Sign The number can be signed with + and/or -, parentheses on
- negative numbers, or DB/CR to indicate debit and credit.
-
- Separators The number can have thousands separated by a character, e.g.
- ','. Even the decimal place character and the character used
- to pad the string can be specified.
- Justificat The number can be left, right or center justified in the
- ion allotted space.
-
-
- To format numbers, you must initialize an instance of type FormatNum-
- berOBJ, specify the appropriate format options, and call a function
- method to return the number formatted as a string. The following
- methods are available:
-
-
- Init;
- This method initializes the object and must be called before the other
- methods.
-
-
- SetPrefixSuffix(P,S:string);
- Specifies the strings that will be used to precede and succeed the
- number. Pass a null string, i.e. '', to suppress either the prefix or
- suffix.
-
-
- SetSign(S:tSign);
- The totSTR unit includes the declaration of an enumerated type tSign
- with the following members: PlusMinus, Minus, Brackets, DbCr
-
- PlusMinus Always precedes the number with a '+' or '-' to indicate the
- sign of the number.
- Minus Only displays a '-', i.e. if the number is positive, the '+'
- is not displayed.
-
- Brackets Negative numbers are enclosed in parentheses, e.g. (25.67).
- DbCr If the number is negative it is succeeded with the string
- 'DB', otherwise it is succeeded with the string 'CR'.
-
- Use this method to specify how the sign of a number will be displayed.
-
- SetSeparators(P,T,D:char);
-
- Three different separators may be required to format a number, and this
- method identifies them. The first parameter is the character used to
- pad the string to the specified width, and common values are ' ' or
- '*'. The second parameter specifies the character used to separate each
-
- 14-14 User's Guide
- --------------------------------------------------------------------------------
-
- significant thousand, and typically has a value of ','. Specify #0, if
- you don't want a thousands separator. The last parameter specifies the
- character indicating the decimal place, e.g. '.'.
-
-
- SetJustification(J:tJust);
- When the number is formatted, it can be left, center, or right justi-
- fied. Pass a value of JustLeft, JustCenter or JustRight to identify the
- required justification.
-
-
- FormattedLong(Val:longint;Width:byte):string;
- Having set all the formatting options as required, call this method to
- return a formatted string. The method is passed two parameters; any
- whole number (i.e. byte, word, shortint, integer, longint), and the
- width of the string. If the formatted string is too long to fit in the
- specified width, an unformatted string is returned.
-
-
- FormattedReal(Val:extended;DP,Width:byte):string;
- This function method is similar to the method FormattedLong, except it
- is used to format real numbers. The method is passed three parameters;
- the real number, the number of decimal places, and the width of the
- returned string. The TotSTR unit includes a global constant FLOATING.
- When FLOATING is specified as the number of decimal places, the Toolkit
- will show all decimal places up to the last non-zero decimal.
-
-
- Done
- This method disposes of the memory used by the instance, and should be
- called when the object is no longer required.
-
-
-
- Note: the totIO2 unit includes a global instance FmtNumberTOT
- which is used to specify the default format for number input
- fields. Refer to page 11-22 for further details.
-
-
-
- Listed below is the demo program DEMST3.PAS, which illustrates how to
- use FmtNumberOBJ objects.
-
- program DemoStringThree;
- {demST3 - number formatting}
- Uses DOS, CRT,
- totFAST, totSTR;
-
-
-
- String Handling 14-15
- --------------------------------------------------------------------------------
-
- Var
- Fmt: FmtNumberOBJ;
-
- begin
- ClrScr;
- with Fmt do
- begin
- Init;
- writeln(FormattedLong(2000,15));
- writeln(FormattedReal(2000,2,15));
- SetSign(PlusMinus);
- writeln(FormattedLong(2000,15));
- SetSign(DBCR);
- writeln(FormattedReal(2000,3,15));
- SetPrefixSuffix('$','');
- writeln(FormattedReal(2000,3,15));
- SetSeparators('*',',','.');
- writeln(FormattedReal(2000,3,15));
- SetJustification(JustRight);
- writeln(FormattedReal(2000,3,15));
- Done;
- end;
- GotoXY(1,23);
- end.
-
- Figure 14.3 [SCREEN]
- Formatting
- Numbers