Форум: "Основная";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
ВнизCompareMem? Найти похожие ветки
← →
Dema-X (2004-11-17 19:56) [0]Почему не отрабатывает как нужно ?
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 выдает что нет
← →
Anatoly Podgoretsky © (2004-11-17 20:10) [1]А как нужно, адреса переменных разные, должно давать не сравнение, а у тебя как.
← →
begin...end © (2004-11-17 20:11) [2]Ну и правильно, указатели s1 и s2 не равны.
← →
begin...end © (2004-11-17 20:13) [3]
> Dema-X (17.11.04 19:56)
Кстати, тебя тот факт, что SizeOf(s1) = 4, даже если s1 = "ABCDEFG", ни на какие мысли не наводит?
← →
wnew © (2004-11-17 20:25) [4]StrIComp
StrComp
StrLComp
StrLIComp
CompareStr
AnsiCompareStr
← →
Юрий Зотов © (2004-11-17 20:57) [5]> Dema-X
Длинная строка - это указатель. Вы сравниваете адреса, а не тела строк.
Res := CompareMem(@S1[1], @S2[1], Length(S1) - 1);
← →
Юрий Зотов © (2004-11-17 20:59) [6]Сорри, Length(S1), конечно. "Минус единица" - убрать.
← →
Defunct © (2004-11-17 21:38) [7]Res := S1 = S2;
← →
Dema-X (2004-11-18 18:53) [8]а при чем здесь s1 у меня стоит @s1 что есть указатель то есть поинтер а
> Юрий Зотов © (17.11.04 20:59) [6]
> Сорри, Length(S1), конечно. "Минус единица" - убрать.
это я так пробовал думал может есть какой знак в конце не нужный
← →
Dema-X (2004-11-18 19:07) [9]
> Юрий Зотов © (17.11.04 20:57) [5]
> Длинная строка - это указатель
Извиняюсь,не сразу просёк :)
← →
Dema-X (2004-11-18 19:08) [10]А кстати что будет быстрее работать сравнение тика if с1=с2 или эти функции&\?
← →
Anatoly Podgoretsky © (2004-11-18 19:21) [11]Dema-X (18.11.04 19:08) [10]
В общем случае c1=c2
← →
Dema-X (2004-11-19 10:42) [12]просто у меня стоит необходимость прогонки строки по массиву из более чем 1МЛН а сравнений типа = медленно а как можно по быстрому сравнивать
← →
Defunct © (2004-11-19 15:15) [13]Dema-X (19.11.04 10:42) [12]
что вы напишете =, что CompareMem все равно как минимум 1Млн байт придется сравнить. Как минимум 1 млн раз придется вызвать функцию сравнения. IMHO "=" быстрее всего.
← →
Palladin © (2004-11-19 15:26) [14]Чем вызвана эта необходимость прогонки?
← →
Dema-X (2004-11-20 12:24) [15]удалить из массива строк повтроряющиеся сообщения,в данном случае удалить одинаковые обьявления из всех обьявлений в газете или архиве газет за разные месяцы
← →
Palladin © (2004-11-20 12:46) [16]Сортировка и поиск, ключевые слова.
← →
Dema-X (2004-11-22 06:18) [17]Сортировка такого массива занимет не меньше места,сам подсчитай если размер файла около 100мегабайт
← →
Dema-X (2004-11-22 16:32) [18]
> Palladin © (20.11.04 12:46) [16]
> Сортировка и поиск, ключевые слова.
а как её осущесвить?
← →
Dema-X (2004-11-22 19:02) [19]
> Palladin © (20.11.04 12:46) [16]
> Сортировка и поиск, ключевые слова.
Сказал слово и замолк как рыба,что за отношение к людям ё-моё :(
← →
jack128 © (2004-11-22 23:01) [20]на алголисте, наверно, десяток алгоритмов сортировки описано...
← →
Palladin © (2004-11-22 23:29) [21]
> 17] Dema-X (22.11.04 06:18)
У меня под 2-4 милионна строк крутится и что?
Пример простой QuickSort есть в %Delphi%\Demos\Threads
Это первое. Второе: Лучше сразу сортировать на входе в массив, искать нужное для строки место.
> Сказал слово и замолк как рыба,что за отношение к людям
> ё-моё :(
Не борзей. Сам появился через два дня.
← →
Palladin © (2004-11-22 23:33) [22]Вообще говоря можешь не мучится, этот механизм уже реализован в TStringList. Читай справку на предмет TStringList.Sorted .
← →
Dema-X (2004-11-23 05:51) [23]
> Palladin © (22.11.04 23:33) [22]
> Вообще говоря можешь не мучится, этот механизм уже реализован
> в TStringList. Читай справку на предмет TStringList.Sorted
> .
Да хрен с с сортировкой я уже скажем быстрой сортировкой отсортировал,а как с поиском по ключевым словам быть,что за принцып такой?
← →
Palladin © (2004-11-23 09:46) [24]Я не знаю что ты имеешь в виду под "ключевое слово".
← →
VMcL © (2004-11-23 09:51) [25]>>Dema-X (23.11.04 05:51) [23]
TStringList.Find()
← →
Dema-X (2004-11-24 06:21) [26]
> 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 уже продуманы эти нюансы?
← →
Palladin © (2004-11-24 12:32) [27]
> [26] Dema-X (24.11.04 06:21)
Ключевые слова для поиска информации в интернете, чудик...
← →
Dema-X (2004-11-26 12:02) [28]что идей нет?
← →
Digitman © (2004-11-26 12:10) [29]
> или может в TStringList уже продуманы эти нюансы?
там уже все продумано - и сортировка, и быстрая вставка/удаление в отсортированном списке, и поиск/выбор по индексу, и быстрый поиск по значению ..
просто нет никакого видимого резона изобретать собственную реализацию, когда уже есть готовое, удовлетворяющее всем требованиям
← →
Dema-X (2004-11-27 14:27) [30]я же обьяснил в чем проблема,вы попробуйте мемо или ричем открыть файл мегов на 20
← →
VMcL © (2004-11-27 16:20) [31]>>Dema-X (27.11.04 14:27) [30]
Пробовал. Открывает.
← →
Dema-X (2004-11-27 19:32) [32]и сколько времени на это уходит? минут 5 да?а если строку или удалить или ксатити как в TStringList в середине добавить или удалить строку?
← →
VMcL © (2004-11-27 22:52) [33]>>Dema-X (27.11.04 19:32) [32]
А можно еще раз, только так, чтобы я понял?
WBR.
← →
Dema-X (2004-11-28 14:33) [34]
> VMcL © (27.11.04 22:52) [33]
> >>Dema-X (27.11.04 19:32) [32]
>
> А можно еще раз, только так, чтобы я понял?
загрузи значит тексовый файл размеров магабайт на 20-100 и попробуй его редактировать чтоб без тормозов было.Так ясно.
← →
Dema-X (2004-11-28 18:34) [35]вот у меня из 3х мегабайтного файла удаляет 1 строку ровно 3,5 секунды а файлы большы 10 вообще не отрывает меньше чем за 10 минут
← →
Dema-X (2004-11-29 16:52) [36]люди!
← →
VMcL © (2004-11-30 21:52) [37]>>Dema-X (28.11.04 14:33) [34]
Разницу между визуальными компонентами и классами Вы, я надеюсь, знаете. Тогда код:
Unit1.pasunit 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.dfmobject 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-12-01 18:05) [38]Выводы(что использовать невизуальные компоненты)? А к этим выводам я ещё 2 месяца назат пришёл только вот никто и этим помочь не может может вы подскажете как же мне в таком случае работать с мемо где мемо будет работать в качесве виртуального просмотрщика массива а так же редактировать его за разумное время
P.S.зря вы строкиprivate
{ Private declarations }
public
{ Public declarations }
end;
удалили без них нифига не работает :)
← →
VMcL © (2004-12-01 21:22) [39]>>Dema-X (01.12.04 18:05) [38]
>А к этим выводам я ещё 2 месяца назат пришёл только вот никто и этим помочь не может может вы подскажете как же мне в таком случае работать с мемо где мемо будет работать в качесве виртуального просмотрщика массива а так же редактировать его за разумное время
Судя по всему, придется писАть свой визуальный компонент (или найти готовый в Сети), который будет более грамотно работать с TStrings"ами, содержащими большое количество строк (стандартные VCL-компоненты Memo и RichEdit являются оболочками стандартных элементов управления Windows). У стандартного же TStringList"а скорость, вроде, вполне приемлимая.
← →
Dema-X (2004-12-05 07:33) [40]не обязательно свой компонент нужно хотя бы поместить строку типа Application.processmessages в загрузчик мемо грузить будет дольше но зато создастся ощущуние что работает быстро это как в ворде,он же по частям открывает :)
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.04 c