![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
CompareMem?
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 .