1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
unit Utils;
{ Fonctions extraites du programme H2Pas de Peter Sawatzki.
http://www.sawatzki.de/download.htm
}
interface
function WordCount(aStr, Delims: pChar): integer;
function WordPosition(aStr, Delims: pChar; No: integer): pChar;
function ExtractWord(aDst, aStr, Delims: pChar; No: integer): pChar;
function Trim(aDst, aSrc: pChar): pChar;
function Pad(aDst, aSrc: pChar; Count: integer): pChar;
function StrIPos(Str1, Str2: pChar): pChar;
implementation
uses
Strings;
function WordCount(aStr, Delims: pChar): integer;
var
EndStr: pChar;
begin
EndStr := StrEnd(aStr);
result := 0;
while aStr <= EndStr do
begin
while (aStr <= EndStr) and (StrScan(Delims, aStr[0]) <> nil) do
Inc(aStr);
if aStr <= EndStr then
Inc(result);
while (aStr <= EndStr) and (StrScan(Delims, aStr[0]) = nil) do
Inc(aStr);
end;
end;
function WordPosition(aStr, Delims: pChar; No: integer): pChar;
var
Count: integer;
EndStr: pChar;
begin
EndStr := StrEnd(aStr);
Count:= 0;
result := nil;
while (aStr <= EndStr) and (Count <> No) do
begin
while (aStr <= EndStr) and (StrScan(Delims, aStr[0]) <> nil) do
Inc(aStr);
if aStr <= EndStr then
Inc(Count);
if Count <> No then
while (aStr <= EndStr) and (StrScan(Delims, aStr[0]) = nil) do
Inc(aStr)
else
result := aStr
end;
end;
function ExtractWord(aDst, aStr, Delims: pChar; No: integer): pChar;
var
EndStr: pChar;
begin
result := aDst;
aStr := WordPosition(aStr, Delims, No);
if Assigned(aStr) then
begin
EndStr := StrEnd(aStr);
while (aStr <= EndStr) and (StrScan(Delims, aStr[0]) = nil) do
begin
aDst[0] := aStr[0];
Inc(aStr);
Inc(aDst)
end
end;
aDst[0] := #0
end;
function Trim(aDst, aSrc: pChar): pChar;
var
EndStr: pChar;
begin
result := aDst;
if not Assigned(aSrc) or (aSrc[0] = #0) then
aDst[0] := #0
else
begin
EndStr := StrEnd(aSrc);
while (aSrc < EndStr) and (aSrc[0] <= ' ') do
Inc(aSrc);
StrCopy(aDst, aSrc);
EndStr := StrEnd(aDst);
while (EndStr > aDst) and (EndStr[0] <= ' ') do
begin
EndStr[0] := #0;
Dec(EndStr)
end
end
end;
function Pad(aDst, aSrc: pChar; Count: integer): pChar;
begin
result := aDst;
if aDst <> aSrc then
StrCopy(aDst, aSrc);
Count := Count - StrLen(aDst);
aDst := StrEnd(aDst);
while Count > 0 do
begin
aDst[0] := ' ';
Inc(aDst);
Dec(Count)
end;
aDst[0] := #0
end;
function StrIPos(Str1, Str2: pChar): pChar;
var
EndStr: pChar;
Len: integer;
begin
result := nil;
EndStr := StrEnd(Str1);
Len:= StrLen(Str2);
repeat
Str1 := StrScan(Str1, Str2[0]);
if Str1 = nil then
exit;
if StrLIComp(Str1, Str2, Len) = 0 then
begin
result := Str1;
exit;
end;
Inc(Str1)
until Str1 > EndStr;
end;
end. |
Partager