home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / delphi / tstrclas.lzh / STRCLASS.TXT < prev    next >
Text File  |  1995-11-20  |  127KB  |  3,115 lines

  1. fTStringClass
  2. Version 2.01
  3.  
  4.  
  5.  
  6.  
  7.  
  8. A PChar based string management object 
  9. for
  10. BorlandÆs DELPHI Windows development 
  11. environment
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19. Copyright of 
  20. ICFM Software,
  21. London,UK
  22. (Email: Compuserve 100010,1415)
  23.  
  24.  
  25. ICFM SOFTWARE
  26. LIBRARY DOCUMENTATION
  27.  
  28.  
  29. Date:    5th November,1995
  30.  
  31. Re:        STRCLASS.PAS - The Pascal PChar based string object
  32.  
  33.  
  34. Contents
  35.  
  36. 1. Introduction    4
  37. 2. Working with TStringClass objects    5
  38. 3. Character Positions    5
  39. 4. Parameters    6
  40. 5. Working with VCL text components    8
  41. 6. Pushing data directly into the class text buffer    9
  42. 7. Using the Global string class variable ægScÆ    10
  43. 8. ExceptionHandling    10
  44. 9. Limitations    10
  45. 10. Bug fixes, Ideas etc    11
  46. 11. Copyright Notice    11
  47. 12. TStringClass - Object Definition    12
  48. 12.1 Data Members    12
  49. 12.2 Private Methods    12
  50. 12.3 Protected Methods    13
  51. 12.4 Properties    14
  52. 12.5 Public Methods    15
  53. 12.5.1 Constructors/Destructors    15
  54. 12.5.2 Copy related    16
  55. 12.5.3 Clear type functions    16
  56. 12.5.3    16
  57. 12.5.4 Admin type functions    16
  58. 12.5.5 Assign related functions    16
  59. 12.5.6 Append related functions    18
  60. 12.5.7 Character element related functions    20
  61. 12.5.8 Other data type related functions    21
  62. 12.5.9 SysUtils unit compatible functions    24
  63. 12.5.10 Strings unit compatible functions    26
  64. 12.5.11 Comparison related functions    27
  65. 12.5.12 Insert/Delete/Trim related functions    29
  66. 12.5.12    29
  67. 12.5.13 Command Line related functions    30
  68. 12.5.14 Resource string related functions    30
  69. 12.5.15 INI file related functions    31
  70. 12.5.16 DOS path/filename related functions    31
  71. 12.5.17 Search related functions    34
  72. 12.5.18 Case related functions    37
  73. 12.5.19 Search & replace related functions    37
  74. 12.5.20 Parsing related functions    38
  75. 13. Container Objects    42
  76. 13.1 TBaseContainer    42
  77. 13.1.1 Public methods    42
  78. 13.1.2 Properties    43
  79. 13.2 TObjectContainer    45
  80. 13.2.1 Public methods    45
  81. 13.2.2 Properties    49
  82. 13.3 TRecordContainer    49
  83. 13.3.1 Public methods    49
  84. 13.4 TPCharContainer = CLASS(TObjectContainer)    50
  85. 13.5 TIntegerContainer = CLASS(TBaseContainer)    50
  86. 13.5.1 Public methods    50
  87. 13.5.2 Properties    50
  88. 13.6 TWordContainer = CLASS(TBaseContainer)    50
  89. 13.6.1 Public methods    50
  90. 13.6.2 Properties    51
  91. 13.7 TLongIntContainer = CLASS(TBaseContainer)    51
  92. 13.7.1 Public methods    51
  93. 13.7.2 Properties    51
  94. 13.8 TCustomTypeContainer = CLASS(TBaseContainer)    51
  95. 13.8.1 Public methods    51
  96. 14. Version Management    53
  97. 15. Index    56
  98.  
  99.  
  100. 1. Introduction
  101.  
  102. This æTStringClassÆ object is designed to manage large string variables by encapsulating a 
  103. core PChar type text buffer within a controlled object wrapper.
  104.  
  105. Pascal æSTRINGÆ type text variables are easy to use and manipulate, but suffer from a having a 
  106. maximum size of 255 characters. If you are processing large arrays of STRING type variables 
  107. they can waste valuable stack or heap space.
  108.  
  109. The alternative to using STRING types is to use the null terminated string (or æPCharÆ) type.  For 
  110. most programmers PCharÆs are a necessary evil.  
  111.  
  112. This 'TStringClass'  object was originally developed to solve some of the problems that are 
  113. frequently encountered whilst using 'PChar' type variables, namely:
  114.  
  115. *    Using un-intialised or 'NIL' PChar variables with any of the STRINGS unit functions, and 
  116. *    Not declaring buffers of sufficient length, such that concatenating variables leads to 
  117. internal memory overwrites.
  118.  
  119. The TStringClass object offers solutions to these and other related problems. It controls its own 
  120. internal buffer for holding the PChar variable, and before performing any assignments or 
  121. concatenations it always checks to see that sufficient room is available. If there is insufficient 
  122. space it re-sizes the buffer to fit the required action.
  123.  
  124. This object was originally created to counteract problems with 'guess-timating' the PChar 
  125. variable buffer length for complicated SQL expressions. Since then it has been expanded to 
  126. cover almost anything that can be done with a string type variable.
  127.  
  128. The object has the following main categories of methods:
  129.  
  130.   Multiple constructors for initiating the object for different situations
  131.   A set of high level methods for working with other TStringClass type variables.
  132.   A range of different 'Assign' methods for moving different types of text variables into the 
  133. object data value.
  134.   A range of different 'Append' methods for adding different types of text variables onto the 
  135. end of any existing object data value
  136.   A set of character level methods for testing the object data string.
  137.   A set of methods associated with converting other numeric data types into strings, or vice-
  138. versa
  139.   A set of methods that mimic the functions found in the STRINGS unit
  140.   A set of methods that mimic the text related functions found in the æSysUtilsÆ unit.
  141.   Methods for string resource and INI file access
  142.   A set of methods for inserting, deleting, padding and trimming the object's data string.
  143.   A set of methods to manage comparisons with another PChar variable.
  144.   A set of methods to provide DOS/Path name related processing and testing.
  145.   Methods for searching characters and sub strings
  146.   Methods for changing case
  147.   Methods for replacing characters or sub strings.
  148.   Methods for parsing the object's data value
  149.  
  150. As a rule the object is designed to handle the problems of passing NIL or zero length PChar 
  151. parameters. It can also manage the thorny old problem of passing parameters which are un-
  152. initialised or remain in use after they have been disposed. These are captured by exception 
  153. handling.
  154.  
  155. 2. Working with TStringClass objects
  156.  
  157. To employ the TStringClass object in any of your units add the æStrClassÆ name to the list of 
  158. units found in the USES clause. For example ....
  159.  
  160. unit Testbed;
  161.  
  162. interface
  163.  
  164. uses
  165.  
  166.    SysUtils,
  167.    WinTypes,
  168.    WinProcs,
  169.    Messages,
  170.    Classes,
  171.    Graphics,
  172.    Controls,
  173.    Forms,
  174.    Dialogs,
  175.    StdCtrls,
  176.    ExtCtrls,
  177.    StrClass,
  178.    ContainR;
  179.  
  180. Some of the TStringClass object methods use a container object to hold lists of strings. This 
  181. container object is located within the æContainR.PasÆ  unit.  If you are empoying any of these 
  182. container related functions make sure the æContainRÆ unit is included in the æUSESÆ list as shown 
  183. above.
  184. 3. Character Positions
  185.  
  186. The TStringClass object is based around a core PChar object data member. Like a PChar 
  187. variable all character position referencing is normally zero (0) based.  In that the first character 
  188. in a PChar string is at position 0, as shown below  ...
  189.  
  190.     VAR
  191.         APChar : Pchar;
  192.         AStr : STRING;
  193.         FirstCharacter : CHAR;
  194.         SObj : TStringClass;
  195.     BEGIN
  196.         ....
  197.         ....
  198.         GetMem(APChar,200);
  199.         StrCopy(APChar,ÆSpringÆ);
  200.         AStr := æStringÆ;
  201.         FirstCharacter :=  APChar[0];
  202.         FirstCharacter := AStr[1];
  203.         SObj := TStringClass.Create;
  204.         SObj.Assign([AStr]);
  205.         FirstCharacter := SObj.Ch[0];
  206.         à.
  207.         à.
  208.  
  209. As a favour to those hard-core STRING users who are unable or unwilling to remember that 
  210. PChar positioning is zero based, the StrClass library includes a new optional facility that allows 
  211. all character position referencing to be one (1) based.  The boolean typed constant 
  212. æStrClassBaseZeroÆ  is by default to TRUE. If this constant is reset to FALSE then the first 
  213. character position is treated as æ1Æ not æ0Æ.
  214.  
  215. With æStrClassBaseZeroÆ set to FALSE the following is correct  ..
  216.  
  217.     VAR
  218.         APChar : Pchar;
  219.         AStr : STRING;
  220.         FirstCharacter : CHAR;
  221.         SObj : TStringClass;
  222.     BEGIN
  223.         ....
  224.         ....
  225.         StrClassBaseZero := FALSE;
  226.         ....
  227.         ....
  228.         GetMem(APChar,200);
  229.         StrCopy(APChar,ÆSpringÆ);
  230.         AStr := æStringÆ;
  231.         FirstCharacter :=  APChar[0];
  232.         FirstCharacter := AStr[1];
  233.         SObj := TStringClass.Create;
  234.         SObj.Assign([Astr]);
  235.         FirstCharacter := SObj.Ch[1];
  236.         à.
  237.         à.
  238. Note: this change to a base 1 first character affects all class methods that use or report a 
  239. character position.
  240.  
  241. 4. Parameters
  242.  
  243. With Object Pascal there are several different types of variables that can be used to store text 
  244. strings, as shown below ....
  245.  
  246.     VAR
  247.  
  248.         MyArray :        ARRAY[0..200] OF CHAR;
  249.         MyPChar :    PChar;
  250.         MyStr :        STRING;
  251.  
  252. Rather than create a mass of different object methods to handle different parameter types, I 
  253. decided to design TStringClass so that any type of parameter can be passed to the same 
  254. function.
  255.  
  256. This is possible with the new DELPHI Object Pascal æOpen Array constructorsÆ facility. This 
  257. allows a function or procedure to be created that accepts an open ended set of parameters of 
  258. different variable types. (See Chapter 8 page 82 of the Language Guide).
  259.  
  260. Most of the TStringClass object methods that have text type input parameters use this type of 
  261. parameter. For instance ....
  262.  
  263.     FUNCTION Assign(CONST Args : ARRAY OF CONST) : PChar;
  264.  
  265. The Assign method converts the æArgsÆ collection of parameters to a string and then assigns 
  266. that string to the object, replacing any existing string value.
  267.  
  268. One condition to using æARRAY OF CONSTÆ type parameters is that the entries must be 
  269. enclosed within square brackets, as shown below ....
  270.  
  271.     VAR
  272.         Sobj : TStringClass;
  273.         L : LONGINT;
  274.         AStr : STRING;
  275.     BEGIN
  276.         .....
  277.         ....
  278.         L := 5;
  279.         AStr  := æI am æ;
  280.         SObj := TStringClass.Create;
  281.         SObj.Assign([æThere are æ,L,Æ boats in the harbourÆ]);
  282.         SObj.Assign([AStr,L,Æ years oldÆ]);
  283.         .......
  284.         .......
  285.  
  286. The TStringClass object will accept and process all standard variables types, it will even accept 
  287. other TStringClass objects as items in the parameter list. 
  288.  
  289.     VAR
  290.         Sobj,TObj : TStringClass;
  291.         L : LONGINT;
  292.         AStr : STRING;
  293.     BEGIN
  294.         .....
  295.         ....
  296.         L := 5;
  297.         AStr  := æI am æ;
  298.         SObj := TStringClass.Create;
  299.         TObj := TStringClass.CreateString([æits my birthdayÆ]);
  300.         SObj.Assign([AStr,L,Æ years old and Æ,TObj]);
  301.         .......
  302.         .......
  303.  
  304. With Version 2 of TStringClass, the Args parameter list can now include text related VCL 
  305. components, such as memo and edit box controls. For example :
  306.  
  307.     VAR
  308.         Sobj : TStringClass;
  309.         TheMemo : TMemo;
  310.     BEGIN
  311.         .....
  312.         ....
  313.         TheMemo.Lines.Add(æThis is the 1st lineÆ);
  314.         TheMemo.Lines.Add(æThis is the 2ndt lineÆ);
  315.         SObj := TStringClass.Create;
  316.         SObj.Assign([TheMemo]);
  317.         .......
  318.         .......
  319.  
  320. Where an ARRAY OF CONST type parameter is passed to a TStringClass object they will be 
  321. processed in a left to right order. For a function like æAssignÆ, the sum of all parts within the 
  322. æARRAY OF CONSTÆ will be converted to a string - in a left to right order - and the resulting 
  323. string will be assigned to the objectÆs own text variable.
  324.  
  325. To help identification all æARRAY OF CONSTÆ type parameters have an æArgsÆ part to their 
  326. name.
  327.  
  328. Where an objectÆs method returns strings or part strings as results, the function requires another 
  329. instantiated TStringClass object as the target for that assignment.
  330.  
  331. Some of the parsing related functions use a container object to store lists of parsed sub strings. 
  332. In such cases the function uses a æTObjectContainerÆ object as the storage container. Refer to 
  333. chapter 9 for more information of the container object hierarchy.
  334.  
  335. Certain of TStringClassÆs methods make use of a container method to hold the results of a 
  336. parsing or string extracting process. For example the parsing function æParseDelimToListÆ  will 
  337. chop a delimited text into its parts and place each part into a string object which inturn is added 
  338. to the parameter list object.  For example à.
  339.  
  340.     AList := TObjectContainer.Create;
  341.           AList.Capacity := 100;
  342.           TObj := TStringClass.CreateString(['xxx,yyy,zzzz,wwww,,qqqq,rrrr']);
  343.           TObj.ParseDelimToList(',',delim_None,AList);
  344.  
  345. The æAListÆ parameter is a container object. It is an instance of the æTObjectContainerÆ open 
  346. array type container provided within this library. 
  347.  
  348. With the example above æAListÆ now holds a list of 6 items - each of which is an instance of 
  349. TStringClass. To gain access to one of these string parts use the object containerÆs æItemsÆ 
  350. property, for example   ..
  351.  
  352.     AStrObj := TStringClass(AList.Items[0]);   { first string part - xxx }
  353.     AStrObj := TStringClass(AList.Items[AList.Count-1]);   { last string part - rrrr }
  354.  
  355. 5. Working with VCL text components
  356.  
  357. The TStringClass library now includes functions for moving data in and out of VCL text related 
  358. controls. These functions are useful for situations where a control contains multi-line strings that 
  359. exceed the 255 character limit.
  360.  
  361. Any method that includes an æArgsÆ ARRAY OF CONST type parameter can now include one or 
  362. more VCL components in its list. 
  363.  
  364. The TStringClass object will process any VCL component that drives from the parent class 
  365. æTWinControlÆ. This includes the TEdit and TMemo controls. In all cases it is using the 
  366. æGetTextBufÆ and æSetTextBufÆ VCL methods to move text in and out of a control. 
  367.  
  368. There are also separate methods for working with VCL components. 
  369.  
  370. The æFromComponentÆ method will extract the text from a single designated component control 
  371. and assign it to the string classÆs own text buffer.
  372.  
  373. The æToComponentÆ moves a text string from the string class into the VCL componentÆs own 
  374. text buffer. 
  375.  
  376. The æFromComponentItemÆ method extracts part of the componentÆs own string list and assigns 
  377. it to the string class buffer. This method has a second æIdxÆ INTEGER parameter that is used to 
  378. determine which part. For list boxes and combo boxes this is equivalent to the list item number. 
  379. For Memo controls it is equivalent to the text line number.  Note: if the typed constant 
  380. æStrClassBaseZeroÆ is set to FALSE then the first character position starts from one (1) not zero 
  381. (0).
  382.  
  383. For memo controls only, if the æIdxÆ parameter is set to the constant æselected_textÆ then the 
  384. method extracts the highlighted text.
  385.  
  386. 6. Pushing data directly into the class text buffer
  387.  
  388. Strange thought his might seem there are situations where you might want to push data directly 
  389. into the objectÆs text buffer. 
  390.  
  391. Although such actions are very un-OOP there can often occur. Typically they arise where a low 
  392. level function requires a æPCharÆ type parameter. In such a situation you would normally have to 
  393. cope as follows à.
  394.  
  395.     VAR
  396.         AStr : PChar;
  397.         SObj : TStringClass;
  398.     BEGIN
  399.         à..
  400.         à..
  401.         GetMem(AStr,1000);
  402.         SObj := TStringClass.Create;
  403.         SomeLowLevelFunction(AStr,1000);
  404.         SObj.Assign([AStr]);
  405.         FreeMem(AStr,1000);
  406.         à..
  407.         à..
  408.     END
  409.  
  410. Having to create and dispose of the æAStrÆ local variable is a pain.  By contrast TStringClass 
  411. offers a method of pushing data directly into its buffer, as shown below:
  412.  
  413.     VAR
  414.         AStr : PChar;
  415.         SObj : TStringClass;
  416.     BEGIN
  417.         à..
  418.         à..
  419.         SObj := TStringClass.CreateSize(1000);
  420.         SomeLowLevelFunction(SObj.ZString,1000);
  421.         Sobj.RecalcLength;
  422.         FreeMem(AStr,1000);
  423.         à..
  424.         à..
  425.     END
  426.  
  427. Fundamental to this approach is the use of the æRecalcLengthÆ method. This is used to re-
  428. calibrate the objectÆs own internal data members.
  429.  
  430. This approach of pushing data indirectly into the objectÆs text buffer is a short cut which ICFM 
  431. Software cannot wholeheartedly recommend. However, not wishing to straight jacket our users 
  432. it is issue which we felt was worth documenting.
  433.  
  434. 7. Using the Global string class variable ægScÆ
  435.  
  436. Another tiresome issue underlying the use of objects is the need to æcreateÆ or instantiate 
  437. objects prior to their use. For purists this gives any code a measure of self containment which 
  438. ensures its own security. However, on a more practical level having to include à
  439.  
  440.     VAR
  441.         SObj : TStringClass;
  442.     BEGIN
  443.         à..
  444.         à..
  445.         SObj := TStringClass.Create
  446.         à..
  447.         à..
  448.  
  449. à. requires a lot more typing, and also requires that the æSObjÆ be disposed of at the end of the 
  450. process.
  451.  
  452. As a convenience for more pragmatic users of objects the æStrClassÆ unit includes a global 
  453. variable ægScÆ (Global String Class) as an already instantiated string class variable.
  454.  
  455. This variable can be used a convenient vehicle for string class functions at any time. However, 
  456. do not dispose of this variable. This is taken care of by the unit itself.
  457.  
  458. 8. ExceptionHandling
  459.  
  460. The TStringClass object makes extensive use of exception handling.  It has it own 
  461. æEStringClassÆ exception class. 
  462.  
  463.     EStringClass = class(Exception);
  464.  
  465. In reporting an exception error the TStringClass object will raise an exception with a description 
  466. that includes the class name, function name and cause.
  467.  
  468. As some TStringClass object methods are called by other methods, the process of raising 
  469. exceptions may actually cause several such messages to appear.
  470.  
  471. To minimise the space consumed by text error descriptions, all TStringClass exception 
  472. reporting strings are held as a custom resource in the æStrClass.ResÆ file. (Not a string table, a 
  473. custom resource!)
  474. 9. Limitations
  475.  
  476. The string class will only manage strings of up to 64K in size. If an objectÆs string exceeds this 
  477. size an exception error is raised. The container objects used within the parsing functions are 
  478. limited to having no more than 2 billion items on a list.
  479. 10. Bug fixes, Ideas etc
  480.  
  481. If you detect any bugs or would like to suggest ideas for improvements then please email them 
  482. to my Compuserve account [100010,1415].
  483.  
  484. 11. Copyright Notice
  485.  
  486. No liability can be accepted for use of this source code.
  487.  
  488. This source code remains the copyright of ICFM Software. You may use it in your own 
  489. applications, but cannot employ it as part of another software library without the express 
  490. permission of ICFM Software.
  491.  
  492.  
  493. 12. TStringClass - Object Definition
  494. 12.1 Data Members
  495.  
  496. All the object's data members are deliberately set as 'PRIVATE' to ensure that the object's 
  497. buffer management is left to internal procedures. (Note: all object data members start with the 
  498. prefix 'F'. It is usually the case that all local variables and parameters start with a prefix of 'A').
  499.  
  500. FBuffer : PChar;
  501. This holds the object's PChar data value.
  502.  
  503. FMaxSize : WORD;
  504. This stores the size of the 'FBuffer' PChar variable memory buffer.
  505.  
  506. FLength  : WORD;
  507. This holds the length of the 'FBuffer' data member - excluding the null terminator. Thus a 
  508. 'FBuffer' value of 'CAT' would equate to a 'TheLength' value of 3.
  509.  
  510. FSizeInc : WORD;
  511. This variable can be used to control by how much the internal memory buffer is increased. It 
  512. can be set via the 'SizeInc' property.
  513. 12.2 Private Methods
  514.  
  515. Most of the private methods are concerned with maintaining the PChar string buffer, or 
  516. converting other data types into PChar types. They are listed here for completeness:
  517.  
  518.          FUNCTION AssignFromPChar(Source : PChar; Start : WORD) : PChar;
  519.          FUNCTION AssignMidPChar(Source : PChar; Start,Count : WORD) : PChar;
  520.          FUNCTION AssignLenPChar(Source : PChar; Len : WORD) : PChar;
  521.          FUNCTION AssignNLPChar(Source : PChar) : PChar;
  522.          FUNCTION AssignPadPChar(Source : PChar; Len : WORD; ACh : CHAR) : PChar;
  523.          FUNCTION AssignPChar(Source : PChar) : PChar;
  524.          FUNCTION AssignRightPChar(Source : PChar; Len : WORD) : PChar;
  525.          FUNCTION AssignString(CONST Source : STRING) : PChar;
  526.          FUNCTION AppendLenPChar(Source : PChar; Len : WORD) : PChar;
  527.          FUNCTION AppendMidPChar(Source : PChar; Start,Count : WORD) : PChar;
  528.          FUNCTION AppendNLPChar(Source : PChar) : PChar;
  529.          FUNCTION AppendPadPChar(Source : PChar; Len : WORD; ACh : CHAR) : PChar;
  530.          FUNCTION AppendPChar(Source : PChar) : PChar;
  531.          FUNCTION AppendRightPChar(Source : PChar; Len : WORD) : PChar;
  532.          FUNCTION AppendString(Source : STRING) : PChar;
  533.          FUNCTION AppendTClass(T : TClass) : PChar;
  534.          FUNCTION AppendTObject(T : TObject) : PChar;
  535.          FUNCTION AppendTrimPChar(Source : PChar) : PChar;
  536.          FUNCTION AppendWithTabPChar(Source : PChar) : PChar;
  537.          FUNCTION PrependPChar(Source : PChar) : PChar;
  538.          FUNCTION ComparePChar(Other : PChar) : INTEGER;
  539.          FUNCTION CompareIPChar(Other : PChar) : INTEGER;
  540.          FUNCTION CompareLPChar(Other : PChar; Len : WORD) : INTEGER;
  541.          FUNCTION CompareLIPChar(Other : PChar; Len : WORD) : INTEGER;
  542.          FUNCTION InsertPChar(Source : PChar; Index : WORD) : PChar;
  543.          FUNCTION CanCat(Source : PChar; VAR Extra : WORD) : BOOLEAN;
  544.          FUNCTION CanCopy(Source : PChar; VAR Extra : WORD) : BOOLEAN;
  545.          FUNCTION ChkSizeInc(E : WORD) : WORD;
  546.          FUNCTION CompConv(I : INTEGER) : INTEGER;
  547.          PROCEDURE DisposeStr;
  548.          FUNCTION ExpandBy(ExtraLen : WORD) : BOOLEAN;
  549.          FUNCTION GetCh(w : WORD) : CHAR;
  550.          FUNCTION GetLength : WORD;
  551.          FUNCTION GetMaxSize : WORD;
  552.          FUNCTION GetPChar : PChar;
  553.          FUNCTION GetSizeInc : WORD;
  554.          FUNCTION GetString : STRING;
  555.          PROCEDURE SetBufferLen(NewLen : WORD);
  556.          PROCEDURE SetSizeInc(ASize : WORD);
  557. 12.3 Protected Methods
  558. The object includes a number of protected methods. All the æDoXXXXXÆ type methods are those 
  559. that relate to processing strings based upon a character position.  These have been introduced 
  560. to allow for the safe processing of the æStrClassBaseZeroÆ related optional first character facility. 
  561. Each of these æDoXXXXÆ methods work using a base character position of zero (0). If you intend 
  562. creating your own objects derived from TStringClass and having your own new methods that 
  563. involve character position related processing, then to ensure correct processing use the 
  564. æDoXXXÆ method and set all calculations around a base zero first character.
  565.  
  566. Similarly, the æInitDataMembersÆ  function has been made virtual and moved to the protected 
  567. section to allow for the initialisation of new data fields defined in descendant objects.
  568.  
  569. The æAppendTObjectÆ method has been virtual to allow for situations where a developer wants 
  570. to allow the passing of the text associated with custom VCL classes into the string class object.
  571.  
  572.          FUNCTION AppendTObject(T : TObject) : PChar; VIRTUAL;
  573.          PROCEDURE InitDataMembers; VIRTUAL;
  574.          FUNCTION DoAssignFrom(CONST Args : ARRAY OF CONST; Start : WORD) : PChar;
  575.          FUNCTION DoAssignMid(CONST Args : ARRAY OF CONST; 
  576.                                                   Start,Count : WORD) : PChar;
  577.          FUNCTION DoAppendMid(CONST Args : ARRAY OF CONST; 
  578.                                                     Start,Count : WORD) : PChar;
  579.          FUNCTION DoFirstNonSpaceCh(VAR ACh : CHAR) : WORD;
  580.          FUNCTION DoHasCh(ACh : CHAR; VAR Pos : WORD) : BOOLEAN;
  581.          FUNCTION DoIsCh(W : WORD; ACh : CHAR) : BOOLEAN;
  582.          FUNCTION DoLastNonSpaceCh(VAR ACh : CHAR) : WORD;
  583.          PROCEDURE DoSetCh(W : WORD; ACh : CHAR);
  584.          FUNCTION DoDelete(Index,Count : WORD) : PChar;
  585.          FUNCTION DoDeleteFrom(Index : WORD) : PChar;
  586.          FUNCTION DoInsert(CONST Args : ARRAY OF CONST; Index : WORD) : PChar;
  587.          FUNCTION DoInsertL(CONST Args : ARRAY OF CONST; Len,Index : WORD) : PChar;
  588.          FUNCTION DoFindBetween2Ch(FirstCh,
  589.                                                              SecondCh        : CHAR;
  590.                                                              StartFrom       : WORD;
  591.                                                              VAR SubStrStart : WORD;
  592.                                                              VAR SubStrLen   : WORD;
  593.                                                              CutSubStr,
  594.                                                              IncDelims       : BOOLEAN;
  595.                                                              VAR ASubStr     : TStringClass) : BOOLEAN;
  596.          FUNCTION DoFindFirst(CONST SubArgs : ARRAY OF CONST; 
  597.                                                 VAR P : WORD) : BOOLEAN;
  598.          FUNCTION DoFindFirstCh(ACh : CHAR; VAR P : WORD) : BOOLEAN;
  599.          FUNCTION DoFindLast(CONST SubArgs : ARRAY OF CONST; 
  600.                                                 VAR P : WORD) : BOOLEAN;
  601.          FUNCTION DoFindLastCh(ACh : CHAR; VAR P : WORD) : BOOLEAN;
  602.          FUNCTION DoFindNext(CONST SubArgs : ARRAY OF CONST;
  603.                                                 StartPos : WORD;
  604.                                                 VAR NextPos : WORD) : BOOLEAN;
  605.          FUNCTION DoFindNextCh(ACh : CHAR; StartPos : WORD; 
  606.                                                     VAR NextPos : WORD) : BOOLEAN;
  607.          FUNCTION DoFindPrev(CONST SubArgs : ARRAY OF CONST;
  608.                                                 StartPos : WORD; VAR PrevPos : WORD) : BOOLEAN;
  609.          FUNCTION DoFindPrevCh(ACh : CHAR; StartPos : WORD; 
  610.                                                     VAR PrevPos : WORD) : BOOLEAN;
  611.          FUNCTION DoFirstParseDelim(CONST Args : ARRAY OF CONST;
  612.                                                            DelimCh      : CHAR;
  613.                                                            VAR DelimPos : WORD) : BOOLEAN;
  614.          FUNCTION DoNextParseDelim(CONST Args : ARRAY OF CONST;
  615.                                                             DelimCh          : CHAR;
  616.                                                             StartPos         : WORD;
  617.                                                             VAR NextDelimPos : WORD) : BOOLEAN;
  618. 12.4 Properties
  619. All but one of the properties are read only types.
  620.  
  621. PROPERTY Ch[w : WORD] : CHAR READ GetCh;
  622. Returns the CHAR type at position æwÆ within the objectÆs text string. (Remember æwÆ should be 
  623. calculated from base 0. e.g. the 2nd character would be position 1). If the æwÆ value exceeds the 
  624. length of the object text string an exception error is raised.
  625. Note: If the typed constant æStrClassBaseZeroÆ is set to FALSE then character position starts 
  626. from one (1) not zero (0).
  627.  
  628. PROPERTY Length : WORD READ GetLength;
  629. Returns the current object text string length (excluding the null terminator). Thus, a string of 
  630. æABCÆ would have a length of 3. 
  631.  
  632. PROPERTY MaxSize : WORD READ GetMaxSize;
  633. Returns the current buffer size. This may be larger than the object text string length.
  634.  
  635. PROPERTY SizeInc : WORD READ GetSizeInc WRITE SetSizeInc;
  636. Used to set (or read) the minimum amount in bytes by which the buffer size will increase the 
  637. next time it is required to expand. If a string object anticipates receiving multiple æappendsÆ  
  638. then it is worth using the æSizeIncÆ property to set a large incremental jump in the internal buffer 
  639. size.
  640.  
  641. PROPERTY Text : STRING READ GetString;
  642. Returns the object text string as a STRING type variable. If the object text string variable length 
  643. exceeds 255 characters then an exception error is raised.
  644.  
  645. PROPERTY ZString : PChar READ GetPChar;
  646. Returns a æPCharÆ type to the objectÆs own text string buffer.
  647.  
  648. 12.5 Public Methods
  649. 12.5.1 Constructors/Destructors
  650. CONSTRUCTOR Create;
  651. Instantiates the object with a NIL default PChar value and zero length internal buffer. Example :
  652.     AStrObj := TStringClass.Create;
  653.  
  654. CONSTRUCTOR CreateSize(ASize: WORD);
  655. Instantiates the object with a NIL PChar value and an initial internal buffer size of 'ASize'. This 
  656. constructor is useful for situations where lots of individual appends are anticipated, thus 
  657. avoiding lots of individual buffer re-sizing.
  658. Example :
  659.     AStrObj := TStringClass.CreateSize(2000);
  660.  
  661. CONSTRUCTOR CreateString(CONST Args : ARRAY OF CONST);
  662. Instantiates the object with a starting PChar value equivalent to the æArgsÆ parameters. The Args 
  663. array can include any mix of standard variable types including TStringClass and VCL text 
  664. related objects.
  665. Example:
  666.  
  667.     VAR
  668.         AString : STRING
  669.         APChar : Pchar;
  670.         L           : LONGINT;
  671.         AStrObj : TStringClass;
  672.     BEGIN
  673.         .....
  674.         AString := æThere are æ;
  675.         L := 5;
  676.         GetMem(APChar,256);
  677.         StrCopy(APChar,Æ shopping months to ChristmasÆ);
  678.         AStrObj := TStringClass.CreateString([AString,L,APChar]);  
  679.         ......
  680.  
  681. CONSTRUCTOR CreateNL(CONST Args : ARRAY OF CONST);
  682. Instantiates the object with a starting string value (as with æCreateStringÆ), and appends a new 
  683. line instruction (#13#10) to the end of the PChar data member.
  684.  
  685. CONSTRUCTOR CreateBoolean(B : BOOLEAN; StrType : INTEGER);
  686. Instantiates the object with a starting PChar value converted from a BOOLEAN parameter.  
  687. The 'StrType' parameter determines the type of string conversion, where
  688.  
  689.         StrType constant    String conversion(TRUE/FALSE)
  690.  
  691.         bt_NoYes               No / Yes
  692.         bt_01                    0  /  1
  693.         bt_FalseTrue             False / True
  694.         bt_FT                   F / T
  695.         bt_NY                    N / Y
  696.         bt_OffOn                 Off / On
  697.  
  698. If the 'StrType' is not one of the constant values shown above then no conversion or 
  699. assignment is made.
  700.  
  701. DESTRUCTOR Destroy;
  702. This disposes of all data members and destroys the object. (Do not call this directly. Use the 
  703. æFreeÆ method to dispose of a object)
  704.  
  705.     VAR
  706.         AStrObj : TStringClass;
  707.     BEGIN
  708.         .....
  709.         AStrObj := TStringClass.Create;
  710.         .....
  711.         .....
  712.         AStrObj.Free;  
  713.  
  714. 12.5.2 Copy related
  715. Two functions for copying a string objectÆs attributes.
  716.  
  717. FUNCTION Copy : POINTER; VIRTUAL;
  718. This function instantiates and returns a copy of itself.
  719.  
  720. PROCEDURE CopyFrom(Source : TStringClass);
  721. Copies the attributes and text string buffer of the parameter object æSourceÆ.
  722. 12.5.3 Clear type functions
  723. PROCEDURE Clear;
  724. Disposes of any object string, clears the internal buffer length to NIL and all other object 
  725. attributes to 0.
  726.  
  727. PROCEDURE Empty
  728. Clears the internal text string to æ#0Æ, but leaves the buffer size intact.
  729.  
  730. 12.5.4 Admin type functions
  731. PROCEDURE RecalcLength;
  732. This method re-calculates the length of the text string found in the æFBufferÆ  and assigns the 
  733. result to the æFLengthÆ private variable. This method only ever need be called if a process 
  734. pushes data directly into the objects text buffer.
  735. 12.5.5 Assign related functions
  736. Assign related functions replace the objectÆs existing text string value with the values passed 
  737. within the function parameters.
  738.  
  739. FUNCTION Assign(CONST Args : ARRAY OF CONST) : Pchar;
  740. Copies the æArgsÆ list of parameters into the object, replacing any existing object string value.  If 
  741. æArgsÆ contains more than one element, then the first entry is æassignedÆ to the object, and all 
  742. subsequent elements are appended.  If all elements represent NIL or blank text parameters 
  743. then NIL is assigned to the object text string.
  744. Example:
  745.     VAR
  746.         AString  : STRING;
  747.         Sobj : TStringClass;
  748.     BEGIN
  749.         ....
  750.         ....
  751.         AString := æNow is the winter of our discontentö
  752.         Sobj := TStringClass.Create; 
  753.         SObj.Assign([AString]);    { æNow is the winter of our discontentÆ }
  754.  
  755. FUNCTION AssignFrom(CONST Args : ARRAY OF CONST; Start : WORD) : Pchar;
  756. Converts the æArgsÆ parameter list into a text string and then assigns part of the string starting 
  757. from position æStartÆ (base 0) to the object text buffer.
  758. Example:
  759.     VAR
  760.         AString  : STRING;
  761.         Sobj : TStringClass;
  762.     BEGIN
  763.         ....
  764.         ....
  765.         AString := æNow is the winter of our discontentö
  766.         Sobj := TStringClass.Create; 
  767.         SObj.AssignFrom([AString],7);    { æthe winter of our discontentÆ }
  768.  
  769. If the æArgsÆ generates a NIL string, or the æStartÆ parameter is greater than or equal to the æArgsÆ 
  770. string length then a NIL string value is assigned to the object text buffer.
  771. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  772. starts from one (1) not zero (0).
  773.         
  774. FUNCTION AssignLen(CONST Args : ARRAY OF CONST; Len : WORD) : Pchar;
  775. Converts the æArgsÆ parameter list into a text string and then assigns the first part of the 
  776. parameter string up to æLenÆ characters to the object text buffer.
  777. Example:
  778.     VAR
  779.         AString  : STRING;
  780.         Sobj : TStringClass;
  781.     BEGIN
  782.         ....
  783.         ....
  784.         AString := æNow is the winter of our discontentö
  785.         Sobj := TStringClass.Create; 
  786.         SObj.AssignLen([AString],6);    { æNow isÆ }
  787.  
  788. If æLenÆ exceeds the æArgÆ text string length then the whole æArgsÆ string is assigned to the object 
  789. text buffer.
  790.  
  791. FUNCTION AssignMid(CONST Args : ARRAY OF CONST; Start,Count : WORD) : Pchar;
  792. Converts the æArgsÆ parameter list into a text string and then assigns part of the parameter string 
  793. from æStartÆ (base 0) for æCountÆ characters to the object text buffer.
  794. Example:
  795.     VAR
  796.         AString  : STRING;
  797.         Sobj : TStringClass;
  798.     BEGIN
  799.         ....
  800.         ....
  801.         AString := æNow is the winter of our discontentö
  802.         Sobj := TStringClass.Create; 
  803.         SObj.AssignMid([AString],7,3);    { ætheÆ }
  804.  
  805. If æStartÆ exceeds the parameter string length or the parameter string is Nil then a NIL string is 
  806. assigned to the object. 
  807. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  808. starts from one (1) not zero (0).
  809.  
  810. FUNCTION AssignNL(CONST Args : ARRAY OF CONST) : PChar;
  811. As with æAssignÆ this converts the æArgsÆ parameter to a text string and assigns it to the object 
  812. text buffer. In addition this function appends a æNew LineÆ character combination (#13#10) to the 
  813. end of the object string.
  814.  
  815. FUNCTION AssignPad(CONST Args : ARRAY OF CONST; 
  816.                                       Len : WORD; ACh : CHAR) : PChar;
  817. As with æAssignÆ this converts the æArgsÆ parameter to a text string and assigns it to the object 
  818. text buffer. If the resultant text string is less than æLenÆ characters long, the object string is right 
  819. padded with multiple æAChÆ characters to bring it up to the length æALenÆ.
  820. Example:
  821.     VAR
  822.         AString  : STRING;
  823.         Sobj : TStringClass;
  824.     BEGIN
  825.         ....
  826.         ....
  827.         AString := æNow isö
  828.         Sobj := TStringClass.Create; 
  829.         SObj.AssignPad([AString],8,ÆXÆ);    { æNow isXXÆ }
  830.  
  831. FUNCTION AssignRight(CONST Args : ARRAY OF CONST; Len : WORD) : PChar;
  832. Converts the æArgsÆ parameter list into a text string and then assigns the rightmost æLenÆ 
  833. characters to the object text buffer.
  834. Example:
  835.     VAR
  836.         AString  : STRING;
  837.         Sobj : TStringClass;
  838.     BEGIN
  839.         ....
  840.         ....
  841.         AString := æNow is the winter of our discontentö
  842.         Sobj := TStringClass.Create; 
  843.         SObj.AssignRight([AString],14);    { æour discontentÆ }
  844.  
  845. FUNCTION AssignTrim(CONST Args : ARRAY OF CONST) : PChar;
  846. As with æAssignÆ this converts the æArgsÆ parameter to a text string and assigns it to the object 
  847. text buffer. The resultant text string is then trimmed to remove all leading and trailing space 
  848. characters.
  849. 12.5.6 Append related functions    
  850. A set of functions for appending other text strings to the end or front of the objectÆs own text 
  851. string.
  852.  
  853. FUNCTION Append(CONST Args : ARRAY OF CONST) : Pchar;
  854. Appends the string represented by æArgsÆ to the end of the objectÆs own text string.
  855.  
  856. FUNCTION AppendBoolean(B : BOOLEAN; bt : INTEGER) : Pchar;
  857. Converts the boolean value 'B' to a string of type 'bt' and then appends that string to the end of 
  858. the objectÆs existing text string. The parameter 'bt' can be any of the following values.
  859.  
  860.         'bt' constant            String conversion(FALSE/TRUE)
  861.  
  862.         bt_NoYes               No / Yes 
  863.         bt_01                    0  /  1
  864.         bt_FalseTrue             False / True
  865.         bt_FT                   F / T
  866.         bt_NY                    N / Y
  867.         bt_OffOn                 Off / On
  868.  
  869. If the 'bt' is not one of the constant values shown above then no conversion or append is made.
  870.  
  871. FUNCTION AppendByte(B : BYTE) : Pchar;
  872. Converts the BYTE parameter æBÆ to a string and appends that string to the end of the objectÆs 
  873. existing text string value.
  874.  
  875. FUNCTION AppendCh(C : CHAR) : PChar;
  876. Appends the CHAR æCÆ to the end of the objectÆs existing text string value.
  877.  
  878. FUNCTION AppendDIC(CONST Args : ARRAY OF CONST) : Pchar;
  879. The æArgsÆ parameter is converted to a string. That string is then enclosed by double inverted 
  880. comma characters (ô), and the enclosed string is then appended to the end of the objectÆs own 
  881. text string.
  882.  
  883. FUNCTION AppendDouble(D : DOUBLE; Width,Places : BYTE) : Pchar;
  884. Converts the DOUBLE parameter æDÆ to a right justified string of æWidthÆ characters and æPlacesÆ 
  885. decimal precision. The resulting string is then appended that string to the end of the objectÆs 
  886. existing text string value.
  887.  
  888. FUNCTION AppendDoubleTrim(D : DOUBLE) : Pchar;
  889. Converts the DOUBLE parameter æDÆ to a decimal string with all leading spaces and trailing 
  890. zeroÆs removed. The resulting string is then appended to the end of the objectÆs existing text 
  891. string value.
  892.  
  893. FUNCTION AppendExt(E : EXTENDED; Width,Places : BYTE) : PChar;
  894. Converts the EXTENDED parameter æEÆ to a right justified string of æWidthÆ characters and 
  895. æPlacesÆ decimal precision. The resulting string is then appended to the end of the objectÆs 
  896. existing text string value.
  897.  
  898. FUNCTION AppendExtTrim(E : EXTENDED) : Pchar;
  899. Converts the EXTENDED parameter æEÆ to a decimal string with all leading spaces and trailing 
  900. zeroÆs removed. The resulting string is then appended to the end of the objectÆs existing text 
  901. string value.
  902.  
  903. FUNCTION AppendLen(CONST Args : ARRAY OF CONST; Len : WORD) : Pchar;
  904. The æArgsÆ parameter is converted to a string and the first æLenÆ characters are appended to the 
  905. end of the objectÆs existing text string.
  906.  
  907. FUNCTION AppendLong(L : LONGINT) : Pchar;
  908. Converts the LONG parameter æLÆ to string and appends it to the end of the objectÆs existing text 
  909. string value.
  910.  
  911. FUNCTION AppendMid(CONST Args : ARRAY OF CONST; Start,Count : WORD) : Pchar;
  912. The æArgÆs parameter is converted to a string, and starting from the æStartÆ character (base 0), 
  913. æCountÆ characters of the æArgsÆ string are appended to the end of the objectÆs existing text 
  914. string.
  915. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  916. starts from one (1) not zero (0).
  917.  
  918. FUNCTION AppendNL(CONST Args : ARRAY OF CONST) : Pchar;
  919. Appends the string represented by æArgsÆ to the end of the objectÆs own text string and then 
  920. appends a further æNewLineÆ character combination (#13#10) to the end of the object text string.
  921.  
  922. FUNCTION AppendPad(CONST Args : ARRAY OF CONST; 
  923.                                        Len : WORD; 
  924.                                        ACh : CHAR) : Pchar;
  925. The æArgÆs parameter is converted to a string, and appended to the end of the objectÆs existing 
  926. text string. If the resulting object string is less than æLenÆ characters long, then multiple æAChÆ 
  927. characters are appended to the end of the object text string to create a string of length æLenÆ.
  928.  
  929. FUNCTION AppendPtr(P : POINTER) : Pchar;
  930. Converts the POINTER parameter æPÆ to a hexidecimal string format and appends it to the end 
  931. of the objectÆs existing text string value.
  932.  
  933. FUNCTION AppendReal(R : REAL; Width,Places : BYTE) : PChar;
  934. Converts the REAL parameter æRÆ to a right justified string of æWidthÆ characters and æPlacesÆ 
  935. decimal precision. The resulting string is then appended to the end of the objectÆs existing text 
  936. string value.
  937.  
  938. FUNCTION AppendRight(CONST Args : ARRAY OF CONST; Len : WORD) : Pchar;
  939. The æArgsÆ parameter is converted to a string and the right most æLenÆ characters are appended 
  940. to the end of the objectÆs existing text string.
  941.  
  942. FUNCTION AppendSIC(CONST Args : ARRAY OF CONST) : Pchar;
  943. The æArgsÆ parameter is converted to a string. That string is then enclosed by single inverted 
  944. comma characters (æ), and the enclosed string is then appended to the end of the objectÆs own 
  945. text string.
  946.  
  947. FUNCTION AppendTrim(CONST Args : ARRAY OF CONST) : Pchar;
  948. The æArgsÆ parameter is converted to a string, trimmed of all leading and trailing spaces and 
  949. then appended to the end of the objectÆs existing text string.
  950.  
  951. FUNCTION AppendWithTab(CONST Args : ARRAY OF CONST) : PChar;
  952. The æArgsÆ parameter is converted to a string and appended to the end of the objectÆs own text 
  953. string. A tab character (#9) is then appended to the end of the object text string.
  954.  
  955. FUNCTION NL : PChar;
  956. Appends a æNewLineÆ character combination to the end of the object text string.
  957.  
  958. FUNCTION NLAppend(CONST Args : ARRAY OF CONST) : Pchar;
  959. Appends a æNewLineÆ character combination to the object text string BEFORE appending the 
  960. æArgsÆ string to the end of the object text string.
  961.  
  962. FUNCTION Prepend(CONST Args : ARRAY OF CONST) : Pchar;
  963. The æArgsÆ parameter is converted to a string, and then inserted in front of any existing object 
  964. text string.
  965. 12.5.7 Character element related functions
  966. FUNCTION FirstNonSpaceCh(VAR Ch : CHAR) : WORD;
  967. Returns the position (base 0) of the first non space character in the string. It also sets the 'Ch' 
  968. parameter with the CHAR value at that location. If no non-space characters are found or the 
  969. string is NIL the function returns a 'WORDRESERROR' result (equivalent to $FFFF).
  970. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  971. starts from one (1) not zero (0).
  972.  
  973. FUNCTION HasCh(Ch : CHAR; VAR Pos : WORD) : BOOLEAN;
  974. Returns TRUE is the object's string includes the 'Ch' character. It returns the position of the 
  975. instance of that character in variable 'Pos' (base 0).
  976. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  977. starts from one (1) not zero (0).
  978.  
  979. FUNCTION IsCh(W : WORD; Ch : CHAR) : BOOLEAN;
  980. Returns TRUE if the character in the object's string at position 'W' (base 0) is 'Ch'. The function 
  981. returns FALSE if the string is NIL or 'W' exceeds the string length.
  982. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  983. starts from one (1) not zero (0).
  984.  
  985. FUNCTION IsFirstCh(Ch : CHAR) : BOOLEAN;
  986. Returns TRUE if the first character in the object's string is 'Ch'. The function returns FALSE if 
  987. the string is NIL.
  988.  
  989. FUNCTION IsLastCh(Ch : CHAR) : BOOLEAN;
  990. Returns TRUE if the last character in the object's string is 'Ch'. The function returns FALSE if 
  991. the string is NIL.
  992.  
  993. FUNCTION LastNonSpaceCh(VAR Ch : CHAR) : WORD;
  994. Starting from the end of the object's string, this function returns the position (base 0) of the 
  995. lright-most non space character in the string. It also sets the 'Ch' parameter with the CHAR 
  996. value at that location. If no non-space characters are found or the string is NIL the function 
  997. returns a 'WORDRESERROR' result (equivalent to $FFFF).
  998. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  999. starts from one (1) not zero (0).
  1000.  
  1001. PROCEDURE RemoveLastCh;
  1002. This will remove the last character from the object string.
  1003.  
  1004. PROCEDURE SetCh(W : WORD; Ch : CHAR);
  1005. This will set the character at position 'W' (base 0) to 'Ch'.
  1006. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  1007. starts from one (1) not zero (0).
  1008. 12.5.8 Other data type related functions
  1009. This set of functions provides a means of assigning or appending number type variables into 
  1010. the object string. In most cases the functions return a PChar pointer to the object's own string.
  1011.  
  1012. The æFromXXXXÆ functions are provided for convenience, but the same result can be achieved 
  1013. in most cases by using the æAssignÆ function with the required parameter type.
  1014.  
  1015. FUNCTION FromBoolean(B : BOOLEAN; bt : INTEGER) : PChar;
  1016. Converts the boolean value 'B' to a string of type 'bt' and then assigns that value to the object 
  1017. string. The parameter 'bt' can be any of the following values.
  1018.  
  1019.         'bt' constant            String conversion(FALSE/TRUE)
  1020.  
  1021.         bt_NoYes               No / Yes 
  1022.         bt_01                    0  /  1
  1023.         bt_FalseTrue             False / True
  1024.         bt_FT                   F / T
  1025.         bt_NY                    N / Y
  1026.         bt_OffOn                 Off / On
  1027.  
  1028. If the 'bt' is not one of the constant values shown above then no conversion or assignment is 
  1029. made.
  1030.  
  1031. FUNCTION FromByte(B : BYTE) : PChar;
  1032. Converts the byte number 'B' to a string and assigns that string to the object string.
  1033.  
  1034. FUNCTION FromChar(C : CHAR) : PChar;
  1035. Converts the CHAR 'Ch' to a string and assigns this to the object string.
  1036.  
  1037. FUNCTION FromComponent(AComp : TWinControl) : PChar;
  1038. Assigns to the objectÆs own text buffer the text string associated with VCL component.  This 
  1039. function will accept any VCL object that derives from æTWinControlÆ and responds to the 
  1040. æGetTextBufÆ method. 
  1041.  
  1042. FUNCTION FromComponentItem(AComp : TWinControl; Idx : INTEGER) : PChar;
  1043. Assigns to the objectÆs own text buffer a text string taken from a line or item of the VCL 
  1044. component. For list boxes and combo boxes the æIdxÆ parameter is equivalent to the item 
  1045. number. For memo controls it is equivalent to the line number. 
  1046.  
  1047. Two special cases arise for the æIdxÆ parameter. 
  1048.  
  1049.     All_Items     = -1;
  1050.     Selected_text = -2;
  1051.  
  1052. Use of the æAll_ItemsÆ parameter is equivalent to calling æFromComponentÆ where the whole 
  1053. component text string is retrieved. Use of the æselected_textÆ parameter only retrieves 
  1054. highlighted/selected text.
  1055.  
  1056. FUNCTION FromDouble(D : DOUBLE; Width,Places : BYTE) : PChar;
  1057. Converts the double number 'D' to a string of the designated æWidthÆ in characters and number 
  1058. of decimal places.
  1059.  
  1060. FUNCTION FromDoubleTrim(D : DOUBLE) : Pchar;
  1061. Converts the double number 'D' to a string with all leading white spaces and all trailing zeros 
  1062. removed.
  1063.  
  1064. FUNCTION FromExt(E : EXTENDED; Width,Places : BYTE) : PChar;
  1065. Converts the 'E' number to a string of the declared 'Width' and 'Places' decimal places, and 
  1066. then assigns that string to object string.
  1067.  
  1068. FUNCTION FromExtTrim(E : EXTENDED) : PChar;
  1069. Converts the extended number 'E' to a string with all leading white spaces and all trailing zeros 
  1070. removed.
  1071.  
  1072. FUNCTION FromLong(L : LONGINT) : PChar;
  1073. Converts the 'L' number to a string and assigns that string to the object string.
  1074.  
  1075. FUNCTION FromPtr(P : POINTER) : PChar;
  1076. Converts the pointer value 'P' to a string of type 'SEGMENT:OFFSET' and then assigns that 
  1077. string to the object.
  1078.  
  1079. FUNCTION FromReal(R : REAL; Width,Places : BYTE) : PChar;
  1080. Converts the 'R' number to a string of the declared 'Width' and 'Places' decimal places, and 
  1081. then assigns that string to the object string.
  1082.  
  1083. FUNCTION FromRealTrim(R : REAL) : PChar;
  1084. Converts the REAL number 'R' to a string with all leading white spaces and all trailing zeros 
  1085. removed.
  1086.  
  1087. FUNCTION FromRGB(C : TColorRef) : PChar;
  1088. Converts the RGB colour value into a comma delimited string of type 'RED,GREEN,BLUE', and 
  1089. then assigns that string to the object.(This is useful for writing values back to an INI file).
  1090.  
  1091. FUNCTION HexFromByte(B : BYTE) : PChar;
  1092. Converts the byte value 'B' into a hexidecimal string and assigns that string to the object.
  1093.  
  1094. FUNCTION HexFromLong(L : LONGINT) : PChar;
  1095. Converts the 'L' number into a hexidecimal string of type 'nnnn:nnnn' and assigns that string to 
  1096. the object.
  1097.  
  1098. FUNCTION HexFromPtr(P : POINTER) : PChar;
  1099. Converts the pointer 'P' into a hexidecimal string of type 'nnnn:nnnn' and assigns that string to 
  1100. the object.
  1101.  
  1102. FUNCTION HexFromWord(W : WORD) : PChar;
  1103. Converts the 'W' number into a hexidecimal string of type 'nnnn' and assigns that string to the 
  1104. object.
  1105.  
  1106. FUNCTION ToBoolean(VAR B : BOOLEAN) : BOOLEAN;
  1107. Returns TRUE if the object string can be converted into a BOOLEAN type. The variable 
  1108. parameter 'B' is set with the converted value. The conversion is tested against the range of 
  1109. boolean to string conversions permitted by the 'bt_xxx' constants.
  1110.  
  1111. FUNCTION ToByte(VAR B : BYTE) : BOOLEAN;
  1112. Returns TRUE if the object string can be converted into a BYTE number type. The variable 
  1113. parameter 'B' is set with the converted value.
  1114.  
  1115. FUNCTION ToChar(VAR C : CHAR) : BOOLEAN;
  1116. Returns TRUE if the string has at least one character, and assigns the first character of the 
  1117. string into the parameter 'C'.
  1118.  
  1119. FUNCTION ToComponent(AComp : TWinControl) : BOOLEAN;
  1120. This assigns the objectÆs own text string to the VCL component. The process will return TRUE if 
  1121. the assignment is completed. This method will work with any descendant of the æTWinControlÆ 
  1122. class that implements a æSetTextBufÆ method.
  1123.  
  1124. FUNCTION ToDouble(VAR D : DOUBLE) : BOOLEAN;
  1125. Returns TRUE if the object string can be converted into a DOUBLE number type. The variable 
  1126. parameter 'D' is set with the converted value.
  1127.  
  1128. FUNCTION ToExt(VAR E : EXTENDED) : BOOLEAN;
  1129. Returns TRUE if the object string can be converted into an EXTENDED number type. The 
  1130. variable parameter 'E' is set with the converted value.
  1131.  
  1132. FUNCTION ToInteger(VAR I : INTEGER) : BOOLEAN;
  1133. Returns TRUE if the object string can be converted into an INTEGER number type. The 
  1134. variable parameter 'I' is set with the converted value. If the object string includes a decimal 
  1135. place dot the conversion will fail.
  1136.  
  1137. FUNCTION ToLong(VAR L : LONGINT) : BOOLEAN;
  1138. Returns TRUE if the object string can be converted into an LONGINT number type. The 
  1139. variable parameter 'L' is set with the converted value. If the object string includes a decimal 
  1140. place dot the conversion will fail.
  1141.  
  1142. FUNCTION ToReal(VAR R : REAL) : BOOLEAN;
  1143. Returns TRUE if the object string can be converted into an REAL number type. The variable 
  1144. parameter 'R' is set with the converted value.
  1145.  
  1146. FUNCTION ToRGB(VAR C : TColorRef) : BOOLEAN;
  1147. Returns TRUE if the object string can be converted from a 'RED,GREEN,BLUE' delimited string 
  1148. type into a valid TColorRef value. This is useful for reading INI file values. (Refer to the 
  1149. 'FromRGB' function).
  1150.  
  1151. FUNCTION ToWord(VAR W : WORD) : BOOLEAN;
  1152. Returns TRUE if the object string can be converted from a text string type into a valid WORD  
  1153. value. The variable parameter 'W' is set with the converted value.
  1154. 12.5.9 SysUtils unit compatible functions
  1155. This section provides a set of object methods to mimic the string related functions found in the 
  1156. æSysUtilsÆ unit. In most cases the function result or target string has been omitted from the list of 
  1157. functions parameters.
  1158.  
  1159. These methods are quite useful if you are looking to quickly amend existing code with 
  1160. TStringClass based equivalent functions.
  1161.  
  1162. The use of any function like æIsValidIndent that presumes a STRING type parameter will create 
  1163. an exception error if the objectÆs text string is greater than 255 characters long.
  1164.  
  1165. FUNCTION AppendStr(CONST S: string) : Pchar;
  1166. Appends the æSÆ string to the end of the objectÆs own text buffer.
  1167.  
  1168. FUNCTION UpperCase(CONST S: string) : Pchar;
  1169. Converts the æSÆ parameter to upper case and assigns to the object text buffer, replacing any 
  1170. existing text string value.
  1171.  
  1172. FUNCTION LowerCase(const S: string): PChar;
  1173. Converts the æSÆ parameter to lower case and assigns to the object text buffer, replacing any 
  1174. existing text string value.
  1175.  
  1176. FUNCTION CompareStr(CONST S2: STRING): Integer;
  1177. A case sensitive comparison between the objectÆs own text string and the parameter æS2Æ string. 
  1178. This is equivalent to the æCompareÆ function.
  1179.  
  1180. FUNCTION CompareText(CONST S2: STRING): Integer;
  1181. A comparison between the objectÆs own text string and the parameter æS2Æ string, which ignores 
  1182. case. This is equivalent to the æCompareIÆ function.
  1183.  
  1184. FUNCTION AnsiUpperCase(CONST S : STRING) : Pchar;
  1185. AnsiUpperCase converts all characters in the given string æSÆ to upper case and assigns the 
  1186. result to the object text buffer. The conversion uses the currently installed language driver. 
  1187.  
  1188. FUNCTION AnsiLowerCase(CONST S : STRING) : PChar;
  1189. AnsiUpperCase converts all characters in the given string æSÆ to lower case and assigns the 
  1190. result to the object text buffer. The conversion uses the currently installed language driver. 
  1191.  
  1192. FUNCTION AnsiCompareStr(CONST S2: STRING): Integer;
  1193. AnsiCompareStr compares the objectÆs own text string to S2, with case-sensitivity. The 
  1194. compare operation is controlled by the currently installed language driver. The return value is 
  1195. the same as for CompareStr.
  1196.  
  1197. FUNCTION AnsiCompareText(CONST S2: STRING): Integer;
  1198. AnsiCompareText compares the objectÆs text string to S2, without case-sensitivity. The 
  1199. compare operation is controlled by the currently installed language driver. The return value is 
  1200. the same as for CompareText. 
  1201.  
  1202. FUNCTION IsValidIdent: Boolean;
  1203. IsValidIdent returns true if the object string is a valid identifier. An identifier is defined as a 
  1204. character from the set ['A'..'Z', 'a'..'z', '_'] followed by zero or more characters from the set 
  1205. ['A'..'Z', 'a'..'z', '0..'9', '_'].
  1206.  
  1207. FUNCTION IntToStr(Value: Longint): Pchar;
  1208. Converts the LONGINT æValueÆ into a text string and assigns it to the object text buffer, 
  1209. replacing any existing text value.
  1210.  
  1211. FUNCTION IntToHex(Value: Longint; Digits: Integer): Pchar;
  1212. The IntToHex function converts a number into a string containing the number's hexadecimal 
  1213. (base 16) representation with a specific number of digits; and assigns the resultant string to the 
  1214. object text buffer.
  1215.  
  1216. FUNCTION StrToInt : Longint;
  1217. The StrToInt function converts the object text string representing an integer-type number in 
  1218. either decimal or hexadecimal notation into a number. If the string does not represent a valid 
  1219. number, StrToInt raises an EConvertError exception. Use of the alternative æToLongÆ function is 
  1220. recommended.
  1221.  
  1222. FUNCTION StrToIntDef(Default: Longint): Longint;
  1223. The StrToIntDef function converts the object text string into a number. If S does not represent a 
  1224. valid number, StrToIntDef returns the number passed in Default.
  1225.  
  1226. FUNCTION LoadStr(Ident: Word): Pchar;
  1227. LoadStr loads the string resource given by Ident from the application's executable file into the 
  1228. objectÆs tetx buffer. If the string resource does not exist, an empty string is returned. 
  1229.  
  1230. FUNCTION FmtLoadStr(Ident: Word; CONST Args: ARRAY OF CONST): Pchar;
  1231. FmtLoadStr loads a string from a program's resource string table and uses that sting, plus the 
  1232. args array, as a parameter to Format. Ident is the string resource ID of the desired format 
  1233. string.
  1234. Result is the output of Format. The resulting formatted text string is assigned to the object text 
  1235. buffer.
  1236.  
  1237. FUNCTION Format(CONST Format: STRING; CONST Args: ARRAY OF CONST): Pchar;
  1238. This function formats the series of arguments in the open array æArgsÆ. Formatting is controlled 
  1239. by the æFormatÆ parameter; the results are assigned to the objectÆs text buffer.
  1240.  
  1241. FUNCTION FloatToStr(Value: Extended): Pchar;
  1242. FloatToStr converts the floating-point value given by Value to its string representation, and 
  1243. assigns that string to the object text buffer. The conversion uses general number format with 15 
  1244. significant digits.
  1245.  
  1246. FUNCTION FloatToStrF(Value: Extended; 
  1247.                                        Format: TFloatFormat; 
  1248.                                        Precision, Digits: Integer): Pchar;
  1249. FloatToStrF converts the floating-point value given by Value to its string representation, and 
  1250. assigns that string to the object buffer.
  1251.  
  1252. FUNCTION FormatFloat(const Format: STRING; Value: Extended): Pchar;
  1253. FormatFloat formats the floating-point value given by Value using the format string given by 
  1254. Format, and assigns the resulting string to the object text buffer.
  1255.  
  1256. FUNCTION StrToFloat : Extended;
  1257. StrToFloat converts the object text string to a floating-point value. The string must consist of an 
  1258. optional sign (+ or -), a string of digits with an optional decimal point, and an optional 'E' or 'e' 
  1259. followed by a signed integer. Leading and trailing blanks in the string are ignored. The 
  1260. DecimalSeparator global variable defines the character that must be used as a decimal point. 
  1261. Thousand separators and currency symbols are not allowed in the string. If the string doesn't 
  1262. contain a valid value, an EConvertError exception is raised. 
  1263. 12.5.10 Strings unit compatible functions
  1264. This section provides a set of object methods to mimic the STRINGS unit functions. In most 
  1265. cases the 1st parameter of the equivalent STRINGS unit function has been omitted.  Unlike the 
  1266. STRINGS unit functions these methods include error and parameter value testing for NIL and 
  1267. zero length strings. In most cases these methods return a PChar pointer to the object's string.
  1268.  
  1269. These methods are quite useful if you are looking to quickly amend existing PChar orientated 
  1270. source code with TStringClass based equivalent functions.
  1271.  
  1272. FUNCTION StrCat(Source : PChar) : PChar;
  1273. Appends the string 'Source; to the end of the object's own string (equivalent to the 'Append' 
  1274. method).
  1275.  
  1276. FUNCTION StrComp(Str2 : PChar) : INTEGER;
  1277. Compares the object's string with another string 'Str2'. The comparison is case sensitive. 
  1278. (Equivalent to the 'Compare' method).
  1279.  
  1280. FUNCTION StrCopy(Source : PChar) : PChar;
  1281. Copies the 'Source' string into the object string (equivalent to the 'Assign' method).
  1282.  
  1283. FUNCTION StrECopy(Source : PChar) : PChar;
  1284. Copies the 'Source' string into the object string and returns a PChar pointer to the end of the 
  1285. resulting string.
  1286.  
  1287. FUNCTION StrEnd : PChar;
  1288. Returns a PChar pointer to the end of the object string (i.e. the \0 NULL terminator character 
  1289. position).
  1290.  
  1291. FUNCTION StrIComp(Str2 : PChar) : INTEGER;
  1292. Compares the object string with the parameter string 'Str2', ignoring any case differences. It 
  1293. returns a '-1', '0' or '1' result as defined in the 'Compare_xxx' constants. (Equivalent to the 
  1294. 'CompareI' method).
  1295.  
  1296. FUNCTION StrLCat(Source : PChar; MaxLen : WORD) : PChar;
  1297. Appends the first 'Maxlen' characters of parameter 'Source' to the end of the object's own string 
  1298. (equivalent to the 'AppendLen' method).
  1299.  
  1300. FUNCTION StrLIComp(Str2 : PChar; MaxLen : WORD) : INTEGER;
  1301. Compares the first 'Maxlen' characters of the object string with the string 'Str2', ignoring case. 
  1302. The function returns one of the 'Compare_xxx' constants. (Equivalent to the 'CompareLI' 
  1303. method).
  1304.  
  1305. FUNCTION StrLComp(Str2 : PChar; MaxLen : WORD) : INTEGER;
  1306. Compares the first 'Maxlen' characters of the object string with the string 'Str2',  including case. 
  1307. The function returns one of the 'Compare_xxx' constants. (Equivalent to the 'CompareL' 
  1308. method).
  1309.  
  1310. FUNCTION StrLCopy(Str2 : PChar; MaxLen : WORD) : INTEGER;
  1311. Copies the first 'MaxLen' characters of 'Str2' into the object string (equivalent to the 'AssignLen' 
  1312. method).
  1313.  
  1314. FUNCTION StrLen : WORD;
  1315. Returns the length of the object string (equivalent to the 'GetLength' method).
  1316.  
  1317. FUNCTION StrLower : PChar;
  1318. Converts the object string to lower case (equivalent to the 'ToLower' method).
  1319.  
  1320. FUNCTION StrMove(Source : PChar; Count : WORD) : PChar;
  1321. Copies the first 'Count' characters of 'Source' into the string object.
  1322.  
  1323. FUNCTION StrPas : STRING;
  1324. Returns the object PChar as a Pascal STRING variable.
  1325.  
  1326. FUNCTION StrPCopy(Source : STRING) : PChar;
  1327. Copies a Pascal STRING type into the object PChar string.
  1328.  
  1329. FUNCTION StrPos(Str2 : PChar) : PChar;
  1330. Returns the PChar position of sub string 'Str2' within the object's own string. The function 
  1331. returns NIL if no substring is found. (refer to the 'FindFirst' method for similar functionality).
  1332.  
  1333. FUNCTION StrRScan(Chr : CHAR) : PChar;
  1334. Returns a PChar pointer to the right most location of the 'Chr' CHAR in the object string.
  1335.  
  1336. FUNCTION StrScan(Chr : CHAR) : PChar;
  1337. Returns a PChar pointer to the first location (from the left side) of the 'Chr' CHAR in the object 
  1338. string.
  1339.  
  1340. FUNCTION StrUpper : PChar;
  1341. Converts the object string to upper case (equivalent to the 'ToUpper' method).
  1342. 12.5.11 Comparison related functions
  1343. A set of methods for comparing the object string with another string.  For functions that return 
  1344. INTEGER results the values are interpreted as:
  1345.  
  1346.     Result type                        Result    Constant Id
  1347.  
  1348.     Object string less than other string        -1    Compare_LT
  1349.     Object string equal to other string         0    Compare_EQ    
  1350.     Object string greater than other string     1    Compare_GT
  1351.  
  1352. The StrClass.Pas unit includes three 'Compare_XX' constants that map to the -1/0/1 results to 
  1353. aide source code legibility.
  1354.  
  1355. FUNCTION Compare(CONST Args : ARRAY OF CONST) : INTEGER;
  1356. Compares the object string to the other string defined in æArgsÆ and returns an integer 
  1357. comparison result of type 'Compare_xx'.  The test is case sensitive.
  1358.  
  1359. FUNCTION CompareI(CONST Args : ARRAY OF CONST) : INTEGER;
  1360. Compares the object string to the other string defined in æArgsÆ and returns an integer 
  1361. comparison result of type 'Compare_xx'.  The test ignores case.
  1362.  
  1363. FUNCTION CompareL(CONST Args : ARRAY OF CONST; Len : WORD) : INTEGER;
  1364. Compares the first 'Len' characters of the object string with the same set of characters from the 
  1365. 'Args'  string. The test is case sensitive.
  1366.  
  1367. FUNCTION CompareLI(CONST Args : ARRAY OF CONST; Len : WORD) : INTEGER;
  1368. Compares the first 'Len' characters of the object string with the same set of characters from the 
  1369. 'Args'  string. The test ignores case.
  1370.  
  1371. FUNCTION CompareLong(L : LONGINT) : INTEGER;
  1372. The function attempts to convert the object string to a LONGINT number type and then 
  1373. compares the converted number to the 'L' number, returning one of the 'Compare_xx'  type 
  1374. results. If the string cannot be converted to a LONGINT the function returns a 'Compare_LT' 
  1375. result.
  1376.  
  1377. FUNCTION CompareDouble(D : DOUBLE) : INTEGER;
  1378. The function attempts to convert the object string to a DOUBLE number type and then 
  1379. compares the converted number to the 'D' number, returning one of the 'Compare_xx'  type 
  1380. results. If the string cannot be converted to a double the function returns a 'Compare_LT' result.
  1381.  
  1382. FUNCTION CompareExt(E : EXTENDED) : INTEGER;
  1383. The function attempts to convert the object string to a EXTENDED number type and then 
  1384. compares the converted number to the 'E' number, returning one of the 'Compare_xx'  type 
  1385. results. If the string cannot be converted to a double the function returns a 'Compare_LT' result.
  1386.  
  1387. FUNCTION IsSame(CONST Args : ARRAY OF CONST) : BOOLEAN;
  1388. Returns TRUE if the object string is the same as the 'Args' string. The test is case sensitive. 
  1389. This is equivalent to the command:
  1390.  
  1391.     IsSame := (Compare(Other) = Compare_EQ);
  1392.  
  1393. FUNCTION IsSameI(Other : PChar) : BOOLEAN;
  1394. Returns TRUE if the object string is the same as the 'Args' string. The test ignores case. This is 
  1395. equivalent to the command:
  1396.  
  1397.     IsSameI := (CompareI(Other) = Compare_EQ);
  1398.  
  1399. FUNCTION IsSameL(CONST Args : ARRAY OF CONST; Len : WORD) : BOOLEAN;
  1400. Returns TRUE if the first 'Len' characters of the object string are the same as the 'Args' string. 
  1401. The test is case sensitive. This is equivalent to the command:
  1402.  
  1403.     IsSameL := (CompareL(Other,Len) = Compare_EQ);
  1404.  
  1405. FUNCTION IsSameLI(CONST Args : ARRAY OF CONST; Len : WORD) : BOOLEAN;
  1406. Returns TRUE if the first 'Len' characters of the object string are the same as the 'Args' string. 
  1407. The test ignores case. This is equivalent to the command:
  1408.  
  1409.     IsSameLI := (CompareLI(Other,Len) = Compare_EQ);
  1410.  
  1411. FUNCTION Includes(CONST Args : ARRAY OF CONST) : BOOLEAN;
  1412. Returns TRUE if the æArgsÆ text string is to be found within the objectÆs own text string. The 
  1413. comparison is case sensitive.
  1414.  
  1415. FUNCTION Within(CONST Args : ARRAY OF CONST) : BOOLEAN;
  1416. Returns TRUE if the objectÆs own text string is found within the æArgsÆ text string. The 
  1417. comparison is case sensitive.
  1418. 12.5.12 Insert/Delete/Trim related functions
  1419. Most of these functions return a PChar pointer to the object's own string.
  1420.  
  1421. FUNCTION AddDIC : PChar;
  1422. Inserts a double inverted comma (ô) character at the start and end of the object string. The 
  1423. insert at either end  is only made where the character is not already there.
  1424.  
  1425. FUNCTION AddDIC : PChar;
  1426. Inserts a single inverted comma (æ) character at the start and end of the object string. The insert 
  1427. at either end  is only made where the character is not already there.
  1428.  
  1429. FUNCTION Delete(Index,Count : WORD) : PChar;
  1430. Deletes from the object string characters starting from position 'Index' (base 0) for 'Count' 
  1431. number of characters. Example:
  1432.  
  1433.             Str1.Assign('This is a test')
  1434.             Str1.Delete(5,5);
  1435.             Writeln(Str1.ZString);    {This test}
  1436.  
  1437. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  1438. starts from one (1) not zero (0).
  1439.  
  1440. FUNCTION DeleteFrom(Index : WORD) : PChar;
  1441. Deletes from the object string all characters starting from position 'Index' (base 0) for. Example:
  1442.  
  1443.             Str1.Assign('This is a test')
  1444.             Str1.DeleteFrom(3);
  1445.             Writeln(Str1.ZString);    { Thi }
  1446.  
  1447. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  1448. starts from one (1) not zero (0).
  1449.  
  1450. FUNCTION Insert(CONST Args : ARRAY OF CONST; Index : WORD) : PChar;
  1451. Inserts string 'Args' into the object string at position 'Index' (base 0). 
  1452. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  1453. starts from one (1) not zero (0).
  1454.  
  1455. FUNCTION InsertL(CONST Args : ARRAY OF CONST; Len,Index : WORD) : PChar;
  1456. Inserts 'Len' characters from string 'Args' into the object string at position 'Index' (base 0).
  1457. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  1458. starts from one (1) not zero (0).
  1459.  
  1460. FUNCTION PadCentre(NewLen : WORD; Ch : CHAR) : PChar;
  1461. Expands the object string to a new length of 'NewLen' characters. If the old object string was 
  1462. less than 'Newlen' long the string is padded equally at both front and end with the 'Ch' character 
  1463. to create a string of the required overall length.
  1464.  
  1465. FUNCTION PadEnd(NewLen : WORD; Ch : CHAR) : PChar;
  1466. Expands the object string to a new length of 'NewLen' characters. If the old object string was 
  1467. less than 'Newlen' long the string is padded at its end with the 'Ch' character to create a string of 
  1468. the required overall length.
  1469.  
  1470. FUNCTION PadFront(NewLen : WORD; Ch : CHAR) : PChar;
  1471. Expands the object string to a new length of 'NewLen' characters. If the old object string was 
  1472. less than 'NewLen' long the string is padded at its front with the 'Ch' character to create a string 
  1473. of the required overall length.
  1474.  
  1475. FUNCTION RemoveDIC : PChar;
  1476. If the object string has double inverted commas ( " ) at the start and end of its string these are 
  1477. removed from both ends.
  1478.  
  1479. FUNCTION RemoveSIC : PChar;
  1480. If the object string has single inverted commas ( ' ) at the start and end of its string these are 
  1481. removed from both ends.
  1482.  
  1483. FUNCTION Trim : PChar;
  1484. Removes all leading and trailing spaces from the object string.
  1485.  
  1486. FUNCTION TrimEnd : PChar;
  1487. Removes all trailing spaces from the object string.
  1488.  
  1489. FUNCTION TrimFront : PChar;
  1490. Removes all leading spaces from the object string.
  1491.  
  1492. FUNCTION TrimZero : PChar;
  1493. Removes all trailing '0' zero characters from the object string. (Useful for removing redundant 
  1494. zeros from real number strings). If the last character in the just trimmed string is æ.Æ (decimal 
  1495. dot) then that is also removed.
  1496. 12.5.13 Command Line related functions
  1497. FUNCTION FindCmdLine : Pchar;
  1498. Recreates the current applicationÆs command line (both EXE and all parameters) as a string 
  1499. and assigns it to the object text buffer.
  1500.  
  1501. FUNCTION FindCmdLineAndParse(IncExeParam : BOOLEAN;
  1502.                                                            VAR AList   : TObjectContainer) : Pchar;
  1503. Recreates the current applicationÆs command line (both EXE and all parameters) as a string 
  1504. and assigns it to the object text buffer. The component parts of the command line are then 
  1505. assigned to new string objects which are added to the æAListÆ container object (which owns those 
  1506. new string objects). If æIncExeParamÆ is TRUE then the index 0 command line parameter is 
  1507. included on the container list. 
  1508.  
  1509. FUNCTION FindCmdLineParam(Idx : INTEGER) : Pchar;
  1510. Retrieves a component part of an applicationÆs command line parameter and assigns it to the 
  1511. object text buffer. An Idx of æ0Æ retrieves the application EXE path.
  1512. 12.5.14 Resource string related functions
  1513. FUNCTION AppendStringRes(Instance : THandle; Id : WORD) : Pchar;
  1514. Loads the string resource æIdÆ and appends it to the end of the existing object text string. 
  1515.  
  1516. FUNCTION LoadStringRes(Instance : THandle; Id : WORD) : Pchar;
  1517. Assigns to the object the string loaded from the task resources that has an identifier of 'Id'.
  1518. 12.5.15 INI file related functions
  1519. A small set of methods to help with loading string resources and INI file settings.
  1520.  
  1521. FUNCTION ReadIniKeyword(CONST IniFileArgs : ARRAY OF CONST;
  1522.                                                CONST SectionArgs : ARRAY OF CONST;
  1523.                                               CONST KeyWordArgs : ARRAY OF CONST) : WORD;
  1524. Assigns to the object string the INI file keyword value associated with the keyword, section and 
  1525. INI file name æxxxxArgsÆ parameters.
  1526.  
  1527. FUNCTION WriteIniKeyword(CONST IniFileArgs : ARRAY OF CONST;
  1528.                                                CONST SectionArgs : ARRAY OF CONST;
  1529.                                                CONST KeyWordArgs : ARRAY OF CONST) : WORD;
  1530. Writes to the INI file the object string associated with the keyword, section and INI file name 
  1531. æxxxArgsÆ parameters.
  1532.  
  1533. FUNCTION FindIniSectionKeywords(CONST IniFileArgs,
  1534.                                                             SectionArgs  : ARRAY OF CONST;
  1535.                                                             VAR   AList : TObjectContainer) : WORD;
  1536. Loads into the objectÆs own buffer the text string equivalent to all keywords found in the 
  1537. æSectionArgsÆ section of the æIniFileArgsÆ INI file. The keywords are then parsed and placed as 
  1538. individual TStringClass instances on the container object æAlistÆ. The list owns the newly created 
  1539. string objects. The functions returns the number of keywords found.
  1540. 12.5.16 DOS path/filename related functions
  1541. A set of methods for helping with DOS path and file name string processing. Most functions 
  1542. return a PChar pointer to the object's own string.
  1543.  
  1544. FUNCTION AddBackSlash : PChar;
  1545. Adds a '\' back slash to the end of the object string.
  1546.  
  1547. FUNCTION AddFilterDesc(CONST DescArgs,ExtArgs : ARRAY OF CONST) : PChar;
  1548. This method builds a string in the format required by the æFilterÆ property of the æTOpenDialogÆ 
  1549. VCL component.  æDescArgsÆ represents a description of the file type, whilst æExtArgsÆ holds the 
  1550. file extension. For example, the command à.
  1551.  
  1552. SObj.AddFilterDesc([æPascal sourceÆ],[æPASÆ])
  1553.  
  1554. à.. builds the string à.
  1555.  
  1556.     Pascal Source (*.PAS)|*.PAS
  1557.  
  1558. The same method can be called multiple times, with each secondary call adding the new 
  1559. formatted text to the end of the object text string. For example à
  1560.  
  1561.  
  1562. SObj.AddFilterDesc([æPascal sourceÆ],[æPASÆ])
  1563. SObj.AddFilterDesc([æC sourceÆ],[æCÆ])
  1564.  
  1565. à.. builds the string à.
  1566.  
  1567.     Pascal Source (*.PAS)|*.PAS|C Source (*.C)|*.C
  1568.  
  1569. The æExtArgsÆ can include either or both of the æ*Æ or æ.Æ characters. If either or both are missing 
  1570. the method adds them to the resulting string.
  1571.  
  1572. FUNCTION BuildPathName(CONST DirArgs,
  1573.                                              FileNameArgs,
  1574.                                             ExtArgs : ARRAY OF CONST) : PChar;
  1575. Builds a validated path name from the three components.
  1576.  
  1577. FUNCTION CreateDirectory : BOOLEAN;
  1578. This function will attempt to create the DOS directory of the directory part of the objectÆs own 
  1579. text string. The text string can hold a full file name (i.e. æC:\test\test.txtÆ). The process will 
  1580. extract the related directory path (without affecting the object string) and try to create that 
  1581. directory. The function returns TRUE if the directory was successfully created.
  1582.  
  1583. FUNCTION DefaultExtension(CONST Args : ARRAY OF CONST) : Pchar;
  1584. If the object string has no file name extension the extension 'Args' is appended to the end of the 
  1585. object string. The 'Args' parameter can have a '.' prefix. The method will check for duplicate '.' 
  1586. entries.
  1587.  
  1588. FUNCTION DirectoryExists : BOOLEAN;
  1589. Returns TRUE if the directory component of the object string value exists. The object string can 
  1590. be a full path/file name. This method will extract the directory component (without affecting the 
  1591. object string) and test for the directory's existence.
  1592.  
  1593. FUNCTION DriveExists : BOOLEAN;
  1594. Returns TRUE if the drive letter component of the object string value exists. The object string 
  1595. can be a full path/file name. This method will extract the drive letter component (without 
  1596. affecting the object string) and test for the drive's existence.
  1597.  
  1598. FUNCTION ExpandFileName : Pchar;
  1599. Converts a DOS path file into a full drive, path and file name, removing any æ..Æ type re-
  1600. directions.
  1601.  
  1602. FUNCTION FileExists : BOOLEAN;
  1603. Returns TRUE if the object string representing a DOS path name exists as a DOS file.
  1604.  
  1605. FUNCTION FileSplit(VAR ADirObj,ANameObj,AnExtObj : TStringClass) : WORD;
  1606. Takes the objectÆs own text string and splits it into the three DOS parts of directory/path, 
  1607. filename (excluding extension) and extension (excluding the æ.Æ dot). The three resulting sub 
  1608. strings are assigned to the three TStringClass parameters. These TStringClass objects must be 
  1609. instantiated prior to calling this function. The function returns a WORD value that indicates the 
  1610. presence of each sub string. This WORD value is composed from the æfs_xxxÆ constants :
  1611.  
  1612.     fs_Directory = 1;
  1613.     fs_Name      = 2;
  1614.     fs_extension = 4;
  1615.  
  1616. FUNCTION FindCurrentDir : PChar;
  1617. Copies the current DOS directory path name into the object text string.
  1618.  
  1619. FUNCTION FindRelPath(CONST StartDirArgs,EndDirArgs : ARRAY OF CONST) : PChar; 
  1620. Builds a DOS path string that allows the relative movement from the æStartDirArgsÆ directory to 
  1621. the end æEndDirArgsÆ directory. If both args are the same or the drives are different a NULL 
  1622. string is assigned to the object. For example :
  1623.  
  1624.     TObj := TStringClass.Create;
  1625.           TObj.FindRelPath(['c:\windows'],['c:\test\data']);    { æ..\test\dataÆ }
  1626.  
  1627. FUNCTION ForceExtension(CONST Args : ARRAY OF CONST) : Pchar;
  1628. Force the object string to have the file name extension 'Args'.
  1629.  
  1630. FUNCTION GetSystemDirectory : PChar;
  1631. Assigns the Windows system directory path to the object text string.
  1632.  
  1633. FUNCTION GetWindowsDirectory : PChar;
  1634. Assigns the Windows directory path to the object text string.
  1635.  
  1636. FUNCTION HasBackSlash : BOOLEAN;
  1637. Returns TRUE if the last character of the object string is a '\' back slash.
  1638.  
  1639. FUNCTION HasDrive : BOOLEAN;
  1640. Returns TRUE if the object string is at least three characters long and the first letter is between 
  1641. 'A' and 'Z'.
  1642.  
  1643. FUNCTION HasExtension(VAR DotPos : WORD) : BOOLEAN;
  1644. Returns TRUE if the object string includes an extension, setting the 'DotPos' variable parameter 
  1645. with the base 0 position of the '.' delimiter.
  1646.  
  1647. FUNCTION HasFileName : BOOLEAN;
  1648. Returns TRUE if the object string has a file name component.
  1649.  
  1650. FUNCTION HasDirectory : BOOLEAN;
  1651. Returns TRUE iof the object string has a directory component.
  1652.  
  1653. FUNCTION JustDirectory(CONST Args : ARRAY OF CONST) : Pchar;
  1654. Extracts from the 'Args' parameter the directory component and assigns this to the object string.
  1655.  
  1656. FUNCTION JustExtension(CONST Args : ARRAY OF CONST) : PChar;
  1657. Extracts from the 'ArgsÆ parameter the extension component and assigns this to the object 
  1658. string.
  1659.  
  1660. FUNCTION JustFileName(CONST Args : ARRAY OF CONST) : Pchar;
  1661. Extracts from the 'Args' parameter the DOS æ8.3Æ style file name component and assigns this to 
  1662. the object string.
  1663.  
  1664. FUNCTION JustName(CONST Args : ARRAY OF CONST) : Pchar;
  1665. Extracts from the 'Args' parameter the file name component (excluding any æ.Æ and extension) 
  1666. and assigns this to the object string.
  1667.  
  1668. FUNCTION RemoveDirectory : BOOLEAN;
  1669. This function will attempt to delete a DOS directory of the directory part of the objectÆs own text 
  1670. string. The text string can hold a full file name (i.e. æC:\test\test.txtÆ). The process will extract the 
  1671. related directory path (without affecting the object string) and try to delete that directory. The 
  1672. function returns TRUE if the directory was successfully deleted.
  1673.  
  1674. FUNCTION SameDrive(CONST Args : ARRAY OF CONST) : BOOLEAN;
  1675. Compares the objectÆs own string to the string in æArgÆs and returns TRUE if they share the 
  1676. same disk drive letter. This test process presumes that each entry is at least three characters 
  1677. long (i.e. æC:\Æ)
  1678.  
  1679. FUNCTION SameDirectory(CONST Args : ARRAY OF CONST) : BOOLEAN;
  1680. Compares the objectÆs own string to the string in æArgÆs and returns TRUE if they share the 
  1681. same DOS directory.  Example:
  1682.  
  1683.     AStrObj := TStringClass.CreateString([æc:\test\company.datÆ]);
  1684.     BStrObj := TStringClass.CreateString([æc:\test\employee.datÆ]);
  1685.     AStrObj.SameDirectory([BStrObj]);  { returns TRUE }
  1686.  
  1687. FUNCTION SameExtension(CONST Args : ARRAY OF CONST) : BOOLEAN;
  1688. Compares the objectÆs own string to the string in æArgÆs and returns TRUE if they share the 
  1689. same DOS file name extension.
  1690.  
  1691. FUNCTION SameFileName(CONST Args : ARRAY OF CONST) : BOOLEAN;
  1692. Compares the objectÆs own string to the string in æArgÆs and returns TRUE if they share the 
  1693. same DOS æ8.3Æ file name.
  1694.  
  1695. FUNCTION SameName(CONST Args : ARRAY OF CONST) : BOOLEAN;
  1696. Compares the objectÆs own string to the string in æArgÆs and returns TRUE if they share the 
  1697. same DOS æ8Æ file name. Example :
  1698.  
  1699.     AStrObj := TStringClass.CreateString([æc:\data\company.datÆ]);
  1700.     BStrObj := TStringClass.CreateString([æc:\test\company.idxÆ]);
  1701.     AStrObj.SameName([BStrObj]);  { returns TRUE }
  1702.  
  1703. FUNCTION SetCurDir : BOOLEAN;
  1704. Returns TRUE if the object string includes a directory component that can be made the current 
  1705. working directory. The object string can include a full DOS path/file name. This process will 
  1706. extract the directory component, and attempt to change the current directory to that component. 
  1707. The current object text string is NOT affected.
  1708. 12.5.17 Search related functions
  1709. A set of methods that search the object string for occurrences of sub strings or characters.
  1710.  
  1711. FUNCTION ChCount(ACh : CHAR) : WORD;
  1712. Returns the number of occurrences of CHAR 'Ch' in the object string.
  1713.  
  1714. FUNCTION FindBetween2Ch(FirstCh,
  1715.                                                SecondCh        : CHAR;
  1716.                                                StartFrom       : WORD;
  1717.                                                VAR SubStrStart : WORD;
  1718.                                                VAR SubStrLen   : WORD;
  1719.                                                CutSubStr,
  1720.                                                IncDelims       : BOOLEAN;
  1721.                                               VAR ASubStr     : TStringClass) : BOOLEAN;
  1722. Retrieves a sub string from the objectÆs own text string starting from the first instance of 
  1723. character æFirstChÆ to the netx instance of character æSecondChÆ. The substring is assigned to 
  1724. the æASubStrÆ string object. The æASubStrÆ object must be an already instantiated TStringClass 
  1725. object. The function returns TRUE if a sub string is found. The base 0 relative start position and 
  1726. length is returned in æSubStrStartÆ and æSubStrLenÆ. If æCutSubStrÆ is TRUE the located sub string 
  1727. is deleted from the objectÆs own text string. If 'IncDelims' is TRUE the FirstCh/SecondCh 
  1728. characters are included in the string assigned to 'ASubStrÆ.
  1729. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  1730. starts from one (1) not zero (0).
  1731.  
  1732. FUNCTION FindFirst(CONST SubArgs : ARRAY OF CONST; VAR P : WORD) : BOOLEAN;
  1733. Searches for the first occurrence of sub string 'SubArgs' in the object string, and returns TRUE 
  1734. if the sub string is found. The position of the sub string (base 0) is returned in variable 
  1735. parameter 'P'.
  1736. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  1737. starts from one (1) not zero (0).
  1738.  
  1739. FUNCTION FindFirstCh(ACh : CHAR; VAR P : WORD) : BOOLEAN;
  1740. Searches for the first occurrence of CHAR 'Ch' in the object string, and returns TRUE if the 
  1741. CHAR is found. The position of the CHAR (base 0) is returned in variable parameter 'P'.
  1742. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  1743. starts from one (1) not zero (0).
  1744.  
  1745. FUNCTION FindLast(CONST SubArgs : ARRAY OF CONST; VAR P : WORD) : BOOLEAN;
  1746. Searches for the last occurrence of sub string 'SubArgs' in the object string (starting from the 
  1747. end of the string), and returns TRUE if the sub string is found. The position of the sub string 
  1748. (base 0) is returned in variable parameter 'P'.
  1749. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  1750. starts from one (1) not zero (0).
  1751.  
  1752. FUNCTION FindLastCh(ACh : CHAR; VAR P : WORD) : BOOLEAN;
  1753. Searches for the last occurrence of CHAR 'Ch' in the object string, and returns TRUE if the 
  1754. CHAR is found. The position of the CHAR (base 0) is returned in variable parameter 'P'.
  1755. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  1756. starts from one (1) not zero (0).
  1757.  
  1758. FUNCTION FindNext(CONST SubArgs : ARRAY OF CONST;
  1759.                                   StartPos : WORD;
  1760.                                   VAR NextPos : WORD) : BOOLEAN;
  1761. Searches for the next occurrence of sub string 'SubArgs' in the object string starting from 
  1762. character position 'StartPos' (base 0), and returns TRUE if the sub string is found. The position 
  1763. of the sub string (base 0) is returned in variable parameter 'NextPos'.
  1764. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  1765. starts from one (1) not zero (0).
  1766.  
  1767. FUNCTION FindNextCh(ACh : CHAR; 
  1768.                                        StartPos : WORD; VAR NextPos : WORD) : BOOLEAN;
  1769. Searches for the next occurrence of CHAR 'Ch' in the object string starting from character 
  1770. position 'StartPos' (base 0), and returns TRUE if the CHAR is found. The position of the CHAR 
  1771. (base 0) is returned in variable parameter 'NextPos'.
  1772. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  1773. starts from one (1) not zero (0).
  1774.  
  1775. FUNCTION FindPrev(CONST SubArgs : ARRAY OF CONST;
  1776.                                    StartPos : WORD; VAR PrevPos : WORD) : BOOLEAN;
  1777. Searches for the previous occurrence of sub string 'SubArgs' in the object string starting from 
  1778. character position 'StartPos' (base 0) and searching in a right to left direction. The function 
  1779. returns TRUE if the sub string is found. The position of the new sub string (base 0) is returned 
  1780. in variable parameter 'PrevPos'.
  1781. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  1782. starts from one (1) not zero (0).
  1783.  
  1784. FUNCTION FindPrevCh(ACh : CHAR; StartPos : WORD; VAR PrevPos : WORD) : 
  1785. BOOLEAN;
  1786. Searches for the previous occurrence of CHAR 'Ch' in the object string starting from character 
  1787. position 'StartPos' (base 0) and searching in a right to left direction. The function returns TRUE 
  1788. if the CHAR is found. The position of the new CHAR (base 0) is returned in variable parameter 
  1789. 'PrevPos'.
  1790. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  1791. starts from one (1) not zero (0).
  1792.  
  1793. FUNCTION Grep(CONST SearchArgs : ARRAY OF CONST; 
  1794.                             VAR AList : TWordContainer) : WORD;
  1795. This method will search the objectÆs own string for a pattern of characters defined in the 
  1796. æSearchArgsÆ parameter, and will report the position of each such occurrence as a WORD entry 
  1797. in the word list array æAListÆ. The method function returns the number of occurrences found.
  1798.  
  1799. For example à.
  1800.  
  1801.     VAR
  1802.         MObj : TStringClass;
  1803.         AList : TWordContainer;
  1804.     BEGIN
  1805.         à..
  1806.         à..
  1807.         MObj := TStringClass.CreateString([æWIN.INIÆ]);
  1808.         AList := TWordContainer.Create
  1809.         MObj.Grep([æINÆ],AList)
  1810.         à..
  1811.         à..
  1812.  
  1813. The æGrepÆ function will return a result of æ2Æ will word array entries of æ1Æ and æ4Æ. Note: if the 
  1814. typed constant æStrClassBaseZeroÆ is set to FALSE then the character positions returned in the 
  1815. word array are base one (1).
  1816.  
  1817. The search pattern is case sensitive. 
  1818.  
  1819. The æSearchArgsÆ parameter can take a number of special characters:
  1820.  
  1821. ?    This can be any character. Thus, a search pattern of æA?Æ will find both æABÆ and æAZÆ.
  1822. \    This is a special delimiter to indicate that the next character in the parameter list should 
  1823. be taken as a literal. Thus, if you wanted to search for the æ?Æ character you should use 
  1824. æ\?Æ as part of the search pattern.
  1825. []    Any set of characters within square brackets allows an æORÆ type test against each of 
  1826. the characters within the square brackets. For example a search pattern of æA[BC]Æ will 
  1827. find both æABÆ and æACÆ. 
  1828. [!]    Placing a æ!Æ character as the first within the square brackets means that the search will 
  1829. succeed for any character other than those listed within the square brackets. For 
  1830. example., a search pattern of æA[!BC]Æ will find æADÆ but not find æABÆ.
  1831. :a    This will match any alphabetic character (æAÆ to æZÆ or æaÆ to æzÆ), irrespective of case
  1832. :d    This will match any digit (æ0Æ to æ9Æ)
  1833. :n    This will match any alpha-numeric (æAÆ to æZÆ, or æaÆ to æzÆ, or æ0Æ to æ9Æ)
  1834. -    A minus sign placed after a character makes that characterÆs presence optional  For 
  1835. example, a search pattern of æSM-XÆ will find both æSMXÆ and æSXÆ. 
  1836. *    An asterix (æ*Æ) placed after a character will set matches to occur if optional extensions 
  1837. of the same character appear. Thus, æFR*Æ will find both æFRÆ and æFRRÆ and æFRRRÆ.
  1838. +    A plus placed after a character will set matches to occur of further examples of the 
  1839. same character are found. Thus, æFR+Æ will find both æFRRÆ and æFRRRÆ, but not find 
  1840. æFRÆ.
  1841.  
  1842. The StrClassÆ unit includes a number of constants to assist with the preparation of grep related 
  1843. search patterns à
  1844.  
  1845. grep_any          = '?';
  1846. grep_nextLiteral  = '\';
  1847. grep_optionStart  = '[';
  1848. grep_optionEnd    = ']';
  1849.    grep_class        = ':';
  1850. grep_Alpha        = 'A';
  1851. grep_numeric      = 'D';
  1852. grep_alphaNumeric = 'N';
  1853. grep_Chcont0      = '*';
  1854. grep_Chcont1      = '+';
  1855. grep_ChOption     = '-';
  1856. grep_Not          = '!';
  1857.  
  1858. The example project æGrepTest.DprÆ can be used to demonstrate the various grep related 
  1859. search options.
  1860.  
  1861. If the æSearchArgsÆ parameter includes an invalid sequence of characters an exception error is 
  1862. raised.
  1863.  
  1864. FUNCTION SubStrCount(CONST SubArgs : ARRAY OF CONST) : WORD;
  1865. Returns the total number of occurrences that sub string 'SubArgs' is located within the object 
  1866. string.
  1867. 12.5.18 Case related functions
  1868. FUNCTION FirstCharToUpper : PChar;
  1869. Converts the first character of each separate word in the object string to upper case. For 
  1870. example:
  1871.  
  1872.             Str1.Assign('This is a test')
  1873.             Str1.FirstCharToUpper;
  1874.             Writeln(Str1.ZString);        { This Is A Test }
  1875.  
  1876. FUNCTION IsAlphaNumeric : BOOLEAN;
  1877. Returns TRUE if all characters in the text string are alpha numeric (between æAÆ to æZÆ , æaÆ to æzÆ, 
  1878. or æ0Æ to æ9Æ).
  1879.  
  1880. FUNCTION ToLower : PChar;
  1881. Converts the whole object string to lower case.
  1882.  
  1883. FUNCTION ToUpper : Pchar;
  1884. Converts the whole object string to upper case.
  1885. 12.5.19 Search & replace related functions
  1886. Most of these methods return a PChar pointer to the object string.
  1887.  
  1888. FUNCTION ReplaceAll(CONST OldArgs,NewArgs : ARRAY OF CONST) : PChar;
  1889. Replaces every occurrence of the sub string 'OldArgs' in the object string with the replacement 
  1890. sub string 'NewArgs'. If 'NewArgs' is NIL then the process will just remove all instances of 
  1891. 'OldArgsÆ.
  1892.  
  1893. FUNCTION ReplaceChAll(OldCh,NewCh : CHAR) : PChar;
  1894. Replaces every occurrence of the CHAR 'OldCh'  with the replacement CHAR 'NewCh'.
  1895.  
  1896. FUNCTION ReplaceChFirst(OldCh,NewCh : CHAR) : PChar;
  1897. Replaces the first occurrence of the CHAR 'OldCh'  with the replacement CHAR 'NewCh'.
  1898.  
  1899. FUNCTION ReplaceChLast(OldCh,NewCh : CHAR) : Pchar;
  1900. Replaces the last occurrence of the CHAR 'OldCh'  with the replacement CHAR 'NewCh'.
  1901.  
  1902. FUNCTION ReplaceFirst(CONST OldArgs,NewArgs : ARRAY OF CONST) : PChar;
  1903. Replaces the first occurrence of the sub string 'OldArgs' in the object string with the 
  1904. replacement sub string 'NewArgs'. If 'NewArgs' is NIL then the process will just remove 
  1905. 'OldArgs'.
  1906.  
  1907. FUNCTION ReplaceLast(CONST OldArgs,NewArgs : ARRAY OF CONST) : PChar;
  1908. Replaces the last occurrence of the sub string 'OldArgs' in the object string with the 
  1909. replacement sub string 'NewArgs'. If 'NewArgsÆ is NIL then process will just remove 'OldArgs'.
  1910.  
  1911. 12.5.20 Parsing related functions
  1912. This set of functions provides a variety of methods for parsing or splitting text strings into a 
  1913. number of parts.  Parsing operations place parsed sub strings into their own string class. A 
  1914. container class æTObjectContainerÆ is used to hold multiple sub strings. (Refer to section 9 for an 
  1915. explanation of container objects).
  1916.  
  1917. FUNCTION FirstParseDelim(CONST Args : ARRAY OF CONST;
  1918.                                                DelimCh      : CHAR;
  1919.                                                VAR DelimPos : WORD) : BOOLEAN;
  1920. The 'Args' string is presumed to be a string holding multiple values delimited by the character 
  1921. 'DelimCh'. This method will extract the first item from the source string and assign it to this 
  1922. object string. In the process it sets the variable parameter 'DelimPos' with the index position 
  1923. (base 0) of the next delimited item. The function will return FALSE if the 'Args' string is NIL or 
  1924. of zero length.
  1925. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  1926. starts from one (1) not zero (0).
  1927.  
  1928. FUNCTION NextParseDelim(CONST Args : ARRAY OF CONST;
  1929.                                               DelimCh          : CHAR;
  1930.                                               StartPos         : WORD;
  1931.                                               VAR NextDelimPos : WORD) : BOOLEAN;
  1932. Used in association with 'FirstParseDelim', this method returns the next item to be parsed from 
  1933. the 'Args' string. The search starts at position 'StartPos'  and assigns the parsed string into the 
  1934. object string.  The method updates the variable parameter 'NextDelimPos' with the starting 
  1935. position of the next delimited entry. The method returns FALSE if there are no further string 
  1936. items to parse.
  1937. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  1938. starts from one (1) not zero (0).
  1939.  
  1940. FUNCTION ParseDelimCount(DelimCh : CHAR) : WORD;
  1941. Returns the number of items in a string delimited by the 'DelimCh' character.
  1942.  
  1943. FUNCTION ParseDelimToList(DelimCh   : CHAR;
  1944.                                                  Special   : INTEGER;
  1945.                                                  VAR AList : TObjectContainer) : WORD;
  1946. A high level method of parsing the object's own string. 'DelimCh' specifies the character used to 
  1947. delimiter string entries. The method adds a new 'TStringClass' to the 'AList' container class for 
  1948. each item it parses from its own string (the object string is unaffected by this process). The 
  1949. container class owns the newly created string class objects. The 'Special' parameter is used to 
  1950. determine how double inserted commas or single inverted commas should be treated. The 
  1951. options are:
  1952.  
  1953.    delim_None    = 0;     { do nothing }
  1954.    delim_IncDIC  = 1;     { add double inverted commas to the start/end of each item }
  1955.    delim_IncSIC  = 2;     { add single inverted commas to the start/end of each item }
  1956.    delim_ExcDIC = 4;    { remove any double inverted commas from the start/end of each item }
  1957.    delim_ExcSIC = 8;    { remove any single inverted commas from the start/end of each item }
  1958.  
  1959.    delim_ExcNull = 16   { exclude any NULL strings from the list }
  1960.  
  1961. If there is no text between the location of two delimiters the String Object created for that item 
  1962. is set to have a NIL string.  However, if the æSpecialÆ parameter includes ædelim_ExcNullÆ such 
  1963. null part strings are not added to this list.
  1964.  
  1965. If the 'AList' parameter is passed as a NIL value this method will create the container object. 
  1966. The function returns the number of items parsed from the object's own string.
  1967.  
  1968. Examples à.
  1969.  
  1970. VAR
  1971.    AList : TObjectContainer;
  1972.    SObj  : TStringClass;
  1973.  
  1974.    { ++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1975.  
  1976.    PROCEDURE AddToListBox(S : TStringClass); FAR;
  1977.    BEGIN
  1978.       AListBox.Items.Add(S.Text);
  1979.    END;
  1980.  
  1981.    { ++++++++++++++++++++++++++++++++++++++++++++++++++ }
  1982.  
  1983. BEGIN
  1984.    ...
  1985.    ...
  1986.    AList := TObjectContainer.Create;
  1987.    SObj := TStringClass.CreateString(['aaa,bbb,ccc']);
  1988.    SObj.ParseDelimToList(',',delim_none,AList);
  1989.    AList.ForEach(@AddToListBox);
  1990.    AList.Free;
  1991.    SObj.Free;
  1992.    ...
  1993.    ...
  1994. END;
  1995.  
  1996. With the above you must not forget to make the nested procedure a 'FAR', and the 'action' 
  1997. procedure ('AddToListBox') can only be nested within the same procedure block.
  1998.  
  1999.                                   ...oOo...
  2000.  
  2001. Or, secondly .....
  2002.  
  2003.  
  2004. VAR
  2005.    AList : TObjectContainer;
  2006.    PartObj,SObj  : TStringClass;
  2007.    E : LONGINT;
  2008. BEGIN
  2009.    ...
  2010.    ...
  2011.    AList := TObjectContainer.Create;
  2012.    SObj := TStringClass.CreateString(['aaa,bbb,ccc']);
  2013.    SObj.ParseDelimToList(',',delim_none,AList);
  2014.    FOR E := 0 TO AList.Count-1 DO
  2015.    BEGIN
  2016.       PartObj := AList.Items[E];
  2017.       AListBox.Items.Add(PartObj.Text);
  2018.    END;
  2019.    AList.Free;
  2020.    SObj.Free;
  2021.    ...
  2022.    ...
  2023. END;
  2024.  
  2025. Where the source string ends with a delimiter character, the parsing process adds a null string 
  2026. object to the target list. For example à.
  2027.  
  2028.     AStrObj.Assign([æAA*BB*CC**Æ]);
  2029.     AStrObj.ParseDelimToList(æ*Æ,delim_none,AList)
  2030.  
  2031.   à. returns a result of 5 sub strings: æAAÆ, æBBÆ, æCCÆ, null and null.
  2032.  
  2033.  
  2034. FUNCTION ParseMultiDelimToList(CONST DelimArgs : ARRAY OF CONST;
  2035.                                                          Special         : INTEGER;
  2036.                                                          VAR AList       : TObjectContainer) : WORD;
  2037. This method is similar to the previous æParseDelimToListÆ. It differs in that the first parameter 
  2038. can contain multiple delimiters and that these delimiters can be of any variable type accepted 
  2039. as part of an æARRAY OF CONSTÆ. Thus a delimiter may be either a single character or multi-
  2040. character string.  The parsing process checks each item on the æDelimArgsÆ list to see what 
  2041. delimiter appears first.  The order of items within the æDelimArgsÆ parameter is not relevant.
  2042.  
  2043.  For example à.
  2044.  
  2045. TObj := TStringClass.CreateString(['>QFADS 14:30:30 - 14:45:00  95/11/01']);
  2046. TObj.ParseMultiDelimToList([' - ',' ','>QFADS',':','/'],delim_ExcNull,AList);
  2047.  
  2048. à. will parse down to à
  2049.  
  2050. 14
  2051. 30
  2052. 30
  2053. 14
  2054. 45
  2055. 00
  2056. 95
  2057. 11
  2058. 01
  2059.  
  2060. The method uses the same set of æSpecialÆ parameters as outlined under æParseDelimToListÆ.
  2061.  
  2062.  
  2063. FUNCTION ParsePosToList(VAR PosArray;
  2064.                                               PosCt : WORD;
  2065.                                               VAR AList : TObjectContainer) : WORD;
  2066. A high level method of parsing the object's own string based around an array of start and length 
  2067. settings passed to it in the 'PosArray' parameter. The 'PosArray' psarameter musty be a two 
  2068. dimension INTEGER array that holds 'PosCt' number of entries. Each array entry must have as 
  2069. its first element the starting position of the sub string to be extracted (base zero) and as its 
  2070. second element the number of characters to extracted.
  2071. Note: if the typed constant æStrClassBaseZeroÆ is set to FALSE then the first character position 
  2072. starts from one (1) not zero (0).
  2073.  
  2074. For each entry in the PosArray the method will create a new string object, assign it the sub 
  2075. string extracetd from the main string and add it to the 'AList' collection (the collection owns all 
  2076. string objects created in this manner). If the PosArray entries are located at a position beyond 
  2077. the end of the string the string object created for that entry is assigned a NIL string. If the 'AList' 
  2078. parameter is passed as a NIL value this method will create the collection object. The function 
  2079. returns the number of items parsed and added to the 'AList' collection.
  2080.  
  2081. 13. Container Objects
  2082.  
  2083. For certain of the parsing related methods the TStringClass object uses container objects to 
  2084. hold lists of parsed sub strings.
  2085.  
  2086. These container objects are of the type æTObjectContainerÆ.
  2087.  
  2088. For those who used Borland Pascal for Windows the hierarchy of container objects defined in 
  2089. æContainR.PasÆ will have a familiar ring. They are based largely upon the TCollection object 
  2090. used in the OWL application framework.
  2091.  
  2092. For those unfamiliar with OWL, a TCollection object was a type of open ended array into which 
  2093. items could be added, inserted or deleted. 
  2094.  
  2095. IÆve taken the basic TCollection concept and adapted this for use in the DELPHI world. The 
  2096. differences include:
  2097.  
  2098.   The container objects can manage open ended arrays of up to 2,147,483,647 items.
  2099.   The container object hierarchy includes objects for holding basic data types i.e. large arrays 
  2100. of integers, objects, and records. 
  2101.   It makes extensive use of the Property aspect of object definition.
  2102.  
  2103. 13.1 TBaseContainer
  2104. All container objects derive from the abstract class æTBaseContainerÆ .  
  2105. 13.1.1 Public methods
  2106. CONSTRUCTOR Create; VIRTUAL;
  2107. Creates a new object. 
  2108.  
  2109. DESTRUCTOR Destroy; OVERRIDE;
  2110. Destroys the open array list and all its list items 
  2111.  
  2112. PROCEDURE Clear; VIRTUAL;
  2113. Clears all items from the list, disposing of any records/objects on the list.
  2114.  
  2115. PROCEDURE Delete(Idx : LONGINT); VIRTUAL;
  2116. Deletes the Idx item (base 0) from the list. The item itself is not disposed of.
  2117.  
  2118. PROCEDURE DeleteAll; VIRTUAL;
  2119. Deletes all items from the list, resetting the count to zero. None of the items previously on the 
  2120. list are disposed of.
  2121.  
  2122. PROCEDURE DeleteBlock(SIdx,EIdx : LONGINT);
  2123. Deletes a block of items starting from item æSidxÆ to æEidxÆ inclusive (base 0), without disposing 
  2124. of any objects/records.
  2125.  
  2126. PROCEDURE Exchange(Idx1,Idx2: LONGINT); VIRTUAL;
  2127. Exchanges the position of two items on the list.
  2128.  
  2129. FUNCTION InsertBlock(Idx,Number : LONGINT) : LONGINT; VIRTUAL;
  2130. Inserts æNumberÆ empty (null) item pointers starting from position Idx.
  2131.  
  2132. PROCEDURE Move(CurIdx, NewIdx: LONGINT); VIRTUAL;
  2133. Moves the item æCurIdxÆ to the new position æNewIdxÆ.
  2134.  
  2135. PROCEDURE Pack; VIRTUAL;
  2136. Scans the list to remove any null item pointers.
  2137.  
  2138. PROCEDURE RemoveAll;
  2139. Removes and disposes of all objects/records on the list.
  2140. 13.1.2 Properties
  2141. PROPERTY Capacity: LONGINT READ FCapacity WRITE SetCapacity;
  2142. Each list can be assigned a capacity. Items are added to list until the list count reaches the 
  2143. capacity. Once this is reached the list is re-organised to provide extra capacity. By defining a 
  2144. large capacity in advance the process can avoid wasteful list re-organisiing.
  2145.  
  2146. PROPERTY CompareFunc : TCompareFunc READ FCompareFunc WRITE 
  2147. FCompareFunc;
  2148. For containers where items are to be sorted the object can use a global function located in 
  2149. another unit to determine the comparison result between items on the list. This is achieved by 
  2150. assigning the address of that global function to this property. The global function must be of the 
  2151. type à.
  2152.  
  2153. TCompareFunc = FUNCTION(VAR Ptr1,Ptr2) : INTEGER;
  2154.  
  2155. The two parameters æPtr1Æ and æPtr2Æ are of the same type as the item being stored on the list, 
  2156. i.e. if the list holds objects each parameter will be an object pointer (TObject), or INTEGER 
  2157. types if the list holds integers. The compare function assigned to this property must be declared 
  2158. in the interface section of a unit. This function must return an INTEGER result. If the related 
  2159. sort process requires that æPtr1Æ be located before æPtr2Æ then the function should return a æ-1Æ 
  2160. result.  If the sort process determines that both parameters are equal the function should return 
  2161. a æ0Æ result. Or if æPtr1Æ is to be placed after æPtr2Æ then the function must return a æ1Æ result.
  2162.  
  2163. For example à
  2164.  
  2165. INTERFACE
  2166.  
  2167. TYPE
  2168.  
  2169. TDataClass = CLASS(TObject)
  2170.       PRIVATE
  2171.          Name : STRING;
  2172.       PUBLIC
  2173.          CONSTRUCTOR CreateName(CONST AName : STRING);
  2174.          FUNCTION GetName : STRING;
  2175.    END;
  2176.  
  2177.    FUNCTION NameCompare(VAR Ptr1,Ptr2) : INTEGER;
  2178.  
  2179.     IMPLEMENTATION
  2180.  
  2181. à..
  2182.  
  2183. FUNCTION NameCompare(VAR Ptr1,Ptr2) : INTEGER;
  2184. BEGIN
  2185.    Result := CompareText(TDataClass(Ptr1).GetName,TDataClass(Ptr2).GetName);
  2186. END;
  2187.  
  2188. àà
  2189.  
  2190. AList := TObjectContainer.Create;
  2191. AList.Sort := sortAscending;
  2192. AList.CompareFunc := NameCompare;
  2193.  
  2194. If for some reason a container object uses both this property and overrides the æCompareÆ 
  2195. function method, then the sort process will always use the virtual Compare method.
  2196.  
  2197. PROPERTY Count: LONGINT READ Fcount;
  2198. Returns the number of items on the list.
  2199.  
  2200. PROPERTY Delta : LONGINT READ FDelta WRITE FDelta;
  2201. Sets or returns the size by which the capacity will grow each time the count reaches the 
  2202. capacity limit.
  2203.  
  2204. PROPERTY Duplicates : TDuplicates READ FDuplicates WRITE Fduplicates;
  2205. This property determines how to handle the addition of duplicate items to a sorted container, 
  2206. and only applies to containers which are sorting there contents. By default this property is set to 
  2207. ædupIgnoreÆ. With sorted collections this means that an attempt to add a duplicate item will 
  2208. simply be ignored, with no exception error. 
  2209.  
  2210. TDuplicates = (dupIgnore, dupAccept, dupError);
  2211.  
  2212. If this property is set to ædupAcceptÆ then the container will process and accept duplicate list 
  2213. entries. However, if this property is set to ædupErrorÆ, then any attempt to add a duplicate item 
  2214. will create a run time exception error. 
  2215.  
  2216. PROPERTY GrowAsRequired : BOOLEAN READ FGrowAsRequired WRITE 
  2217. FGrowAsRequired;
  2218. Using the æItemsÆ property found in descendant container objects a list item can be assigned to 
  2219. a specific list position. This does not have to be at the last used position. This allows a list to 
  2220. hold ono-contiguous entries., The GrowAsRequired property is used to control whether such 
  2221. æItemsÆ assignments can be made past the capacity limit. If set to TRUE (the default) then the 
  2222. capacity will grow to meet any use of the æItemsÆ property. If set to FALSE then any attempt to 
  2223. use the æItemsÆ property outside of the list capacity will create an exception error.
  2224.  
  2225. PROPERTY Sort : TContainerSortType READ FSort WRITE SetSort;
  2226. Used to set whether a list should be sorted into a pre-determined order. The attribute should be 
  2227. passed a æTContainerSortTypeÆ value.
  2228.  
  2229.     TContainerSortType = (sortNone,sortAscending,sortDescending);
  2230.  
  2231. A sorted container requires that either:
  2232.  
  2233.   a new class be derived from the required class type, and the protected method æCompareÆ 
  2234. be overriden with a new method.
  2235.  
  2236.     FUNCTION Compare(Ptr1,Ptr2 : POINTER) : INTEGER; VIRTUAL;
  2237.  
  2238.   or that the æCompareFuncÆ function property be set.  This is a function variable type uses 
  2239. the following prototype format ..
  2240.  
  2241. TCompareFunc = FUNCTION(VAR Ptr1,Ptr2) : INTEGER;
  2242.  
  2243. The two parameters æPtr1Æ and æPtr2Æ are of the same type as the item being stored on the 
  2244. list, i.e. if the list holds objects each parameter will be an object pointer (TObject), or 
  2245. INTEGER types if the list holds integers. The compare function assigned to this property 
  2246. must be declared in the interface section of a unit. This function must return an INTEGER 
  2247. result. If the related sort process requires that æPtr1Æ be located before æPtr2Æ then the 
  2248. function should return a æ-1Æ result.  If the sort process determines that both parameters are 
  2249. equal the function should return a æ0Æ result. Or if æPtr1Æ is to be placed after æPtr2Æ then the 
  2250. function must return a æ1Æ result.
  2251.  
  2252. For example à
  2253.  
  2254. INTERFACE
  2255.  
  2256. TYPE
  2257.  
  2258. TDataClass = CLASS(TObject)
  2259.       PRIVATE
  2260.          Name : STRING;
  2261.       PUBLIC
  2262.          CONSTRUCTOR CreateName(CONST AName : STRING);
  2263.          FUNCTION GetName : STRING;
  2264.    END;
  2265.  
  2266.    FUNCTION NameCompare(VAR Ptr1,Ptr2) : INTEGER;
  2267.  
  2268.     IMPLEMENTATION
  2269.  
  2270. à..
  2271.  
  2272. FUNCTION NameCompare(VAR Ptr1,Ptr2) : INTEGER;
  2273. BEGIN
  2274.    Result := CompareText(TDataClass(Ptr1).GetName,TDataClass(Ptr2).GetName);
  2275. END;
  2276.  
  2277. àà
  2278.  
  2279. AList := TObjectContainer.Create;
  2280. AList.Sort := sortAscending;
  2281. AList.CompareFunc := NameCompare;
  2282.  
  2283. 13.2 TObjectContainer
  2284.  
  2285. An open ended array type container for holding object pointers.
  2286. 13.2.1 Public methods
  2287. CONSTRUCTOR Create; OVERRIDE;
  2288. Creates an instance of the new object type.
  2289.  
  2290. FUNCTION Add(Item: POINTER): LONGINT; VIRTUAL;
  2291. Adds an instantiated object to the list. If sorting is not active then the object instance is added to 
  2292. the end of the list. If sorting is active then the object will be placed in a positioned based upon 
  2293. the objects æCompareÆ result.
  2294.  
  2295. FUNCTION Append(Item : POINTER) : LONGINT; VIRTUAL;
  2296. Adds the object to the end of the list.
  2297.  
  2298. FUNCTION First: POINTER; VIRTUAL;
  2299. Returns a pointer to the first object on the list.
  2300.  
  2301. FUNCTION FirstThat(Test: Pointer): Pointer;
  2302. Iterates across the objects on the list calling the local nested function æTestÆ with the current list 
  2303. object as the parameter. The process continues until such time that the test function returns 
  2304. TRUE. The function returns a pointer to the object that was active when the TRUE condition 
  2305. prevailed. If no TRUE return is returned the æFirstThatÆ function returns NIL.
  2306.  
  2307. Example ...
  2308.  
  2309.     VAR
  2310.         Alist : TObjectContainer;
  2311.  
  2312.         { ++++++++++++++++++++++++++++++++++++++++++ }
  2313.  
  2314.         FUNCTION DoTest(AnObject : TMyObject) : BOOLEAN; FAR;
  2315.         BEGIN
  2316.                          
  2317.         END;
  2318.  
  2319.         { ++++++++++++++++++++++++++++++++++++++++++ }
  2320.  
  2321.     BEGIN
  2322.         Alist := TObjectContainer.Create;
  2323.         .......
  2324.         ......
  2325.         AList.FirstThat(@DoTest);
  2326.         .....
  2327.         .....
  2328.  
  2329. The æTestÆ function must be nested function and must be declared as a æFARÆ function. It can 
  2330. have only one parameter - an object of whatever type is being stored in the container.
  2331.  
  2332. This function is useful for reviewing objects on the list and returning a pointer to some object 
  2333. that meets a test.
  2334.  
  2335. FUNCTION FirstThatIdx(Test: Pointer): Pointer;
  2336. This is a variation on the æFirstThatÆ method described above. With æFirstThatIdxÆ the nested 
  2337. local function requires two parameters. The first being an object pointer of whatever type is 
  2338. being stored on the list. The second must be a LONGINT parameter. This is passed by the 
  2339. FirstThat process and represents the base zero (0) index position of current data object within 
  2340. the list (i.e. somewhere between æ0Æ to æCount-1Æ).  
  2341.  
  2342.     VAR
  2343.         AList : TObjectContainer;
  2344.         ATotal : LONGINT
  2345.  
  2346.         { ++++++++++++++++++++++++++++++++++++++++++ }
  2347.  
  2348.         FUNCTION DoTest(AnObject : TMyObject; Idx : LONGINT) : BOOLEAN; FAR;
  2349.         BEGIN
  2350.                                  à
  2351.             à
  2352.         END;
  2353.  
  2354.         { ++++++++++++++++++++++++++++++++++++++++++ }
  2355.  
  2356.     BEGIN
  2357.         Alist := TObjectContainer.Create;
  2358.         .......
  2359.         ......
  2360.         ATotal := 0;
  2361.         AList.FirstThatIdx(@DoTest);
  2362.         .....
  2363.         .....
  2364.  
  2365. PROCEDURE ForEach(Action: Pointer);
  2366. Similar to æFirstThatÆ this function iterates across all objects on the list, running the procedure 
  2367. æActionÆ for each object. The iteration cannot be stopped. The æActionÆ procedure must be nested 
  2368. procedure and must be declared as a æFARÆ type. It can have only one parameter - an object of 
  2369. whatever type is being stored in the container. This function is useful for reviewing objects on 
  2370. the list and accumulating list wide totals.
  2371.  
  2372. This method is useful for counting items data elements of data objects on a list, for example :
  2373.  
  2374. VAR
  2375.     AList : TObjectContainer;
  2376.     TotalAge : LONGINT;
  2377.    
  2378. { +++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  2379.  
  2380. PROCEDURE DoAgeCount(ThisDataObj : TDataObject; Idx : LONGINT); FAR;
  2381. BEGIN
  2382.         INC(TotalAge,ThisDataObj.Age);
  2383. END;
  2384.  
  2385. { +++++++++++++++++++++++++++++++++++++++++++++++++++++ }
  2386.  
  2387. BEGIN
  2388.    à.
  2389.    à..
  2390.  
  2391.    AList := TObjectContainer.Create;
  2392.    AList.Capacity := 100;
  2393.    { params - initials, surname, age and salary }
  2394.    ADataObj := TDataObject.CreateInit('J','Smith',34,10500.45);
  2395.    AList.Add(ADataObj);
  2396.    ADataObj := TDataObject.CreateInit('F','Brown',40,17453.89);
  2397.    AList.Add(ADataObj);
  2398.    ADataObj := TDataObject.CreateInit('A','Jones',23,12765.34);
  2399.    AList.Add(ADataObj);
  2400.    ADataObj := TDataObject.CreateInit('W','Bloggs',19,23456.21);
  2401.    AList.Add(ADataObj);
  2402.    TotalAge := 0;
  2403.    { count total ages }
  2404.    AList.ForEach(@DoAgeCount);
  2405.  
  2406. The æDoAgeCountÆ local nested procedure is called for each data object on he list, thus allowing 
  2407. æTotalAgeÆ to accumalate a total. 
  2408.  
  2409. PROCEDURE ForEachIdx(Action: Pointer): Pointer;
  2410. This is a variation on the æForEachÆ method described above. With æForEachIdxÆ the nested 
  2411. local procedure requires two parameters. The first being an object pointer of whatever type is 
  2412. being stored on the list. The second must be a LONGINT parameter. This is passed by the 
  2413. ForEach process and represents the base zero (0) index position of current data object within 
  2414. the list (i.e. somewhere between æ0Æ to æCount-1Æ).  
  2415.  
  2416.     VAR
  2417.         AList : TObjectContainer;
  2418.         ATotal : LONGINT
  2419.  
  2420.         { ++++++++++++++++++++++++++++++++++++++++++ }
  2421.  
  2422.         PROCEDURE DoTest(AnObject : TMyObject; Idx : LONGINT); FAR;
  2423.         BEGIN
  2424.                                  à
  2425.             à
  2426.         END;
  2427.  
  2428.         { ++++++++++++++++++++++++++++++++++++++++++ }
  2429.  
  2430.     BEGIN
  2431.         Alist := TObjectContainer.Create;
  2432.         .......
  2433.         ......
  2434.         ATotal := 0;
  2435.         AList.ForEachIdx(@DoTest);
  2436.         .....
  2437.         .....
  2438.  
  2439.  
  2440. FUNCTION Includes(Item : POINTER; VAR Idx : LONGINT) : BOOLEAN;
  2441. Returns TRUE if the object æItemÆ is found on the list. The base 0 zero list position is returned in 
  2442. æIdxÆ
  2443.  
  2444. FUNCTION IndexOf(Item: POINTER): LONGINT; VIRTUAL;
  2445. Returns the base 0 index position of an object on the list.
  2446.  
  2447. FUNCTION Insert(Idx: LONGINT; Item: POINTER) : LONGINT; VIRTUAL;
  2448. Inserts an object æItemÆ at the list position æIdxÆ. This was create an exception error if sorting is 
  2449. active.
  2450.  
  2451. FUNCTION Last: POINTER;
  2452. Returns a pointer to the last object on the list.
  2453.  
  2454. FUNCTION LastThat(Test: Pointer): Pointer;
  2455. Similar to the æFirstThatÆ function this iterates across the list from last to first.
  2456.  
  2457. FUNCTION LastThatIdx(Test: Pointer): Pointer;
  2458. This is a variation on the æLastThatÆ method described above. With æLastThatIdxÆ the nested 
  2459. local function requires two parameters. The first being an object pointer of whatever type is 
  2460. being stored on the list. The second must be a LONGINT parameter. This is passed by the 
  2461. LastThat process and represents the base zero (0) index position of current data object within 
  2462. the list (i.e. somewhere between æ0Æ to æCount-1Æ).   For example à
  2463.  
  2464.     VAR
  2465.         AList : TObjectContainer;
  2466.         ATotal : LONGINT
  2467.  
  2468.         { ++++++++++++++++++++++++++++++++++++++++++ }
  2469.  
  2470.         FUNCTION DoTest(AnObject : TMyObject; Idx : LONGINT) : BOOLEAN; FAR;
  2471.         BEGIN
  2472.                                  à
  2473.             à
  2474.         END;
  2475.  
  2476.         { ++++++++++++++++++++++++++++++++++++++++++ }
  2477.  
  2478.     BEGIN
  2479.         Alist := TObjectContainer.Create;
  2480.         .......
  2481.         ......
  2482.         ATotal := 0;
  2483.         AList.LastThatIdx(@DoTest);
  2484.         .....
  2485.         .....
  2486.  
  2487. FUNCTION Prepend(Item : POINTER) : LONGINT; VIRTUAL;
  2488. Insert the object æItemÆ at the front of the list.
  2489.  
  2490. FUNCTION Remove(Item: POINTER): LONGINT; VIRTUAL;
  2491. Removes the object æItemÆ from the list and disposes it.
  2492. 13.2.2 Properties
  2493. PROPERTY Items[Idx : LONGINT]: POINTER READ GetPtr WRITE PutPtr;
  2494. Allows an object to be assigned to a zero based position in the list, or returns the object found 
  2495. at position Idx.
  2496.  
  2497. PROPERTY Own : BOOLEAN READ Fown WRITE Fown;
  2498. If set to TRUE the list is deemed to own the objects and will dispose of them once they are 
  2499. removed from the list. If set to FALSE the object will NOT dispose of the object if it is removed 
  2500. from the list.
  2501. 13.3 TRecordContainer
  2502.  
  2503. A container object to used to store lists of record pointers. The æItemsÆ property should have 
  2504. assigned to it a pointer to the record structure.
  2505. 13.3.1 Public methods
  2506. CONSTRUCTOR Create(ARecSize : WORD);
  2507. Used to create the record container. Example ...
  2508.  
  2509.     TYPE
  2510.         PMyRec = ^TMyRec;
  2511.         TMyRec = RECORD
  2512.             Name : STRING;
  2513.             Age   : LONGINT;
  2514.         END;
  2515.     VAR
  2516.         Alist : TRecordContainer
  2517.         Arec : PMyRec;
  2518.     BEGIN
  2519.         .....
  2520.         .....
  2521.         Alist := TRecordContainer.Create(SIZEOF(TMyRec));
  2522.  
  2523. 13.4 TPCharContainer = CLASS(TObjectContainer)
  2524.  
  2525. A container object for holding lists of æPCharÆ variable types.
  2526.  
  2527. 13.5 TIntegerContainer = CLASS(TBaseContainer)
  2528.  
  2529. A container for holding lists of integers.
  2530. 13.5.1 Public methods
  2531. CONSTRUCTOR Create;
  2532. Creates a container object to hold integer items.
  2533.  
  2534. FUNCTION Add(Item: INTEGER): LONGINT; VIRTUAL;
  2535. Adds the new integer value to the list. If sorting is not active it is appended to the end of the list.
  2536.  
  2537. FUNCTION Append(Item : INTEGER) : LONGINT; VIRTUAL;
  2538. Appends the new integer item to the end of the list.
  2539.  
  2540. FUNCTION First: INTEGER; VIRTUAL;
  2541. Returns the integer value of the first item on the list.
  2542.  
  2543. FUNCTION Includes(Item : INTEGER; VAR Idx : LONGINT) : BOOLEAN;
  2544. Returns TRUE if the æItemÆ integer is found on the list. æIdxÆ is returned with the base zero list 
  2545. position.
  2546.  
  2547. FUNCTION Insert(Idx: LONGINT; Item: INTEGER) : LONGINT; VIRTUAL;
  2548. Inserts the new integer entry æItemÆ into the list at position æIdxÆ (base 0)
  2549.  
  2550. FUNCTION Last: INTEGER;
  2551. Returns the integer value of the last item on the list.
  2552.  
  2553. FUNCTION Prepend(Item : INTEGER) : LONGINT; VIRTUAL;
  2554. Inserts the Item value into the start of the list.
  2555.  
  2556. FUNCTION Remove(Item: INTEGER): LONGINT; VIRTUAL;
  2557. Removes the integer item from the list.
  2558. 13.5.2 Properties
  2559. PROPERTY Items[Idx : LONGINT]: INTEGER READ GetInteger WRITE PutInteger;
  2560. Used to assign integer values to specific positions on the list, or to return the integer value 
  2561. found at position æIdxÆ on the list.
  2562.  
  2563. 13.6 TWordContainer = CLASS(TBaseContainer)
  2564. A container for holding lists of WORD type values. The methods and properties have the exact 
  2565. same purpose as for the æTIntegerContainerÆ, except that they use WORD type item 
  2566. parameters.
  2567. 13.6.1 Public methods
  2568. CONSTRUCTOR Create;
  2569. FUNCTION Add(Item: WORD): LONGINT; VIRTUAL;
  2570. FUNCTION Append(Item : WORD) : LONGINT; VIRTUAL;
  2571. FUNCTION First: WORD; VIRTUAL;
  2572. FUNCTION Includes(Item : WORD; VAR Idx : LONGINT) : BOOLEAN;
  2573. FUNCTION Insert(Idx: LONGINT; Item: WORD) : LONGINT; VIRTUAL;
  2574. FUNCTION Last: WORD;
  2575. FUNCTION Prepend(Item : WORD) : LONGINT; VIRTUAL;
  2576. FUNCTION Remove(Item: WORD): LONGINT; VIRTUAL;
  2577. 13.6.2 Properties
  2578. PROPERTY Items[Idx : LONGINT]: WORD READ GetWord WRITE PutWord;
  2579. 13.7 TLongIntContainer = CLASS(TBaseContainer)
  2580. A container for holding lists of LONGINT type values. The methods and properties have the 
  2581. exact same purpose as for the æTIntegerContainerÆ, except that they use LONGINT type item 
  2582. parameters.
  2583. 13.7.1 Public methods
  2584. CONSTRUCTOR Create;
  2585. FUNCTION Add(Item: LONGINT): LONGINT; VIRTUAL;
  2586. FUNCTION Append(Item : LONGINT) : LONGINT; VIRTUAL;
  2587. FUNCTION First: LONGINT; VIRTUAL;
  2588. FUNCTION Includes(Item : LONGINT; VAR Idx : LONGINT) : BOOLEAN;
  2589. FUNCTION Insert(Idx: LONGINT; Item: LONGINT) : LONGINT; VIRTUAL;
  2590. FUNCTION Last: LONGINT;
  2591. FUNCTION Prepend(Item : LONGINT) : LONGINT; VIRTUAL;
  2592. FUNCTION Remove(Item: LONGINT): LONGINT; VIRTUAL;
  2593. 13.7.2 Properties
  2594. PROPERTY Items[Idx : LONGINT]: LONGINT READ GetLongInt WRITE PutLongInt;
  2595.  
  2596. 13.8 TCustomTypeContainer = CLASS(TBaseContainer)
  2597. A container for holding items of user defined length. Note that for this container an item is 
  2598. passed as undefined variable type. This presumes that a valid record/variable is passed, NOT a 
  2599. pointer to the record or variable.
  2600. 13.8.1 Public methods
  2601. CONSTRUCTOR Create(CustomTypeLen : WORD);
  2602. Creates a container object to hold items of length æCustomTypeLenÆ bytes
  2603.  
  2604. FUNCTION Add(VAR Item): LONGINT; VIRTUAL;
  2605. Adds the custom type to the list.
  2606.  
  2607. FUNCTION Append(VAR Item) : LONGINT; VIRTUAL;
  2608. Adds the custom item to the end of the list.
  2609.  
  2610. FUNCTION Insert(Idx: LONGINT; VAR Item) : LONGINT; VIRTUAL;
  2611. Inserts the custom item at position Idx.
  2612.  
  2613. FUNCTION Prepend(VAR Item) : LONGINT; VIRTUAL;
  2614. Asdds the custom item to the front of the list.
  2615.  
  2616. FUNCTION Retrieve(Idx : LONGINT; VAR Item) : BOOLEAN;
  2617. Retrieves the custom item at position Idx into the variable Item.
  2618.  
  2619. 14. Version Management
  2620.  
  2621. Changes for Version 1.1
  2622.  
  2623. Known Bugs & Bug fixes
  2624.  
  2625. JustDirectory 
  2626. Fixed a bug where for parameters such as æc:\windowsÆ the process was extracting æC:\Æ as the 
  2627. directory. The function now tests for the existence of the æ.Æ dot and the number of æ\Æ delimiters. 
  2628. If no dot is present and the number of æ\Æ is less than 2 then the parameter string is assumed to 
  2629. be a directory and is simply assigned to the object.
  2630.  
  2631. FindCmdLineParam, FindCmdLine, FindCmdLineParam
  2632. If called as part of a DLL these functions might fail.
  2633.  
  2634. IsSameI
  2635. The function had an erroneous æLenÆ 2nd parameter which has been removed.
  2636.  
  2637. New functions:
  2638.  
  2639. DeleteFrom
  2640. FindRelPath
  2641.  
  2642.  
  2643. Changes for Version 1.2
  2644.  
  2645. Known Bugs & Bug fixes
  2646.  
  2647. Container objects - using sorted object containers
  2648. The TObjectContainer class if pre-declared as æSortedÆ failed to sort the objects, even crashed 
  2649. in certain situations. There were multiple (coding error) reasons for this. The æCompareÆ and 
  2650. æSearchÆ methods were faulty in accessing pointers on the list. (See also the new 
  2651. æCompareFuncÆ function property).
  2652.  
  2653. Container Objects - Capacity property : un-initialised memory arrays
  2654. The æSetCapacityÆ method failed to initialise local memory block memory arrays to zero. This 
  2655. lead to a situation where a direct assignment of an item via the æItemsÆ property failed to 
  2656. increment the container item count. (This error only applied to small lists where the item pointer 
  2657. array was less than 64K in size).
  2658.  
  2659. ReadIniKeyword - buffer length
  2660. Within this method the internal PChar variable used as the target buffer for the initial INI file 
  2661. read was limited to 255 characters. Thus, if the INI file entry was longer than 255 characters it 
  2662. only read the first 255. This has been increased to 1000 (can anybody envisage an INI file entry 
  2663. exceeding 1000 characters??)
  2664.  
  2665. New functions
  2666.  
  2667. Container object - CompareFuncÆ function property.
  2668.  
  2669.  
  2670. Changes for Version 1.3
  2671.  
  2672. Known Bugs & Bug fixes
  2673.  
  2674. ReadIniKeyword - no clear if key word not found
  2675. If the æReadIniKeywordÆ function was used on a string class that already contained a text value, 
  2676. and the keyword does not exist or has a null value, the object text value was not being reset to 
  2677. null. This has been fixed so that in such situations the objectÆs own text buffer is reset to null.
  2678.  
  2679.  
  2680. Changes for Version 1.4
  2681.  
  2682. Known Bugs & Bug fixes
  2683.  
  2684. ParseDelimToList - parse error if delimiter char is last char in source string.
  2685. The æParseDelimToListÆ function failed to parse a source string correctly where the delimiter was 
  2686. the last character in the source string.
  2687. Previously  the source string æA***Æ with a delimiter of æ*Æ was being returned as a list of two 
  2688. string objects æAÆ and null, when it should have been three: æAÆ , null and null. This has been 
  2689. fixed so that any source string with a trailing delimiter character will always returns a list with an 
  2690. extra null sub string entry.
  2691.  
  2692. TBaseContainer.SortInPlace : memory leak
  2693. The quick-sort procedure used by this method was using two private unit level pointers which 
  2694. were not being released at the end of the process, thus losing 8 bytes of memory each time the 
  2695. process was called. This has been fixed.
  2696.  
  2697.  
  2698. Changes for Version 1.5
  2699.  
  2700. New TStringClass methods:
  2701.  
  2702. FUNCTION SameDrive(CONST Args : ARRAY OF CONST) : BOOLEAN;
  2703. FUNCTION SameDirectory(CONST Args : ARRAY OF CONST) : BOOLEAN;
  2704. FUNCTION SameExtension(CONST Args : ARRAY OF CONST) : BOOLEAN;
  2705. FUNCTION SameFileName(CONST Args : ARRAY OF CONST) : BOOLEAN;
  2706. FUNCTION SameName(CONST Args : ARRAY OF CONST) : BOOLEAN;
  2707.  
  2708.  
  2709. Changes for Version 1.6
  2710.  
  2711. Known bugs & bug fixes
  2712.  
  2713. ParseDelimToList  : ædelim_IncSICÆ and ædelim_IncDICÆ - not implemented
  2714. The use of the ædelim_IncSICÆ and ædelim_IncDICÆ parameters was documented by NOT 
  2715. implemented. This has been fixed.
  2716.  
  2717. New TStringClass methods:
  2718.  
  2719. FUNCTION AddDIC : PChar;
  2720. FUNCTION AddSIC : PChar;
  2721.  
  2722. Changes for Version 1.7
  2723.  
  2724. Bug fixes:
  2725.  
  2726. TBaseContainer æMoveÆ method
  2727. This included a coding error that trashed the target pointer. 
  2728.  
  2729. TBaseContainer æSetCapacityÆ method
  2730. A similar error to the above, it only affected containers where a local memory to global memory 
  2731. move was enacted.
  2732.  
  2733. New TStringClass functionality:
  2734.  
  2735. The æStrClassBaseZeroÆ typed constant used for setting base 0 or base 1 character positioning.
  2736.  
  2737. New TStringClass method functions:
  2738.  
  2739. FUNCTION GetSystemDirectory : PChar;
  2740. FUNCTION GetWindowsDirectory : PChar;
  2741. FUNCTION NL : PChar
  2742.  
  2743. Changes for Version 2.0
  2744.  
  2745. New Functionality:
  2746.  
  2747. TStringClass 
  2748.  
  2749. Args ARRAY OF CONST type parameters now except VCL text related components
  2750.  
  2751. ægScæ global string class variable
  2752.  
  2753. New ædelim_ExcNullÆ  constant that can applied to æParseDelimToListÆ.
  2754.  
  2755. æAddFilterDescÆ
  2756. æFromComponentÆ method
  2757. æFromComponentItemÆ method
  2758. æGrepÆ method
  2759. æParseMultiDelimToListÆ method
  2760. æRecalcLengthÆ method procedure
  2761. æRemoveDirectoryÆ method function
  2762.  æToComponentÆ method
  2763.  
  2764. Bug fixes:
  2765.  
  2766. TStringClass  Destroy not virtual
  2767. A major bug and cause of memory leaks! Sorry! Somehow the æOVERRIDEÆ qualifier was left 
  2768. off the end of the Destroy interface declaration.
  2769.  
  2770. PadEnd/PadFront/Pad Centre - one character too long.
  2771. The Pad functions were adding one too many characters to the padding process.
  2772.  
  2773. TObjectContainer: new methods :
  2774.  
  2775. FirstThatIdx
  2776. ForEachIdx
  2777. LastThatIdx
  2778.  
  2779. Changes for Version 2.01
  2780.  
  2781. TBaseContainer object : æAddItem method - duplicates bug
  2782. If a duplicate item was being added to a container and æDuplicatesÆ was set to ædupIgnoreÆ, this 
  2783. method was still reporting an exception error. This has been changed so that with ædupIgnoreÆ 
  2784. active, any attempt to add a duplicate item is ignored with no exception error being created.
  2785.  
  2786. TPCharContainer : missing æCompareÆ method
  2787. The TPCharContainer object was missing a æCompareÆ method to enable sorted PChar lists. 
  2788. This has been added.
  2789.  
  2790.  
  2791. 15. Index
  2792.  
  2793.  
  2794. A
  2795. Add, 7, 29, 31, 39, 40, 45, 50, 51, 54
  2796. AddBackSlash, 31
  2797. AddDIC, 29
  2798. AddFilterDesc, 31
  2799. All_Items, 22
  2800. AnsiCompareStr, 25
  2801. AnsiCompareText, 25
  2802. AnsiLowerCase, 24
  2803. AnsiUpperCase, 24
  2804. Append, 18, 45, 50, 51
  2805. AppendBoolean, 18
  2806. AppendByte, 19
  2807. AppendCh, 19
  2808. AppendDIC, 19
  2809. AppendDouble, 19
  2810. AppendDoubleTrim, 19
  2811. AppendExt, 19
  2812. AppendExtTrim, 19
  2813. AppendLen, 19
  2814. AppendLong, 19
  2815. AppendMid, 19
  2816. AppendNL, 20
  2817. AppendPad, 20
  2818. AppendPtr, 20
  2819. AppendReal, 20
  2820. AppendRight, 20
  2821. AppendSIC, 20
  2822. AppendStr, 24
  2823. AppendStringRes, 30
  2824. AppendTObject, 13
  2825. AppendTrim, 20
  2826. AppendWithTab, 20
  2827. Assign, 16
  2828. AssignFrom, 17
  2829. AssignLen, 17
  2830. AssignMid, 17
  2831. AssignNL, 18
  2832. AssignPad, 18
  2833. AssignRight, 18
  2834. AssignTrim, 18
  2835. B
  2836. BuildPathName, 32
  2837. C
  2838. Capacity, 43, 53
  2839. Ch, 14
  2840. ChCount, 34
  2841. Clear, 16, 42
  2842. Compare, 28
  2843. Compare_EQ, 27, 28
  2844. Compare_GT, 27
  2845. Compare_LT, 27, 28
  2846. CompareDouble, 28
  2847. CompareExt, 28
  2848. CompareFunc, 43, 53
  2849. CompareI, 28
  2850. CompareL, 28
  2851. CompareLI, 28
  2852. CompareLong, 28
  2853. CompareStr, 24
  2854. CompareText, 24
  2855. ContainR, 5
  2856. Copy, 16
  2857. CopyFrom, 16
  2858. Count, 44
  2859. Create, 5, 6, 7, 8, 9, 10, 15, 16, 17, 18, 32, 34, 36, 
  2860. 39, 40, 42, 43, 44, 45, 46, 48, 49, 50, 51
  2861. CreateBoolean, 15
  2862. CreateDirectory, 32
  2863. CreateNL, 15
  2864. CreateSize, 15
  2865. CreateString, 15
  2866. D
  2867. DefaultExtension, 32
  2868. Delete, 13, 29, 42, 53
  2869. DeleteAll, 42
  2870. DeleteBlock, 42
  2871. DeleteFrom, 29
  2872. delim_ExcDIC, 38
  2873. delim_ExcNull, 39, 40, 55
  2874. delim_ExcSIC, 39
  2875. delim_IncDIC, 38, 54
  2876. delim_IncSIC, 38, 54
  2877. delim_None, 8, 38
  2878. Delta, 44
  2879. Destroy, 16, 42, 55
  2880. DirectoryExists, 32
  2881. DriveExists, 32
  2882. Duplicates, 44
  2883. E
  2884. EConvertError, 25
  2885. Empty, 16
  2886. EStringClass, 10
  2887. Exchange, 42
  2888. ExpandFileName, 32
  2889. F
  2890. FBuffer, 12, 16
  2891. FileExists, 32
  2892. FileSplit, 32
  2893. FindBetween2Ch, 34
  2894. FindCmdLine, 30, 53
  2895. FindCmdLineAndParse, 30
  2896. FindCmdLineParam, 30, 53
  2897. FindCurrentDir, 32
  2898. FindFirst, 34
  2899. FindFirstCh, 35
  2900. FindIniSectionKeywords, 31
  2901. FindLast, 35
  2902. FindLastCh, 35
  2903. FindNext, 35
  2904. FindNextCh, 35
  2905. FindPrev, 35
  2906. FindPrevCh, 35
  2907. FindRelPath, 32, 53
  2908. First, 45, 50, 51
  2909. FirstCharToUpper, 37
  2910. FirstNonSpaceCh, 20
  2911. FirstParseDelim, 38
  2912. FirstThat, 46
  2913. FirstThatIdx, 46
  2914. FLength, 12, 16
  2915. FloatToStr, 25
  2916. FloatToStrF, 25
  2917. FMaxSize, 12
  2918. FmtLoadStr, 25
  2919. ForceExtension, 33
  2920. ForEach, 47
  2921. ForEachIdx, 47
  2922. Format, 25
  2923. FormatFloat, 26
  2924. FromBoolean, 21
  2925. FromByte, 22
  2926. FromChar, 22
  2927. FromComponent, 22
  2928. Working with VCL, 8
  2929. FromComponentÆ, 22
  2930. FromComponentItem, 22
  2931. Working with VCL, 9
  2932. FromDouble, 22
  2933. FromDoubleTrim, 22
  2934. FromExt, 22
  2935. FromExtTrim, 22
  2936. FromLong, 22
  2937. FromPtr, 22
  2938. FromReal, 22
  2939. FromRealTrim, 23
  2940. FromRGB, 23
  2941. fs_Directory, 32
  2942. fs_extension, 32
  2943. fs_Name, 32
  2944. FSizeInc, 12
  2945. G
  2946. GetSystemDirectory, 33
  2947. GetWindowsDirectory, 33
  2948. Grep, 36
  2949. GrowAsRequired, 44
  2950. gSc, 10
  2951. H
  2952. HasBackSlash, 33
  2953. HasCh, 21
  2954. HasDirectory, 33
  2955. HasDrive, 33
  2956. HasExtension, 33
  2957. HasFileName, 33
  2958. HexFromByte, 23
  2959. HexFromLong, 23
  2960. HexFromPtr, 23
  2961. HexFromWord, 23
  2962. I
  2963. Includes, 29, 48, 50, 51
  2964. IndexOf, 48
  2965. InitDataMembers, 13
  2966. Insert, 29, 48, 50, 51
  2967. InsertBlock, 42
  2968. InsertL, 29
  2969. IntToHex, 25
  2970. IntToStr, 25
  2971. IsAlphaNumeric, 37
  2972. IsCh, 21
  2973. IsFirstCh, 21
  2974. IsLastCh, 21
  2975. IsSame, 28
  2976. IsSameI, 28, 53
  2977. IsSameL, 28
  2978. IsSameLI, 28
  2979. IsValidIdent, 25
  2980. Items, 49, 50, 51
  2981. J
  2982. JustDirectory, 33, 53
  2983. JustExtension, 33
  2984. JustFileName, 33
  2985. JustName, 33
  2986. L
  2987. Last, 48, 50, 51
  2988. LastNonSpaceCh, 21
  2989. LastThat, 48
  2990. LastThatIdx, 48
  2991. Length, 14
  2992. LoadStr, 25
  2993. LoadStringRes, 31
  2994. LowerCase, 24
  2995. M
  2996. MaxSize, 14
  2997. Move, 42, 54
  2998. N
  2999. NextParseDelim, 38
  3000. NL, 20
  3001. NLAppend, 20
  3002. O
  3003. Own, 49
  3004. P
  3005. Pack, 43
  3006. PadCentre, 29
  3007. PadEnd, 30
  3008. PadFront, 30
  3009. ParseDelimCount, 38
  3010. ParseDelimToList, 38, 54
  3011. ParseMultiDelimToList, 40
  3012. ParsePosToList, 40
  3013. Prepend, 20, 49, 50, 51, 52
  3014. R
  3015. ReadIniKeyword, 31, 53
  3016. RecalcLength, 9, 10, 16, 55
  3017. Remove, 49, 50, 51
  3018. RemoveAll, 43
  3019. RemoveDIC, 30
  3020. RemoveDirectory, 33
  3021. RemoveLastCh, 21
  3022. RemoveSIC, 30
  3023. ReplaceAll, 37
  3024. ReplaceChAll, 37
  3025. ReplaceChFirst, 37
  3026. ReplaceChLast, 37
  3027. ReplaceFirst, 37
  3028. ReplaceLast, 38
  3029. Retrieve, 52
  3030. S
  3031. SameDirectory, 33
  3032. SameDrive, 33
  3033. SameExtension, 34
  3034. SameFileName, 34
  3035. SameName, 34
  3036. Selected_text, 22
  3037. SetCapacity, 54
  3038. SetCh, 21
  3039. SetCurDir, 34
  3040. SizeInc, 14
  3041. Sort, 44
  3042. SortInPlace, 54
  3043. StrCat, 26
  3044. StrClass, 5
  3045. StrClass.Res, 10
  3046. StrClassBaseZero, 6, 9, 13, 14, 17, 18, 19, 20, 21, 
  3047. 29, 34, 35, 36, 38, 40, 55
  3048. Working with VCL, 9
  3049. StrClassBaseZeroÆ, 6
  3050. StrComp, 26
  3051. StrCopy, 26
  3052. StrECopy, 26
  3053. StrEnd, 26
  3054. StrIComp, 26
  3055. STRINGS, 26
  3056. StrLCat, 26
  3057. StrLComp, 27
  3058. StrLCopy, 27
  3059. StrLen, 27
  3060. StrLIComp, 26
  3061. StrLower, 27
  3062. StrMove, 27
  3063. StrPas, 27
  3064. StrPCopy, 27
  3065. StrPos, 27
  3066. StrRScan, 27
  3067. StrScan, 27
  3068. StrToFloat, 26
  3069. StrToInt, 25
  3070. StrToIntDef, 25
  3071. StrUpper, 27
  3072. SubStrCount, 37
  3073. SysUtils, 4, 24
  3074. T
  3075. TCollection, 42
  3076. TCompareFunc, 43, 44
  3077. TEdit, 8
  3078. Text, 14
  3079. TMemo, 8
  3080. TObjectContainer, 8
  3081. ToBoolean, 23
  3082. ToByte, 23
  3083. ToChar, 23
  3084. ToComponent, 23
  3085. Working with VCL, 9
  3086. ToDouble, 23
  3087. ToExt, 23
  3088. ToLong, 23
  3089. ToLower, 37
  3090. ToReal, 24
  3091. ToRGB, 24
  3092. ToUpper, 37
  3093. ToWord, 24
  3094. Trim, 30
  3095. TrimEnd, 30
  3096. TrimFront, 30
  3097. TrimZero, 30
  3098. TWinControl, 8, 23
  3099. U
  3100. UpperCase, 24
  3101. USES, 5
  3102. W
  3103. Within, 29
  3104. WriteIniKeyword, 31
  3105. Z
  3106. zero based, 5
  3107. ZString, 9, 14
  3108.  
  3109.  
  3110.  
  3111. Page  
  3112.  
  3113.  
  3114.  
  3115.