Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

CompareMem?


Страницы:   1 2 3

Dema-X ©   (2004-11-17 19:56:00) 

Почему не отрабатывает как нужно ?
procedure TForm1.Button1Click(Sender: TObject);
var
s1,s2:string;
res:Boolean;
ss1:Integer;
begin
Edit1.Text:='ABCD' ;
Edit2.Text:='ABCD';
s1:=Edit1.Text;
s2:=Edit2.Text;
res:=CompareMem(@s1,@s2,length(s1)-1);
if res then ShowMessage('OK') else ShowMessage('Cancel')
end;
текст одинаковый а CompareMem выдает что нет


Piter   (2004-12-05 17:45:00) [1]

Ну ты и борзой Dema-X. Удивительно, что тебе еще кто-то помогает...


Dema-X   (2004-12-05 07:33:00) [2]

не обязательно свой компонент нужно хотя бы поместить строку типа Application.processmessages в загрузчик мемо грузить будет дольше но зато создастся ощущуние что работает быстро это как в ворде,он же по частям открывает :)


VMcL   (2004-12-01 21:22:00) [3]

>> Dema-X  (01.12.04 18:05) [38]

> А к этим выводам я ещё 2 месяца назат пришёл только вот никто и этим помочь не может может вы подскажете как же мне в таком случае работать с мемо где мемо будет работать в качесве виртуального просмотрщика массива а так же редактировать его за разумное время

Судя по всему, придется писАть свой визуальный компонент (или найти готовый в Сети), который будет более грамотно работать с TStrings'ами, содержащими большое количество строк (стандартные VCL-компоненты Memo и RichEdit являются оболочками стандартных элементов управления Windows). У стандартного же TStringList'а скорость, вроде, вполне приемлимая.


Dema-X   (2004-12-01 18:05:00) [4]

Выводы(что использовать невизуальные компоненты)? А к этим выводам я ещё 2 месяца назат пришёл только вот никто и этим помочь не может может вы подскажете как же мне в таком случае работать с мемо где мемо будет работать в качесве виртуального просмотрщика массива а так же редактировать его за разумное время
P.S.зря вы строки  private
   { Private declarations }
 public
   { Public declarations }
 end;

удалили без них нифига не работает :)


VMcL   (2004-11-30 21:52:00) [5]

>> Dema-X  (28.11.04 14:33) [34]

Разницу между визуальными компонентами и классами Вы, я надеюсь, знаете. Тогда код:

Unit1.pas

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls;

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   RichEdit1: TRichEdit;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
 FN = 'T:\MP\ufMain.pas';
var
 SL: TStrings;
 t: DWORD;
begin
 Memo1.Clear;
 SL := TStringList.Create;
 try
   t := GetTickCount;
   SL.LoadFromFile(FN);
   t := GetTickCount - t;
   Memo1.Lines.Add(Format('[TStringList] Loading: %u msec', [t]));
   Memo1.Update;

   t := GetTickCount;
   SL.Delete(0);
   t := GetTickCount - t;
   Memo1.Lines.Add(Format('[TStringList] Deleting first line: %u msec', [t]));
   Memo1.Update;

   t := GetTickCount;
   RichEdit1.Lines.BeginUpdate;
   try
     RichEdit1.Lines.LoadFromFile(FN);
   finally
     RichEdit1.Lines.EndUpdate;
   end;
   t := GetTickCount - t;
   Memo1.Lines.Add(Format('[TRichEdit] Loading: %u msec', [t]));
   Memo1.Update;

   t := GetTickCount;
   RichEdit1.Lines.Delete(0);
   t := GetTickCount - t;
   Memo1.Lines.Add(Format('[TRichEdit] Deleting first line: %u msec', [t]));
   Memo1.Update;
 finally
   FreeAndNil(SL);
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Memo1.Clear;
 RichEdit1.Clear;
end;

end.


Unit1.dfm

object Form1: TForm1
 Left = 31
 Top = 108
 Width = 696
 Height = 478
 Caption = 'Form1'
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = 'MS Sans Serif'
 Font.Style = []
 OldCreateOrder = False
 OnCreate = FormCreate
 PixelsPerInch = 96
 TextHeight = 13
 object Memo1: TMemo
   Left = 5
   Top = 5
   Width = 676
   Height = 131
   Color = clBtnFace
   Lines.Strings = (
     'Memo1')
   ReadOnly = True
   ScrollBars = ssBoth
   TabOrder = 0
 end
 object RichEdit1: TRichEdit
   Left = 5
   Top = 145
   Width = 676
   Height = 256
   Lines.Strings = (
     'RichEdit1')
   ScrollBars = ssBoth
   TabOrder = 1
 end
 object Button1: TButton
   Left = 5
   Top = 410
   Width = 75
   Height = 25
   Caption = 'Button1'
   TabOrder = 2
   OnClick = Button1Click
 end
end


Тестовый файл (T:\MP\ufMain.pas): 76 025 492 байт, 3 009 335 строк. CPU: AthlonXP @ 1533 MHz; RAM: 512 MB DDR; HDD: 7200 rpm.

Результаты, полученные в Memo1:
[TStringList] Loading: 8332 msec
[TStringList] Deleting first line: 70 msec
[TRichEdit] Loading: 48280 msec
[TRichEdit] Deleting first line: 480 msec

Выводы писать?


Dema-X   (2004-11-29 16:52:00) [6]

люди!


Dema-X   (2004-11-28 18:34:00) [7]

вот у меня из 3х мегабайтного файла удаляет 1 строку ровно 3,5 секунды а файлы большы 10 вообще не отрывает меньше чем за 10 минут


Dema-X   (2004-11-28 14:33:00) [8]


> VMcL ©   (27.11.04 22:52) [33]
> >>Dema-X  (27.11.04 19:32) [32]
>
> А можно еще раз, только так, чтобы я понял?

загрузи значит тексовый файл размеров магабайт на 20-100 и попробуй его редактировать чтоб без тормозов было.Так ясно.


VMcL   (2004-11-27 22:52:00) [9]

>> Dema-X  (27.11.04 19:32) [32]

А можно еще раз, только так, чтобы я понял?

WBR.


Dema-X   (2004-11-27 19:32:00) [10]

и сколько времени на это уходит? минут 5 да?а если строку или удалить или ксатити как в TStringList в середине добавить или удалить строку?


VMcL   (2004-11-27 16:20:00) [11]

>> Dema-X  (27.11.04 14:27) [30]

Пробовал. Открывает.


Dema-X   (2004-11-27 14:27:00) [12]

я же обьяснил в чем проблема,вы попробуйте мемо или ричем открыть файл мегов на 20


Digitman   (2004-11-26 12:10:00) [13]


> или может в TStringList уже продуманы эти нюансы?


там уже все продумано - и сортировка, и быстрая вставка/удаление в отсортированном списке, и поиск/выбор по индексу, и быстрый поиск по значению ..

просто нет никакого видимого резона изобретать собственную реализацию, когда уже есть готовое, удовлетворяющее всем требованиям


Dema-X   (2004-11-26 12:02:00) [14]

что идей нет?


Palladin   (2004-11-24 12:32:00) [15]


> [26] Dema-X   (24.11.04 06:21)

Ключевые слова для поиска информации в интернете, чудик...


Dema-X   (2004-11-24 06:21:00) [16]


> Palladin ©   (23.11.04 09:46) [24]
> Я не знаю что ты имеешь в виду под "ключевое слово".

сам писал
> Palladin ©   (20.11.04 12:46) [16]
> Сортировка и поиск, ключевые слова.

а теперь не понимаешь?.


> VMcL ©   (23.11.04 09:51) [25]
> >>Dema-X  (23.11.04 05:51) [23]
>
> TStringList.Find()

всё дело в том что у меня тип array(0..20000000)of string;
где адресация происходит через массив array(0..20000000)of integer;
потому что как можно к примеру удалить 1 элемент или средний надо чтобы все сдвинулись вверх на одну строку а это очень долго со строками гораздо быстрее переправить индексы,или может в TStringList уже продуманы эти нюансы?


VMcL   (2004-11-23 09:51:00) [17]

>> Dema-X  (23.11.04 05:51) [23]

TStringList.Find()


Palladin   (2004-11-23 09:46:00) [18]

Я не знаю что ты имеешь в виду под "ключевое слово".


Dema-X   (2004-11-23 05:51:00) [19]


> Palladin ©   (22.11.04 23:33) [22]
> Вообще говоря можешь не мучится, этот механизм уже реализован
> в TStringList. Читай справку на предмет TStringList.Sorted
> .

Да хрен с с сортировкой я уже скажем быстрой сортировкой отсортировал,а как с поиском по ключевым словам быть,что за принцып такой?


Palladin   (2004-11-22 23:33:00) [20]

Вообще говоря можешь не мучится, этот механизм уже реализован в TStringList. Читай справку на предмет TStringList.Sorted .


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо