Форум: "Начинающим";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
Внизкласс TStringList Найти похожие ветки
← →
v_o_v_a (2006-09-08 14:54) [0]Здрасте. У класса TStringList есть метод Find. Можно както организовать поиск строки, если она извесна не полностью (предположим только начало или конец). Спасибо.
← →
Dmitrij_K (2006-09-08 15:05) [1]Методом Find - нет.
Можно самому перебирать все строки и сравнивать по условию или
масками Masks.pas
или регулярным выражением TRegExpr
← →
v_o_v_a (2006-09-08 15:12) [2]Жаль, что нельзя. спасибо
← →
Наиль © (2006-09-08 15:13) [3]Только для начала строки.
Но перед этим список должен быть отсортирован.
CaseSensitive определяет учитывать ли регистр.
Если Find=true значит полное совпадение. Если нет, то смотри второй параметр (Index) он указывает на позицию предшествующую наиболее подходящему слову.
← →
han_malign © (2006-09-08 15:20) [4]
> второй параметр (Index) он указывает на позицию предшествующую наиболее подходящему слову.Strings[Index - 1] < searchStr <= Strings[Index]
check (Index > 0) check (Index < Count)
← →
umbra © (2006-09-08 15:51) [5]вот, например, процедура, возвращающая в параметре
Indices
индексы элементов стринглиста, в которых есть подстрока. Длина этого массива равна количеству таких элементов. Процедура не ищет пустых строк, но это поправимо. Не тестировал, возможны опечатки :)type
TIntArray: array of Integer;
{....................................................}
procedure FindPattern(pattern: string; src: TStringList; out Indices: TIntArray);
var
matchpos, delimpos, counter: integer;
begin
delimpos := 0;
counter := 0;
matchpos := PosEx(pattern, src.Text);
if matchpos = 0 then exit;
repeat
SetLength(Indices, Length(Indices) + 1);
Indices[High(Indices)] := -1
repeat
Inc(Indices[High(Indices)]);
delimpos := PosEx(ItemDelimiter, src.Text, delimpos);
until delimpos >= matchpos;
matchpos := PosEx(pattern, src.Text, matchpos);
Until matchpos = 0;
end;
← →
umbra © (2006-09-08 16:23) [6]таки есть опечатки :)
type
TIntArray: array of Integer;
{....................................................}
procedure FindPattern(pattern: string; src: TStringList; out Indices: TIntArray);
var
matchpos, delimpos, counter: integer;
begin
delimpos := 0;
counter := 0;
matchpos := PosEx(pattern, src.Text);
if matchpos = 0 then exit;
repeat
SetLength(Indices, Length(Indices) + 1);
Indices[High(Indices)] := -1
repeat
Inc(Indices[High(Indices)]);
delimpos := PosEx(#13#10, src.Text, delimpos);
until delimpos >= matchpos;
matchpos := PosEx(pattern, src.Text, matchpos);
Until matchpos = 0;
end;
← →
umbra © (2006-09-08 16:46) [7]дубль третий :)
type
TIntArray: array of Integer;
{....................................................}
procedure FindPattern(pattern: string; src: TStringList; out Indices: TIntArray);
var
matchpos, delimpos, counter: integer;
begin
counter := 0;
matchpos := PosEx(pattern, src.Text);
if matchpos = 0 then exit;
repeat
SetLength(Indices, Length(Indices) + 1);
Indices[High(Indices)] := -1
repeat
delimpos := 0;
Inc(Indices[High(Indices)]);
delimpos := PosEx(#13#10, src.Text, delimpos + 2);
until delimpos >= matchpos;
matchpos := PosEx(pattern, src.Text, delimpos + 2);
Until matchpos = 0;
end;
← →
umbra © (2006-09-08 17:01) [8]эх, позориться, так позориться :)
это точно работает!TIntArray = array of Integer;
{...............................................}
procedure FindPattern(pattern: string; src: TStrings; out Indices: TIntArray);
var
matchpos, delimpos, counter: integer;
begin
counter := 0;
matchpos := PosEx(pattern, src.Text);
if matchpos = 0 then exit;
repeat
SetLength(Indices, Length(Indices) + 1);
Indices[High(Indices)] := -1;
delimpos := 0;
repeat
Inc(Indices[High(Indices)]);
delimpos := PosEx(#13#10, src.Text, delimpos + 2);
until delimpos >= matchpos;
matchpos := PosEx(pattern, src.Text, delimpos + 2);
Until matchpos = 0;
end;
← →
default © (2006-09-08 17:49) [9]umbra © (08.09.06 17:01) [8]
в код не вникал
но, вначале s := src.Text; сделать обязан:)
а то очень непроизводительно каждый раз Text запрашивать
← →
umbra © (2006-09-08 18:24) [10]да лучше в процедуру вообще строку (
src.Text
) передавать :), но надо ж это было к стринглисту привязять.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.013 c