Changeset 102


Ignore:
Timestamp:
Mar 26, 2007, 8:34:29 PM (18 years ago)
Author:
RBRi
Message:

improved StringUtilsUnit

Location:
trunk/NewView
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/NewView/BookmarksFormUnit.pas

    r94 r102  
    6767  ControlsUtility,
    6868  ACLDialogs,
    69   ACLStringUtility,
     69  StringUtilsUnit,
    7070  DebugUnit;
    7171
     
    134134  if DoConfirmDlg( DeleteBookmarkTitle,
    135135                   DeleteBookmarkA
    136                    + StrDoubleQuote( Bookmark.Name )
     136                   + StrInDoubleQuotes(Bookmark.Name)
    137137                   + DeleteBookmarkB ) then
    138138  begin
  • trunk/NewView/GlobalSearchForm.pas

    r98 r102  
    145145  ControlsUtility,
    146146  DriveInfoUnit,
    147   ACLStringUtility,
    148147  IPFFileFormatUnit,
    149148  HelpTopic,
     
    152151  SettingsUnit,
    153152  InformationFormUnit,
     153  StringUtilsUnit,
    154154  FileUtilsUnit;
    155155
     
    495495                                  ScanDirectoriesMsg );
    496496    Dir := tmpSearchParameters.Directories[ i ];
    497     if StrEnds( '...', Dir ) then
     497    if StrEndsWith('...', Dir) then
    498498    begin
    499499      Dir := StrLeftWithout( Dir, 3 );
  • trunk/NewView/StringUtilsUnit.pas

    r82 r102  
    1616  StrLF = chr(10);
    1717  StrCRLF = StrCR + StrLF;
     18  Quote = '''';
     19  DoubleQuote = '"';
    1820
    1921
     
    4345  // an optional escape character usable to escape field delimits.
    4446  // Example:
    45   //     StrExtractStrings('1x2x3\x4', "x", '\') ->
    46   //     returns 4 strings: "1", "", "2" and "3x4"
     47  //     StrExtractStrings('1x2x3\x4', 'x', '\') ->
     48  //     returns 4 strings: '1', '', '2' and '3x4'
    4749  Procedure StrExtractStrings(Var aResult : TStrings; Const aReceiver: String; const aSetOfChars: TSetOfChars; const anEscapeChar: char);
    4850
     
    6870  Function StrLeft(const aString : String; const aCount : Integer) : String;
    6971
     72  // Returns a copy of the string without aCount chars from right
     73  Function StrLeftWithout(const aString : String; const aCount : Integer) : String;
     74
     75  // Returns a copy of the string including all characters until one from aSetOfChars found
     76  Function StrLeftUntil(const aReceiver: String; const aSetOfChars: TSetOfChars) : String;
     77
     78  // returns true if the String starts with the provides one
     79  // this is case SENSITIVE
     80  Function StrStartsWith(const aReceiver: String; const aStartString: String): Boolean;
     81
     82  // returns true if the String starts with the provides one
     83  // this is case INsensitive
     84  Function StrStartsWithIgnoringCase(const aReceiver: String; const aStartString: String): Boolean;
     85
    7086  // returns true if the String ends with the provides one
    7187  // this is case SENSITIVE
     
    7490  // returns true if the String ends with the provides one
    7591  // this is case INsensitive
    76   Function StrEndsWithIgnoringCase(const aString: String; const anEndString: String): Boolean;
     92  Function StrEndsWithIgnoringCase(const aReceiver: String; const anEndString: String): Boolean;
    7793
    7894  // the IntToStr generates wrong results
     
    8298
    8399  Function BoolToStr(const aBoolean : boolean ): string;
     100
     101  // Returns aString enclosed in double quotes
     102  Function StrInDoubleQuotes(const aString : String) : String;
    84103
    85104
     
    350369
    351370
     371  Function StrLeftWithout(const aString : String; const aCount : Integer) : String;
     372  Begin
     373    Result:= copy(aString, 1, length(aString) - aCount );
     374  End;
     375
     376
     377  Function StrLeftUntil(const aReceiver: String; const aSetOfChars: TSetOfChars) : String;
     378  Var
     379    i : integer;
     380  Begin
     381    Result := aReceiver;
     382
     383    for i := 1 To Length(aReceiver) do
     384    begin
     385      if aReceiver[i] in aSetOfChars then
     386      begin
     387        Result := Copy(aReceiver, 1, i-1 );
     388        break;
     389      end;
     390    end;
     391  end;
     392
     393
     394  Function StrStartsWith(const aReceiver: String; const aStartString: String) : Boolean;
     395  Var
     396    tmpStringPos : integer;
     397    tmpStartStringLength : integer;
     398  Begin
     399    tmpStartStringLength := Length(aStartString);
     400
     401    if Length(aReceiver) < tmpStartStringLength then
     402    begin
     403      result := false;
     404      exit;
     405    end;
     406
     407    for tmpStringPos := 1 to tmpStartStringLength do
     408    begin
     409      if aReceiver[tmpStringPos] <> aStartString[tmpStringPos] then
     410      begin
     411        result := false;
     412        exit;
     413      end;
     414    end;
     415
     416    result := true;
     417  end;
     418
     419
     420  Function StrStartsWithIgnoringCase(const aReceiver: String; const aStartString: String) : Boolean;
     421  Var
     422    tmpStringPos : integer;
     423    tmpStartStringLength : integer;
     424  Begin
     425    tmpStartStringLength := Length(aStartString);
     426
     427    if Length(aReceiver) < tmpStartStringLength then
     428    begin
     429      result := false;
     430      exit;
     431    end;
     432
     433    for tmpStringPos := 1 to tmpStartStringLength do
     434    begin
     435      if UpCase(aReceiver[tmpStringPos]) <> UpCase(aStartString[tmpStringPos]) then
     436      begin
     437        result := false;
     438        exit;
     439      end;
     440    end;
     441
     442    result := true;
     443  end;
     444
     445
    352446  Function StrEndsWith(const aReceiver: String; const anEndString: String): Boolean;
    353447  Var
     
    384478    tmpMatchPos : Longint;
    385479  Begin
    386     tmpStringPos := length(aString);
     480    tmpStringPos := length(aReceiver);
    387481    tmpMatchPos := length(anEndString);
    388482
     
    395489    while tmpMatchPos > 0 do
    396490    begin
    397       if upcase(aString[tmpStringPos]) <> upcase(anEndString[tmpMatchPos]) then
     491      if upcase(aReceiver[tmpStringPos]) <> upcase(anEndString[tmpMatchPos]) then
    398492      begin
    399493        result := false;
     
    406500    result := true;
    407501  end;
     502
    408503
    409504  Function LongWordToStr(const aLongWord: LongWord) : String;
     
    450545  end;
    451546
     547  Function StrInDoubleQuotes(const aString : String) : String;
     548  begin
     549    Result := DoubleQuote + aString + DoubleQuote;
     550  end;
     551
     552
    452553END.
  • trunk/NewView/unittests/StringUtilsUnitTests.pas

    r82 r102  
    811811  END;
    812812
     813
    813814  // -------------------------------------------------------------------
    814815
    815816
     817  PROCEDURE testStrLeftWithout_Empty;
     818  VAR
     819    tmpResult : String;
     820  BEGIN
     821    tmpResult := StrLeftWithout('', 4);
     822
     823    assertEqualsString('testStrLeftWithout_Empty', '', tmpResult);
     824  END;
     825
     826
     827  PROCEDURE testStrLeftWithout_ToBig;
     828  VAR
     829    tmpResult : String;
     830  BEGIN
     831    tmpResult := StrLeftWithout('ab', 4);
     832
     833    assertEqualsString('testStrLeftWithout_ToBig', '', tmpResult);
     834  END;
     835
     836
     837  PROCEDURE testStrLeftWithout_Negative;
     838  VAR
     839    tmpResult : String;
     840  BEGIN
     841    tmpResult := StrLeftWithout('ab', -1);
     842
     843    assertEqualsString('testStrLeftWithout_Negative', 'ab', tmpResult);
     844  END;
     845
     846
     847  PROCEDURE testStrLeftWithout_All;
     848  VAR
     849    tmpResult : String;
     850  BEGIN
     851    tmpResult := StrLeftWithout('abdefg', 6);
     852
     853    assertEqualsString('testStrLeftWithout_All', '', tmpResult);
     854  END;
     855
     856
     857  PROCEDURE testStrLeftWithout;
     858  VAR
     859    tmpResult : String;
     860  BEGIN
     861    tmpResult := StrLeftWithout('abdefg', 3);
     862
     863    assertEqualsString('testStrLeftWithout', 'abd', tmpResult);
     864  END;
     865
     866
     867  // -------------------------------------------------------------------
     868
     869
     870  PROCEDURE testStrLeftUntil_Empty;
     871  VAR
     872    tmpResult : String;
     873  BEGIN
     874    tmpResult := StrLeftUntil('', ['b', 'x']);
     875
     876    assertEqualsString('testStrLeftUntil_Empty', '', tmpResult);
     877  END;
     878
     879
     880  PROCEDURE testStrLeftUntil_Empty_EmptyDelimiterSet;
     881  VAR
     882    tmpResult : String;
     883  BEGIN
     884    tmpResult := StrLeftUntil('', []);
     885
     886    assertEqualsString('testStrLeftUntil_Empty_EmptyDelimiterSet', '', tmpResult);
     887  END;
     888
     889
     890  PROCEDURE testStrLeftUntil_EmptyDelimiterSet;
     891  VAR
     892    tmpResult : String;
     893  BEGIN
     894    tmpResult := StrLeftUntil('abc', []);
     895
     896    assertEqualsString('testStrLeftUntil_EmptyDelimiterSet', 'abc', tmpResult);
     897  END;
     898
     899
     900  PROCEDURE testStrLeftUntil_FirstIsDelimiter;
     901  VAR
     902    tmpResult : String;
     903  BEGIN
     904    tmpResult := StrLeftUntil('abc', ['a']);
     905
     906    assertEqualsString('testStrLeftUntil_FirstIsDelimiter', '', tmpResult);
     907  END;
     908
     909
     910  PROCEDURE testStrLeftUntil_LastIsDelimiter;
     911  VAR
     912    tmpResult : String;
     913  BEGIN
     914    tmpResult := StrLeftUntil('abc', ['c']);
     915
     916    assertEqualsString('testStrLeftUntil_LastIsDelimiter', 'ab', tmpResult);
     917  END;
     918
     919
     920  PROCEDURE testStrLeftUntil_UnusedDelimiter;
     921  VAR
     922    tmpResult : String;
     923  BEGIN
     924    tmpResult := StrLeftUntil('abc', ['x']);
     925
     926    assertEqualsString('testStrLeftUntil_UnusedDelimiter', 'abc', tmpResult);
     927  END;
     928
     929
     930  PROCEDURE testStrLeftUntil;
     931  VAR
     932    tmpResult : String;
     933  BEGIN
     934    tmpResult := StrLeftUntil('abcx yz do', ['d', ' ']);
     935
     936    assertEqualsString('testStrLeftUntil', 'abcx', tmpResult);
     937  END;
     938
     939
     940  // -------------------------------------------------------------------
     941
     942
     943  PROCEDURE testStrStartsWith_BothEmpty;
     944  VAR
     945    tmpResult : Boolean;
     946  BEGIN
     947    tmpResult := StrStartsWith('', '');
     948
     949    assertTrue('testStrStartsWith_BothEmpty', tmpResult);
     950  END;
     951
     952
     953  PROCEDURE testStrStartsWith_StringEmpty;
     954  VAR
     955    tmpResult : Boolean;
     956  BEGIN
     957    tmpResult := StrStartsWith('', 'end');
     958
     959    assertFalse('testStrStartsWith_StringEmpty', tmpResult);
     960  END;
     961
     962
     963  PROCEDURE testStrStartsWith_MatchEmpty;
     964  VAR
     965    tmpResult : Boolean;
     966  BEGIN
     967    tmpResult := StrStartsWith('test', '');
     968
     969    assertTrue('testStrStartsWith_MatchEmpty', tmpResult);
     970  END;
     971
     972
     973  PROCEDURE testStrStartsWith_StringToShort;
     974  VAR
     975    tmpResult : Boolean;
     976  BEGIN
     977    tmpResult := StrStartsWith('test', 'test1');
     978
     979    assertFalse('testStrStartsWith_StringToShort', tmpResult);
     980  END;
     981
     982
     983  PROCEDURE testStrStartsWith_StringEqualLength;
     984  VAR
     985    tmpResult : Boolean;
     986  BEGIN
     987    tmpResult := StrStartsWith('test', 'best');
     988
     989    assertFalse('testStrStartsWith_StringEqualLength', tmpResult);
     990  END;
     991
     992
     993  PROCEDURE testStrStartsWith_StringEqualLengthMatch;
     994  VAR
     995    tmpResult : Boolean;
     996  BEGIN
     997    tmpResult := StrStartsWith('test', 'test');
     998
     999    assertTrue('testStrStartsWith_StringEqualLengthMatch', tmpResult);
     1000  END;
     1001
     1002
     1003  PROCEDURE testStrStartsWith_StringMatch;
     1004  VAR
     1005    tmpResult : Boolean;
     1006  BEGIN
     1007    tmpResult := StrStartsWith('this is a simple test', 'this');
     1008
     1009    assertTrue('testStrStartsWith_StringMatch', tmpResult);
     1010  END;
     1011
     1012
     1013  PROCEDURE testStrStartsWith_StringMatchCaseSensitive;
     1014  VAR
     1015    tmpResult : Boolean;
     1016  BEGIN
     1017    tmpResult := StrStartsWith('This is a simple test', 'tHis');
     1018
     1019    assertFalse('testStrStartsWith_StringMatchCaseSensitive', tmpResult);
     1020  END;
     1021
     1022
     1023  // -------------------------------------------------------------------
     1024
     1025
     1026  PROCEDURE testStrStartsWithIgnoringCase_BothEmpty;
     1027  VAR
     1028    tmpResult : Boolean;
     1029  BEGIN
     1030    tmpResult := StrStartsWithIgnoringCase('', '');
     1031
     1032    assertTrue('testStrStartsWithIgnoringCase_BothEmpty', tmpResult);
     1033  END;
     1034
     1035
     1036  PROCEDURE testStrStartsWithIgnoringCase_StringEmpty;
     1037  VAR
     1038    tmpResult : Boolean;
     1039  BEGIN
     1040    tmpResult := StrStartsWithIgnoringCase('', 'end');
     1041
     1042    assertFalse('testStrStartsWithIgnoringCase_StringEmpty', tmpResult);
     1043  END;
     1044
     1045
     1046  PROCEDURE testStrStartsWithIgnoringCase_MatchEmpty;
     1047  VAR
     1048    tmpResult : Boolean;
     1049  BEGIN
     1050    tmpResult := StrStartsWithIgnoringCase('test', '');
     1051
     1052    assertTrue('testStrStartsWithIgnoringCase_MatchEmpty', tmpResult);
     1053  END;
     1054
     1055
     1056  PROCEDURE testStrStartsWithIgnoringCase_StringToShort;
     1057  VAR
     1058    tmpResult : Boolean;
     1059  BEGIN
     1060    tmpResult := StrStartsWithIgnoringCase('test', 'test1');
     1061
     1062    assertFalse('testStrStartsWithIgnoringCase_StringToShort', tmpResult);
     1063  END;
     1064
     1065
     1066  PROCEDURE testStrStartsWithIgnoringCase_StringEqualLength;
     1067  VAR
     1068    tmpResult : Boolean;
     1069  BEGIN
     1070    tmpResult := StrStartsWithIgnoringCase('test', 'best');
     1071
     1072    assertFalse('testStrStartsWithIgnoringCase_StringEqualLength', tmpResult);
     1073  END;
     1074
     1075
     1076  PROCEDURE testStrStartsWithIgnoringCase_StringEqualLengthMatch;
     1077  VAR
     1078    tmpResult : Boolean;
     1079  BEGIN
     1080    tmpResult := StrStartsWithIgnoringCase('test', 'test');
     1081
     1082    assertTrue('testStrStartsWithIgnoringCase_StringEqualLengthMatch', tmpResult);
     1083  END;
     1084
     1085
     1086  PROCEDURE testStrStartsWithIgnoringCase_StringMatch;
     1087  VAR
     1088    tmpResult : Boolean;
     1089  BEGIN
     1090    tmpResult := StrStartsWithIgnoringCase('This is a simple test', 'This');
     1091
     1092    assertTrue('testStrStartsWithIgnoringCase_StringMatch', tmpResult);
     1093  END;
     1094
     1095
     1096  PROCEDURE testStrStartsWithIgnoringCase_StringMatchCaseInSensitive;
     1097  VAR
     1098    tmpResult : Boolean;
     1099  BEGIN
     1100    tmpResult := StrStartsWithIgnoringCase('ThiS is a simple test', 'THis');
     1101
     1102    assertTrue('testStrStartsWithIgnoringCase_StringMatchCaseSensitive', tmpResult);
     1103  END;
     1104
     1105
     1106  // -------------------------------------------------------------------
     1107
     1108
    8161109  PROCEDURE testStrEndsWith_BothEmpty;
    8171110  VAR
     
    10221315    assertEqualsString('testBoolToStr_false', 'False', tmpResult);
    10231316  END;
     1317
     1318  // ----------------------------------------------------------
     1319
     1320
     1321  PROCEDURE testStrInDoubleQuotes_Empty;
     1322  VAR
     1323    tmpResult : String;
     1324  BEGIN
     1325    tmpResult := StrInDoubleQuotes('');
     1326
     1327    assertEqualsString('testStrInDoubleQuotes_Empty', '""', tmpResult);
     1328  END;
     1329
     1330
     1331  PROCEDURE testStrInDoubleQuotes;
     1332  VAR
     1333    tmpResult : String;
     1334  BEGIN
     1335    tmpResult := StrInDoubleQuotes('abc');
     1336
     1337    assertEqualsString('testStrInDoubleQuotes', '"abc"', tmpResult);
     1338  END;
     1339
    10241340
    10251341  // ----------------------------------------------------------
     
    11011417    result.add(@testStrLeft_Part);
    11021418
     1419    result.add(@testStrLeftWithout_Empty);
     1420    result.add(@testStrLeftWithout_ToBig);
     1421    result.add(@testStrLeftWithout_Negative);
     1422    result.add(@testStrLeftWithout_All);
     1423    result.add(@testStrLeftWithout);
     1424
     1425    result.add(@testStrLeftUntil_Empty);
     1426    result.add(@testStrLeftUntil_Empty_EmptyDelimiterSet);
     1427    result.add(@testStrLeftUntil_EmptyDelimiterSet);
     1428    result.add(@testStrLeftUntil_FirstIsDelimiter);
     1429    result.add(@testStrLeftUntil_LastIsDelimiter);
     1430    result.add(@testStrLeftUntil_UnusedDelimiter);
     1431    result.add(@testStrLeftUntil);
     1432
     1433    result.add(@testStrStartsWith_BothEmpty);
     1434    result.add(@testStrStartsWith_StringEmpty);
     1435    result.add(@testStrStartsWith_MatchEmpty);
     1436    result.add(@testStrStartsWith_StringToShort);
     1437    result.add(@testStrStartsWith_StringEqualLength);
     1438    result.add(@testStrStartsWith_StringEqualLengthMatch);
     1439    result.add(@testStrStartsWith_StringMatch);
     1440    result.add(@testStrStartsWith_StringMatchCaseSensitive);
     1441
     1442    result.add(@testStrStartsWithIgnoringCase_BothEmpty);
     1443    result.add(@testStrStartsWithIgnoringCase_StringEmpty);
     1444    result.add(@testStrStartsWithIgnoringCase_MatchEmpty);
     1445    result.add(@testStrStartsWithIgnoringCase_StringToShort);
     1446    result.add(@testStrStartsWithIgnoringCase_StringEqualLength);
     1447    result.add(@testStrStartsWithIgnoringCase_StringEqualLengthMatch);
     1448    result.add(@testStrStartsWithIgnoringCase_StringMatch);
     1449    result.add(@testStrStartsWithIgnoringCase_StringMatchCaseInSensitive);
     1450
    11031451    result.add(@testStrEndsWith_BothEmpty);
    11041452    result.add(@testStrEndsWith_StringEmpty);
     
    11251473    result.add(@testBoolToStr_true);
    11261474    result.add(@testBoolToStr_false);
     1475
     1476    result.add(@testStrInDoubleQuotes_Empty);
     1477    result.add(@testStrInDoubleQuotes);
    11271478  END;
    11281479
Note: See TracChangeset for help on using the changeset viewer.