Changeset 390 for trunk/Library


Ignore:
Timestamp:
Apr 30, 2016, 7:49:57 PM (9 years ago)
Author:
RBRi
Message:

more string utils (merged from old 2.20)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Library/StringUtilsUnit.pas

    r388 r390  
    22
    33// NewView - a new OS/2 Help Viewer
    4 // Copyright 2006-2007 Ronald Brill (rbri at rbri dot de)
     4// Copyright 2003-2006 Aaron Lawrence
     5// Copyright 2006-2009 Ronald Brill (rbri at rbri dot de)
    56// This software is released under the GNU Public License - see readme.txt
    67
     
    106107  Function LongWordToStr(const aLongWord: LongWord) : String;
    107108
    108   Function BoolToStr(const aBoolean : boolean ): string;
     109  Function BoolToStr(const aBoolean : Boolean ): String;
     110
     111  // Converts a hex string to a longint
     112  // May be upper or lower case
     113  // Does not allow a sign
     114  // Is not forgiving as StrToInt: all characters
     115  // must be valid hex chars.
     116  Function HexStrToLongInt(const aString : String ): longint;
    109117
    110118  // Returns aString enclosed in single quotes
     
    116124  // Extract all fields in a String delimited by whitespace (blank or tab).
    117125  // use double quotes if you need blanks in the strings
    118   Procedure StrExtractStringsQuoted(Var aResult: TStrings; const aReceiver: String );
    119 
     126  Procedure StrExtractStringsQuoted(Var aResult: TStrings; const aReceiver: String);
    120127
    121128  // returns the position of aPart in aString
    122129  // case insensitive
    123   Function CaseInsensitivePos(const aPart: String; const aString: String ): longint;
     130  Function CaseInsensitivePos(const aPart: String; const aString: String) : longint;
    124131
    125132  // Finds the last position of aChar within aString. Returns zero if no match
    126   Function LastPosOfChar(const aChar: char; const aString: String): longint;
     133  Function LastPosOfChar(const aChar: char; const aString: String) : longint;
     134
     135
     136  // Substitutes all occurences of given character with the replace char
     137  Procedure SubstituteAllOccurencesOfChar(var aReceiver: String; const aSearchChar: Char; const aReplaceChar: Char);
    127138
    128139
     
    668679
    669680
     681// Hex conversion: sheer extravagance. Conversion from
     682// a hex digit char to int is done by creating a lookup table
     683// in advance.
     684var
     685  MapHexDigitToInt: array[Chr(0) .. Chr(255)] of longint;
     686
     687  procedure InitHexDigitMap;
     688  var
     689    tmpChar : char;
     690    tmpIntValue : longint;
     691  begin
     692    for tmpChar := Chr(0) to Chr(255) do
     693    begin
     694      tmpIntValue := -1;
     695      if ( tmpChar >= '0') and (tmpChar <= '9') then
     696      begin
     697        tmpIntValue := Ord(tmpChar) - Ord('0');
     698      end;
     699
     700      if ( Upcase(tmpChar) >= 'A') and (Upcase(tmpChar) <= 'F') then
     701      begin
     702        tmpIntValue := 10 + Ord(Upcase(tmpChar)) - Ord('A');
     703      end;
     704
     705      MapHexDigitToInt[tmpChar] := tmpIntValue;
     706    end;
     707  end;
     708
     709
     710  Function HexDigitToInt(const aString : String; const aPosition : integer) : longint;
     711  begin
     712    Result := MapHexDigitToInt[aString[aPosition]];
     713    if Result = -1 then
     714    begin
     715      raise EConvertError.Create('Invalid hex char: ''' + aString[aPosition] + ''' in hex string ''' + aString +'''.' );
     716    end
     717  end;
     718
     719
     720  Function HexStrToLongInt(const aString : String) : longint;
     721  var
     722    i: integer;
     723  begin
     724    if Length(aString) = 0 then
     725    begin
     726      raise EConvertError.Create('No chars in hex string');
     727    end;
     728
     729    Result := 0;
     730    for i:= 1 to Length(aString) do
     731    begin
     732      Result := Result shl 4;
     733      inc(Result, HexDigitToInt(aString, i));
     734    end;
     735  end;
     736
    670737  Function StrInSingleQuotes(const aString : String) : String;
    671738  begin
     
    680747
    681748
    682   Procedure StrExtractStringsQuoted(Var aResult: TStrings; const aReceiver: String );
     749  Procedure StrExtractStringsQuoted(Var aResult: TStrings; const aReceiver: String);
    683750  Var
    684751    tmpState : (WHITESPACE, INSIDE, START_QUOTE, INSIDE_QUOTED, INSIDE_QUOTED_START_QUOTE);
     
    9391006  end;
    9401007
     1008
     1009  Procedure SubstituteAllOccurencesOfChar(var aReceiver: String; const aSearchChar: Char; const aReplaceChar: Char );
     1010  var
     1011    i : longint;
     1012  begin
     1013    for i :=1 to length(aReceiver) do
     1014    begin
     1015      if aReceiver[i] = aSearchChar then
     1016      begin
     1017        aReceiver[i] := aReplaceChar;
     1018      end
     1019    end
     1020  end;
     1021
     1022
    9411023  // --------------------
    9421024  // ---- AnsiString ----
     
    10961178  end;
    10971179
    1098 END.
     1180
     1181Initialization
     1182  InitHexDigitMap;
     1183End.
Note: See TracChangeset for help on using the changeset viewer.