Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
1-1172004366
timself
2007-02-20 23:46
2007.04.15
Как перехватить начало перезагрузки?


9-1147116507
except 3.0
2006-05-08 23:28
2007.04.15
Нарисовать клеточный массив.


2-1175132494
Wood
2007-03-29 05:41
2007.04.15
Позиция курсора в строке.


2-1174632081
jjdeluxe
2007-03-23 09:41
2007.04.15
Проблема с Indy - ошибка при повторном idTCPClient.ReadStream


15-1174288776
lowo
2007-03-19 10:19
2007.04.15
DWord овая дата





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский