Форум: "Начинающим";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];
Вниз
поиск слов Найти похожие ветки
← →
Сорокин М (2007-03-25 19:22) [0]в memo текст:
N1[3]
N1[5]
N2[8]
N1[5]
N2[8]
прошу помочь с реализацией поиска одинаковых строк
и записи в другое memo: скажем N1[5]=2 (2 одинаковых строки),
N2[8]=2, N1[3]=1
Благодарю за внимание и надеюсь на помощь
← →
Джо © (2007-03-25 19:26) [1]> прошу помочь с реализацией поиска одинаковых строк
А в чем конкретно проблема?
← →
Сорокин М (2007-03-25 19:28) [2]не знаю с чего начать реализацию,никада не занимался парсингом текста
← →
Johnmen © (2007-03-25 19:35) [3]Начни с теории. Что такое строка, что такое символ, как сравниваются строки и символы...
Реализацией занимаются обычно после освоения теории.
← →
RASkov (2007-03-26 01:13) [4]Поищи по форуму "Подсчет дупликатов" или "удаление дупликатов" или что-то в этом духе... недавно было.. правда там вроде с листбоксами ну это ничего не меняет. те-же Итемы.
← →
default © (2007-03-26 01:26) [5]мне не на чем попробовать, но интересно вот что: если я добавляю в сортируемый TStringList с dupIgnore строку уже содержащуюся в списке методом Add, он возвратит индекс добавляемой строки в списке или вернет навроде -1?
в справке про это нет
Adds a new string to the list.
function Add(const S: string): Integer; override;
Description
Call Add to add the string S to the list. If the list is sorted, S is added to the appropriate position in the sort order. If the list is not sorted, S is added to the end of the list. Add returns the position of the item in the list, where the first item in the list has a value of 0.
Note: For sorted lists, Add will raise an EListError exception if the string S already appears in the list and Duplicates is set to dupError. If Duplicates is set to dupIgnore, trying to add a duplicate string to a sorted list does nothing.
(справка работает, а делфи слетела что-то)
← →
default © (2007-03-26 01:34) [6]Add returns the position of the item in the list, where the first item in the list has a value of 0.
хотя вроде как и написано, неявно правда
вообщем есть сомнения всё равно ибо явно не указано
← →
Германн © (2007-03-26 01:37) [7]
> default © (26.03.07 01:26) [5]
>
> мне не на чем попробовать, но интересно вот что: если я
> добавляю в сортируемый TStringList с dupIgnore строку уже
> содержащуюся в списке методом Add, он возвратит индекс добавляемой
> строки в списке или вернет навроде -1?
> в справке про это нет
Ответ в исходниках (Д6):function TStringList.Add(const S: string): Integer;
begin
Result := AddObject(S, nil);
end;
function TStringList.AddObject(const S: string; AObject: TObject): Integer;
begin
if not Sorted then
Result := FCount
else
if Find(S, Result) then
case Duplicates of
dupIgnore: Exit;
dupError: Error(@SDuplicateString, 0);
end;
InsertItem(Result, S, AObject);
end;
А затем в хэлп:
Locates the index for a string in a sorted list and indicates whether a string with that value already exists in the list.
function Find(const S: string; var Index: Integer): Boolean; virtual;
Но можно и в исходники залезть:function TStringList.Find(const S: string; var Index: Integer): Boolean;
var
L, H, I, C: Integer;
begin
Result := False;
L := 0;
H := FCount - 1;
while L <= H do
begin
I := (L + H) shr 1;
C := CompareStrings(FList^[I].FString, S);
if C < 0 then L := I + 1 else
begin
H := I - 1;
if C = 0 then
begin
Result := True;
if Duplicates <> dupAccept then L := I;
end;
end;
end;
Index := L;
end;
← →
default © (2007-03-26 01:50) [8]Германн © (26.03.07 01:37) [7]
возвращает по делу:)
тогда сабж можно решить соответствующим образом среди прочих решений(обычно сортируют сначала, потом пробегаются для получения строк и их числа повторений)
здесь можно слегка по-другому
ну понятно уже как...
добавляем строку, смотрим увеличилась-ли длина списка и если нет, то по индексу полученному от Add увеличиваем счётчик строк(например, в связанном со строкой объекте)
вообщем вариант ещё один
← →
bagos (2007-03-26 10:54) [9]посидел подумал,и сделал)
var
s1,s2 : TStringlist;
i , index,count: Integer;
k,l:integer;
begin
s1:=tstringlist.Create;
s2:=tstringlist.Create;
for i := 0 to Memo2.Lines.Count -1 do
begin
index := s1.IndexOf(Memo2.Lines[i]) ;
if index = -1 then
begin
s1.Add(Memo2.Lines[i]);
s2.Add("1");
end
else
begin
count := StrToInt(s2.Strings[index]);
Inc(count);
s2.Strings[index] := IntToStr(count);
end;
← →
Сорокин М (2007-03-26 12:33) [10]спс за ответы,помогли.
след. кодом добавляю в грёд данные,но строка
stringgrid3.Cells[index,index2]:=stringgrid3.Cells[index,index2]+";"+memo2.Lines.Strings[i];
оказалась проблемной,добавляет саму себя много раз,помогите понять в чем дело
var
xz1,xz2:integer;
xv1,xv2:integer;
k,i,j:integer;
index,index2:integer;
begin
for i:=0 to memo2.Lines.Count -1 do begin
xz1:=posex("L",memo2.Lines.Strings[i])+1;
xz2:=posex("[",memo2.Lines.Strings[i])-2;
index:=strtoint(copy(memo2.Lines.Strings[i],xz1,xz2));
xv1:=posex("[",memo2.Lines.Strings[i])+1;
xv2:=posex("]",memo2.Lines.Strings[i]);
index2:=strtoint(copy(memo2.Lines.Strings[i],xv1,xv2-xv1))-1;
if stringgrid3.Cells[index,index2]="" then
stringgrid3.Cells[index,index2]:=memo2.Lines.Strings[i]
else
stringgrid3.Cells[index,index2]:=stringgrid3.Cells[index,index2]+";"+memo2.Lines.Strings[i];
end;
← →
Сорокин М (2007-03-26 12:52) [11]хы,все здесь правильно,я прост один ньюан не учел сорри
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c