Ignore:
Timestamp:
Jun 7, 2007, 8:53:05 PM (18 years ago)
Author:
RBRi
Message:

another update

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Library/StringUtilsUnit.pas

    r172 r198  
    106106  Function LongWordToStr(const aLongWord: LongWord) : String;
    107107
    108   Function BoolToStr(const aBoolean : boolean ): string;
     108  Function BoolToStr(const aBoolean : Boolean ): String;
     109
     110  // Converts a hex string to a longint
     111  // May be upper or lower case
     112  // Does not allow a sign
     113  // Is not forgiving as StrToInt: all characters
     114  // must be valid hex chars.
     115  Function HexStrToLongInt(const aString : String ): longint;
    109116
    110117  // Returns aString enclosed in single quotes
     
    118125  Procedure StrExtractStringsQuoted(Var aResult: TStrings; const aReceiver: String );
    119126
    120 
    121127  // returns the position of aPart in aString
    122128  // case insensitive
     
    125131  // Finds the last position of aChar within aString. Returns zero if no match
    126132  Function LastPosOfChar(const aChar: char; const aString: String): longint;
     133
     134
     135  // Substitutes all occurences of given character with the replace char
     136  Procedure SubstituteAllOccurencesOfChar(var aReceiver: String; const aSearchChar: Char; const aReplaceChar: Char );
    127137
    128138
     
    668678
    669679
     680// Hex conversion: sheer extravagance. Conversion from
     681// a hex digit char to int is done by creating a lookup table
     682// in advance.
     683var
     684  MapHexDigitToInt: array[Chr(0) .. Chr(255)] of longint;
     685
     686  procedure InitHexDigitMap;
     687  var
     688    tmpChar : char;
     689    tmpIntValue : longint;
     690  begin
     691    for tmpChar := Chr(0) to Chr(255) do
     692    begin
     693      tmpIntValue := -1;
     694      if ( tmpChar >= '0') and (tmpChar <= '9') then
     695      begin
     696        tmpIntValue := Ord(tmpChar) - Ord('0');
     697      end;
     698
     699      if ( Upcase(tmpChar) >= 'A') and (Upcase(tmpChar) <= 'F') then
     700      begin
     701        tmpIntValue := 10 + Ord(Upcase(tmpChar)) - Ord('A');
     702      end;
     703
     704      MapHexDigitToInt[tmpChar] := tmpIntValue;
     705    end;
     706  end;
     707
     708
     709  Function HexDigitToInt(const aString : String; const aPosition : integer) : longint;
     710  begin
     711    Result := MapHexDigitToInt[aString[aPosition]];
     712    if Result = -1 then
     713    begin
     714      raise EConvertError.Create('Invalid hex char: ''' + aString[aPosition] + ''' in hex string ''' + aString +'''.' );
     715    end
     716  end;
     717
     718
     719  Function HexStrToLongInt(const aString : String) : longint;
     720  var
     721    i: integer;
     722  begin
     723    if Length(aString) = 0 then
     724    begin
     725      raise EConvertError.Create('No chars in hex string');
     726    end;
     727
     728    Result := 0;
     729    for i:= 1 to Length(aString) do
     730    begin
     731      Result := Result shl 4;
     732      inc(Result, HexDigitToInt(aString, i));
     733    end;
     734  end;
     735
    670736  Function StrInSingleQuotes(const aString : String) : String;
    671737  begin
     
    9391005  end;
    9401006
     1007
     1008  Procedure SubstituteAllOccurencesOfChar(var aReceiver: String; const aSearchChar: Char; const aReplaceChar: Char );
     1009  var
     1010    i : longint;
     1011  begin
     1012    for i :=1 to length(aReceiver) do
     1013    begin
     1014      if aReceiver[i] = aSearchChar then
     1015      begin
     1016        aReceiver[i] := aReplaceChar;
     1017      end
     1018    end
     1019  end;
     1020
     1021
    9411022  // --------------------
    9421023  // ---- AnsiString ----
     
    10961177  end;
    10971178
    1098 END.
     1179
     1180Initialization
     1181  InitHexDigitMap;
     1182End.
Note: See TracChangeset for help on using the changeset viewer.