![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Помогите пожалуйста, надо срочно сделать до конца выходных...
В программе, в мемо выводится текст вида: МДОУ №1 МДОУ №11 МДОУ №1 МДОУ №12 МДОУ №1 МДОУ №14 МДОУ №10 МДОУ №54 МДОУ №11 МДОУ №1 МДОУ №11 МДОУ №12 МДОУ №11 МДОУ №14 и т.д. мне надо чтоб небыло повторов одинаковых МДОУ (например чтоб было так - МДОУ №1 МДОУ №11 МДОУ №12 МДОУ №14 МДОУ №10 МДОУ №54 и т.д.) я знаю что это надо делать через функции Pos, Copy и Delete, но у меня не получается... - вот мой код если это необходимо. Код:
var n,ps,i,j:integer; s2,s1,s,cp1,cp2:string; begin n:=Memo2.Lines.Count; For i:=0 to n-1 do begin s:=Memo2.Lines[i]; cp1:=Copy(s,1,8); // копируем первые 8 символов s2:=''; for j:=0 to n-1 do begin s1:=Memo2.Lines[j]; cp2:=Copy(s1,1,8); if (cp2=cp1) and (j>i) then begin PS:=AnsiPos(cp1,s1); //ищем совпадение в строке If (PS<>0) and (s1<>s) then begin Delete(s1,ps,8); s2:=s2+' '+s1; end; end; end; Memo2.Lines[i]:=s+' '+s2; end; n:=Memo2.Lines.Count; //пересчёт количества строк for i:=0 to n-1 do begin s:=Memo2.Lines[i]; cp1:=Copy(s,1,8); for j:=0 to n-1 do begin s1:=Memo2.Lines[j]; cp2:=Copy(s1,1,8); PS:=AnsiPos(cp1,s1); if (j>i) and (cp1=cp2) then begin memo2.Lines.Delete(j); end; end; end; |
#2
|
||||
|
||||
![]() лучше использовать Pos(), а не AnsiPos() (если в среде string==WideString, то все функции "переведены" на unicodn'ые)
еще можно посмотреть в сторону TStrings.Duplicates Понять, что хочет заказчик - бесценно, ведь он платит MasterCard ![]() |
#3
|
|||
|
|||
![]() Цитата:
|
#4
|
||||
|
||||
![]() Код:
procedure TForm2.Button1Click(Sender: TObject); var tmpList:TStringList; i:integer; begin tmpList:=TStringList.Create; tmpList.Delimiter:=' '; tmpList.Sorted:=true; tmpList.Duplicates:=dupIgnore; tmpList.DelimitedText:=Memo1.Lines.Text; Memo1.Clear; for i:=0 to tmpList.Count - 2 do Memo1.Lines.Add(tmpList[tmpList.Count-1]+tmpList.Delimiter+tmpList[i]); tmpList.Free; end; З.Ы. свойство Lines в TMemo также имеет тип TStrings Понять, что хочет заказчик - бесценно, ведь он платит MasterCard ![]() Последний раз редактировалось cotseec, 08.06.2012 в 20:37. Причина: указал не тот тип |
#5
|
|||
|
|||
![]() Спасибо за разъяснение, но это не работает... мой вариант почти рабочий только вот незнаю как убрать повторяющиеся записи, в которых просто другой порядок учреждений( ну т.е. строка МДОУ1 МДОУ11 и строка МДОУ11 МДОУ1 идентичны одну из них надо убрать...)
|
#6
|
|||
|
|||
![]() Попробуй сделать цикл.
Код:
For i:=1 to 1000 do begin s:='МДОУ №'+IntToStr(i); n:=pos(Memo1.Text);// кажется, так ко всему тексту обращаться. if n<>o then s:=copy(Memo1.Text, n, Length(s)); //копируем строку Memo2.Lines.Add(s); end; |