Автор: V1s1ter
Дата сообщения: 22.04.2009 16:13
adli82
dr1v3
Ну раз такая пьянка, то вот думаю для парсера пригодится:
[more]
Код:
function DeleteBeginChars(S, Chars: String): String;
function DeleteEndChars(S, Chars: String): String;
function DeleteChars(S, Chars: String): String;
{ Удаляте из строки S первые/последние/все символы перечисленные в Chars }
function CompressChar(S: String; const C: Char): String;
{ Заменяет в строке S непрырывную последовательность символов C на один символ C }
function GetWordCount(S: String; Sep: Char): Integer;
{ возвращает количество частей строки S, разделенных Sep }
{ GetWordCount('aaa|bbbb ccc|ddd', '|') = 3 }
function GetWord(S: String; N: Integer; Sep: Char): string;
{ возвращает N-ную (начиная с нуля) часть строки S, разделенную Sep }
{ GetWord('aaa|bbbb ccc|ddd', 1, '|') = 'bbbb ccc'}
function DelWord(S: String; N: Integer; Sep: Char; IsDelSep: Boolean): string;
{ удаляет N-ную (начиная с нуля) часть строки S, разделенную Sep }
{ GetWord('aaa|bbbb ccc|ddd', 1, '|', False) = 'aaa||ddd'}
{ GetWord('aaa|bbbb ccc|ddd', 1, '|', True) = 'aaa|ddd'}
function GetPartStr(S: String; N: Integer; Sep: Char; IsBefore: Boolean): string;
{ возвращает часть строки S, разделенную N-ым (начиная с нуля) разделителем Sep }
{ если IsBefore = True, то возвращается та часть строки, что перед разделителем иначе та что после }
{ GetPartStr('aaa|bbbb ccc|ddd|eeeeee|ffff', 2, '|', True) = 'aaa|bbbb ccc|ddd'}
function DeleteBeginChars(S, Chars: String): String;
var
L: Integer;
begin
L := 1;
while (L <= Length(S)) and (Pos(S[L], Chars) > 0) do Inc(L);
if L <= Length(S) then Result := Copy(S, L, Length(S)-L+1)
else Result := '';
end;
function DeleteEndChars(S, Chars: String): String;
var
L: Integer;
begin
L := Length(S);
while (L > 0) and (Pos(S[L], Chars) > 0) do Dec(L);
Result := Copy(S, 1, L);
end;
function DeleteChar(S: String; C: Char): String;
var
i: Integer;
begin
Result := '';
for i := 1 to Length(S) do
if S[i] <> C then Result := Result+S[i];
end;
function DeleteChars(S, Chars: String): String;
var
i: Integer;
begin
Result := '';
for i := 1 to Length(S) do
if Pos(S[i], Chars) < 1 then Result := Result+S[i];
end;
function CompressChar(S: String; const C: Char): String;
var
i, L: Integer;
begin
Result := '';
L := Length(S);
if L > 0 then begin
for i := 1 to L-1 do begin
if S[i] <> C then Result := Result+S[i]
else if S[i+1] <> C then Result := Result+C;
end;
Result := Result+S[L]
end;
end;
function GetWordCount(S: String; Sep: Char): Integer;
var
i: integer;
begin
Result := 0;
for i := 1 to Length(S) do
if S[i] = Sep then Inc(Result);
if Length(S) > 0 then Inc(Result);
end;
function GetWord(S: String; N: Integer; Sep: Char): string;
var
L, PB, PE, NW: integer;
begin
L := Length(S);
if L <> 0 then begin
PB := 0;
PE := 0;
NW := 0;
if N > 0 then begin
Inc(NW);
PB := 1;
while PB <= L do begin
if (Sep = S[PB]) then begin
if NW = N then begin
PE := PB+1;
Break;
end
else Inc(NW);
end;
Inc(PB);
end;
end
else PE := 1;
if PE = PB+1 then begin
while (PE <= L) and (Sep <> S[PE]) do Inc(PE);
Result := Copy(S, PB+1, PE-PB-1);
end
else Result := '';
end
else Result := '';
end;
function DelWord(S: String; N: Integer; Sep: Char; IsDelSep: Boolean): string;
var
L, PB, PE, NW: integer;
begin
L := Length(S);
if L <> 0 then begin
PB := 0;
PE := 0;
NW := 0;
if N > 0 then begin
Inc(NW);
PB := 1;
while PB <= L do begin
if (Sep = S[PB]) then begin
if NW = N then begin
PE := PB+1;
Break;
end
else Inc(NW);
end;
Inc(PB);
end;
end
else PE := 1;
if PE = PB+1 then begin
while (PE <= L) and (Sep <> S[PE]) do Inc(PE);
if IsDelSep then begin
if (PB = 0) and (PE < L) then Inc(PE)
else Dec(PB);
end;
Result := Copy(S, 1, PB)+Copy(S, PE, L-PE+1);
end
else Result := S;
end
else Result := S;
end;
function GetPartStr(S: String; N: Integer; Sep: Char; IsBefore: Boolean): string;
var
L, i, j: integer;
begin
L := Length(S);
i := 0;
j := -1;
while (i < L) and (j <> N) do begin
Inc(i);
if Sep = S[i] then Inc(j);
end;
if j = N then begin
if IsBefore then Result := Copy(S, 1, i-1)
else Result := Copy(S, i+1, L-i);
end
else Result := '';
end;