Changeset 139
- Timestamp:
- Apr 30, 2007, 9:00:32 PM (18 years ago)
- Location:
- trunk/NewView
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NewView/CharUtilsUnit.pas
r121 r139 16 16 CharCR = chr(13); 17 17 CharLF = chr(10); 18 CharSingleQuote = ''''; 19 CharDoubleQuote = '"'; 18 20 19 21 -
trunk/NewView/StringUtilsUnit.pas
r123 r139 18 18 StrLF = CharLF; 19 19 StrCRLF = StrCR + StrLF; 20 StrSingleQuote = '''';21 StrDoubleQuote = '"';20 StrSingleQuote = CharSingleQuote; 21 StrDoubleQuote = CharDoubleQuote; 22 22 23 23 … … 37 37 end; 38 38 39 // prefi ces all occurences of one of the chars in aStringWithChars with anEscape char39 // prefixes all occurences of one of the chars in aStringWithChars with anEscape char 40 40 // if the escapeChar itself is found, then it is doubled 41 41 Function StrEscapeAllCharsBy(const aReceiver: String; const aSetOfChars: TSetOfChars; const anEscapeChar: char): String; … … 94 94 Function StrEndsWithIgnoringCase(const aReceiver: String; const anEndString: String): Boolean; 95 95 96 // Returns true if aReceiver is only spaces (or empty) 97 Function StrIsEmptyOrSpaces(const aReceiver: String) : Boolean; 98 96 99 // returns true if the Strings are the same 97 100 // this is case INsensitive … … 105 108 Function BoolToStr(const aBoolean : boolean ): string; 106 109 110 // Returns aString enclosed in single quotes 111 Function StrInSingleQuotes(const aString : String) : String; 112 107 113 // Returns aString enclosed in double quotes 108 114 Function StrInDoubleQuotes(const aString : String) : String; … … 117 123 Function CaseInsensitivePos(const aPart: String; const aString: String ): longint; 118 124 125 // Finds the last position of aChar within aString. Returns zero if no match 126 Function LastPosOfChar(const aChar: char; const aString: String): longint; 127 119 128 120 129 // -------------------- … … 122 131 // -------------------- 123 132 124 133 125 134 // removes all occurences of char from aSetOfChars from the beginning 126 135 // of a String. … … 139 148 140 149 150 // -------------------- 151 // ---- Misc TODO ---- 152 // -------------------- 153 154 Procedure GetMemString(const aPointer : pointer; var aString: string; const aSize: byte); 155 156 Procedure FreePString(var aPString: PString ); 157 158 Function NewPString(const aString : String) : PString; 141 159 142 160 … … 145 163 uses 146 164 SysUtils, 147 DebugUnit; 165 DebugUnit, 166 ACLUtility; // TODO 148 167 149 168 constructor TSerializableStringList.Create; … … 568 587 569 588 589 Function StrIsEmptyOrSpaces(const aReceiver: String) : Boolean; 590 Begin 591 Asm 592 MOV ESI, aReceiver // get address of aReceiver into ESI 593 MOV CL,[ESI] // get length of s 594 MOVZX ECX, CL // widen CL 595 INC ECX 596 597 !IsSpacesLoop: 598 INC ESI // move to next char 599 DEC ECX 600 JE !IsSpacesTrue 601 602 MOV AL,[ESI] // load character 603 CMP AL,32 // is it a space? 604 JE !IsSpacesLoop // yes, go to next 605 606 // no, return false 607 MOV EAX, 0 608 JMP !IsSpacesDone 609 610 !IsSpacesTrue: 611 MOV EAX, 1 612 613 !IsSpacesDone: 614 LEAVE 615 RETN32 4 616 End; 617 End; 618 619 570 620 Function StrEqualIgnoringCase(const aReceiver: String; const aSecondString: String): Boolean; 571 621 begin … … 618 668 619 669 670 Function StrInSingleQuotes(const aString : String) : String; 671 begin 672 Result := StrSingleQuote + aString + StrSingleQuote; 673 end; 674 675 620 676 Function StrInDoubleQuotes(const aString : String) : String; 621 677 begin … … 866 922 867 923 924 Function LastPosOfChar(const aChar: char; const aString: String): longint; 925 Var 926 tmpPos : longint; 927 begin 928 tmpPos := Length(aString); 929 while tmpPos > 0 do 930 begin 931 if aString[tmpPos] = aChar then 932 begin 933 Result := tmpPos; 934 exit; 935 end; 936 dec(tmpPos); 937 end; 938 Result := 0; 939 end; 940 868 941 // -------------------- 869 942 // ---- AnsiString ---- … … 994 1067 995 1068 1069 // -------------------- 1070 // ---- Misc TODO ---- 1071 // -------------------- 1072 1073 Procedure GetMemString(const aPointer : pointer; var aString: string; const aSize: byte); 1074 begin 1075 aString[0] := char(aSize); 1076 MemCopy(aPointer, Addr(aString[1]), aSize); 1077 end; 1078 1079 1080 Procedure FreePString(var aPString : PString ); 1081 begin 1082 if aPString = nil then 1083 begin 1084 exit; 1085 end; 1086 1087 FreeMem(aPString, Length(aPString^) + 1); 1088 aPString := nil; 1089 end; 1090 1091 1092 Function NewPString(const aString : String) : PString; 1093 begin 1094 GetMem(Result, Length(aString) + 1); 1095 Result^ := aString; 1096 end; 1097 996 1098 END. -
trunk/NewView/unittests/StringUtilsUnitTests.pas
r118 r139 280 280 281 281 282 PROCEDURE testEscapeAllCharsBy_NoCharactersToEscape; 283 VAR 284 tmpResult : String; 285 BEGIN 286 tmpResult := StrEscapeAllCharsBy('a\bc\\de', [], '\'); 287 288 assertEqualsString('testEscapeAllCharsBy_NoCharactersToEscape', 'a\\bc\\\\de', tmpResult); 289 END; 290 291 292 PROCEDURE testEscapeAllCharsBy_DoubleDoubleQuotes; 293 VAR 294 tmpResult : String; 295 BEGIN 296 tmpResult := StrEscapeAllCharsBy('"ab cd"e', [], '"'); 297 298 assertEqualsString('testEscapeAllCharsBy_DoubleDoubleQuotes', '""ab cd""e', tmpResult); 299 END; 300 301 282 302 // ------------------------------------------------------ 283 303 … … 1368 1388 1369 1389 1390 PROCEDURE testStrIsEmptyOrSpaces_Empty; 1391 VAR 1392 tmpResult : Boolean; 1393 BEGIN 1394 tmpResult := StrIsEmptyOrSpaces(''); 1395 1396 assertTrue('testStrIsEmptyOrSpaces_Empty', tmpResult); 1397 END; 1398 1399 1400 PROCEDURE testStrIsEmptyOrSpaces_OneSpace; 1401 VAR 1402 tmpResult : Boolean; 1403 BEGIN 1404 tmpResult := StrIsEmptyOrSpaces(' '); 1405 1406 assertTrue('testStrIsEmptyOrSpaces_OneSpace', tmpResult); 1407 END; 1408 1409 1410 PROCEDURE testStrIsEmptyOrSpaces_ManySpaces; 1411 VAR 1412 tmpResult : Boolean; 1413 BEGIN 1414 tmpResult := StrIsEmptyOrSpaces(' '); 1415 1416 assertTrue('testStrIsEmptyOrSpaces_ManySpaces', tmpResult); 1417 END; 1418 1419 1420 PROCEDURE testStrIsEmptyOrSpaces_OneChar; 1421 VAR 1422 tmpResult : Boolean; 1423 BEGIN 1424 tmpResult := StrIsEmptyOrSpaces('a'); 1425 1426 assertFalse('testStrIsEmptyOrSpaces_OneChar', tmpResult); 1427 END; 1428 1429 1430 PROCEDURE testStrIsEmptyOrSpaces_ManyChars; 1431 VAR 1432 tmpResult : Boolean; 1433 BEGIN 1434 tmpResult := StrIsEmptyOrSpaces('abcde'); 1435 1436 assertFalse('testStrIsEmptyOrSpaces_ManyChars', tmpResult); 1437 END; 1438 1439 1440 PROCEDURE testStrIsEmptyOrSpaces_SpacesWithOneChar; 1441 VAR 1442 tmpResult : Boolean; 1443 BEGIN 1444 tmpResult := StrIsEmptyOrSpaces(' z '); 1445 1446 assertFalse('testStrIsEmptyOrSpaces_SpacesWithOneChar', tmpResult); 1447 END; 1448 1449 1450 PROCEDURE testStrIsEmptyOrSpaces_CharZero; 1451 VAR 1452 tmpResult : Boolean; 1453 BEGIN 1454 tmpResult := StrIsEmptyOrSpaces(#0); 1455 1456 assertFalse('testStrIsEmptyOrSpaces_CharZero', tmpResult); 1457 END; 1458 1459 1460 // ---------------------------------------------------------- 1461 1462 1370 1463 PROCEDURE testStrEqualIgnoringCase_BothEmpty; 1371 1464 VAR … … 1475 1568 1476 1569 assertEqualsString('testBoolToStr_false', 'False', tmpResult); 1570 END; 1571 1572 1573 // ---------------------------------------------------------- 1574 1575 1576 PROCEDURE testStrInSingleQuotes_Empty; 1577 VAR 1578 tmpResult : String; 1579 BEGIN 1580 tmpResult := StrInSingleQuotes(''); 1581 1582 assertEqualsString('testStrInSingleQuotes_Empty', '''''', tmpResult); 1583 END; 1584 1585 1586 PROCEDURE testStrInSingleQuotes; 1587 VAR 1588 tmpResult : String; 1589 BEGIN 1590 tmpResult := StrInSingleQuotes('abc'); 1591 1592 assertEqualsString('testStrInSingleQuotes', '''abc''', tmpResult); 1477 1593 END; 1478 1594 … … 1856 1972 tmpResult := CaseInsensitivePos(LowerCase(tmpPart), tmpString); 1857 1973 assertEqualsInt('testCaseInsensitivePos', 1, tmpResult); 1858 END; 1974 END; 1975 1976 1977 1978 // ------------------------------------------------------------------- 1979 1980 1981 PROCEDURE testLastPosOfChar_Empty; 1982 VAR 1983 tmpResult : longint; 1984 BEGIN 1985 tmpResult := LastPosOfChar('x', ''); 1986 1987 assertEqualsInt('testLastPosOfChar_Empty', 0, tmpResult); 1988 END; 1989 1990 1991 PROCEDURE testLastPosOfChar_NotFound; 1992 VAR 1993 tmpResult : longint; 1994 BEGIN 1995 tmpResult := LastPosOfChar('x', 'abcd'); 1996 1997 assertEqualsInt('testLastPosOfChar_NotFound', 0, tmpResult); 1998 END; 1999 2000 2001 PROCEDURE testLastPosOfChar_OneCharNotFound; 2002 VAR 2003 tmpResult : longint; 2004 BEGIN 2005 tmpResult := LastPosOfChar('x', 'a'); 2006 2007 assertEqualsInt('testLastPosOfChar_OneCharNotFound', 0, tmpResult); 2008 END; 2009 2010 2011 PROCEDURE testLastPosOfChar_OneCharFound; 2012 VAR 2013 tmpResult : longint; 2014 BEGIN 2015 tmpResult := LastPosOfChar('x', 'x'); 2016 2017 assertEqualsInt('testLastPosOfChar_OneCharFound', 1, tmpResult); 2018 END; 2019 2020 2021 PROCEDURE testLastPosOfChar_OneCharWrongCase; 2022 VAR 2023 tmpResult : longint; 2024 BEGIN 2025 tmpResult := LastPosOfChar('x', 'X'); 2026 2027 assertEqualsInt('testLastPosOfChar_OneCharWrongCase', 0, tmpResult); 2028 END; 2029 2030 2031 PROCEDURE testLastPosOfChar_FirstChar; 2032 VAR 2033 tmpResult : longint; 2034 BEGIN 2035 tmpResult := LastPosOfChar('x', 'xabcd'); 2036 2037 assertEqualsInt('testLastPosOfChar_FirstChar', 1, tmpResult); 2038 END; 2039 2040 2041 PROCEDURE testLastPosOfChar_LastChar; 2042 VAR 2043 tmpResult : longint; 2044 BEGIN 2045 tmpResult := LastPosOfChar('x', 'abcdx'); 2046 2047 assertEqualsInt('testLastPosOfChar_LastChar', 5, tmpResult); 2048 END; 2049 2050 2051 PROCEDURE testLastPosOfChar_MiddleChar; 2052 VAR 2053 tmpResult : longint; 2054 BEGIN 2055 tmpResult := LastPosOfChar('x', 'abcdxwertzu'); 2056 2057 assertEqualsInt('testLastPosOfChar_MiddleChar', 5, tmpResult); 2058 END; 2059 2060 2061 PROCEDURE testLastPosOfChar_ManyHits; 2062 VAR 2063 tmpResult : longint; 2064 BEGIN 2065 tmpResult := LastPosOfChar('x', 'axbcxdxu'); 2066 2067 assertEqualsInt('testLastPosOfChar_ManyHits', 7, tmpResult); 2068 END; 1859 2069 1860 2070 … … 2227 2437 result.add(@testEscapeAllCharsBy_EmptyChars); 2228 2438 result.add(@testEscapeAllCharsBy_EscapeEscape); 2439 result.add(@testEscapeAllCharsBy_NoCharactersToEscape); 2440 result.add(@testEscapeAllCharsBy_DoubleDoubleQuotes); 2229 2441 2230 2442 result.add(@testStrExtractStrings_EmptyReceiver); … … 2339 2551 result.add(@testStrEndsWithIgnoringCase_StringMatchCaseInSensitive); 2340 2552 2553 result.add(@testStrIsEmptyOrSpaces_Empty); 2554 result.add(@testStrIsEmptyOrSpaces_OneSpace); 2555 result.add(@testStrIsEmptyOrSpaces_ManySpaces); 2556 result.add(@testStrIsEmptyOrSpaces_OneChar); 2557 result.add(@testStrIsEmptyOrSpaces_ManyChars); 2558 result.add(@testStrIsEmptyOrSpaces_SpacesWithOneChar); 2559 result.add(@testStrIsEmptyOrSpaces_CharZero); 2560 2341 2561 result.add(@testStrEqualIgnoringCase_BothEmpty); 2342 2562 result.add(@testStrEqualIgnoringCase_FirstEmpty); … … 2352 2572 result.add(@testBoolToStr_true); 2353 2573 result.add(@testBoolToStr_false); 2574 2575 result.add(@testStrInSingleQuotes_Empty); 2576 result.add(@testStrInSingleQuotes); 2354 2577 2355 2578 result.add(@testStrInDoubleQuotes_Empty); … … 2381 2604 result.add(@testCaseInsensitivePos); 2382 2605 2606 result.add(@testLastPosOfChar_Empty); 2607 result.add(@testLastPosOfChar_NotFound); 2608 result.add(@testLastPosOfChar_OneCharNotFound); 2609 result.add(@testLastPosOfChar_OneCharFound); 2610 result.add(@testLastPosOfChar_OneCharWrongCase); 2611 result.add(@testLastPosOfChar_FirstChar); 2612 result.add(@testLastPosOfChar_LastChar); 2613 result.add(@testLastPosOfChar_MiddleChar); 2614 result.add(@testLastPosOfChar_ManyHits); 2615 2616 2383 2617 // -------------------- 2384 2618 // ---- AnsiString ----
Note:
See TracChangeset
for help on using the changeset viewer.