Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2019, 16:05   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Зацени что быстрей с конечнsм результатом в стринглист. Copy выграёт)
Код:
procedure TForm1.Button1Click(Sender: TObject);
const Count = 10000000;
      Len = 10;
      Line = #13#10;
var s1,s2: String;
    List: TStringList;
    i,j,i1,k1: Integer;
begin
  s1:=StringOfChar('D',Count);

  //здесь пресловутый copy и add в стрингист
  List:=TStringList.Create;
  k1:=GetTickCount;
  for i:=1 to Count div Len do List.Add(Copy(s1,(i-1)*Len+1,Len));
  Edit1.Text:=IntToStr(GetTickCount-k1);
  List.Free;

  //здесь побайтная пересылка в буфер и затем целиком в стринглист
  List:=TStringList.Create;
  SetLength(s2,Count+(Count div Len)*2);
  j:=0; i1:=1;
  k1:=GetTickCount;
  for i:=1 to Count do begin
    s2[i1]:=s1[i];
    Inc(j);
    Inc(i1);
    if j=Len then begin s2[i1]:=#13; Inc(i1); s2[i1]:=#10; Inc(i1); j:=0; end;
  end;
  List.Text:=s2;
  Edit2.Text:=IntToStr(GetTickCount-k1);
  List.Free;

  //здесь move в буфер и затем целиком в стринглист
  List:=TStringList.Create;
  SetLength(s2,Count+(Count div Len)*2);
  i1:=1;
  k1:=GetTickCount;
  for i:=1 to Count div Len do begin
    Move(s1[(i-1)*Len+1],s2[i1],Len);
    Inc(i1,Len);
    Move(Line[1],s2[i1],2);
    Inc(i1,2);
  end;
  List.Text:=s2;
  Edit3.Text:=IntToStr(GetTickCount-k1);
  List.Free;

end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.04.2019, 16:29   #12
leoparrd
Заблокирован
 
Регистрация: 27.08.2010
Сообщений: 37
По умолчанию

Что это было? Что вообще за бред?
leoparrd вне форума Ответить с цитированием
Старый 07.04.2019, 16:37   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Не признанный гений?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.04.2019, 17:09   #14
leoparrd
Заблокирован
 
Регистрация: 27.08.2010
Сообщений: 37
По умолчанию

Вот функция. Сомневаюсь чтоб она была медленнее Copy

Код:
function DivString(st:string):string;
var
tmp_:string;
i1,i2,ln:DWORD;
work: Boolean;

begin
  i1:= 0;
  i2:= 0;
  ln:= Length(st);
  work:= True;
  tmp_:= '';
  while work do
  begin

    i1:= i1+1;
    i2:= i2+1;
    tmp_:= tmp_ + st[i1];

    if i1 = ln then
    begin
    work:= False;
    Continue;
    end;
    if i2 = 10 then
    begin
      i2:= 0;
      tmp_:= tmp_ + Chr($D) + Chr($A);
    end;
  end;
  Result:= tmp_;


end;
Хоть к чёрту её совай
Код:
s:= '01234567890123456789012345';
Memo1.Text:= DivString(s);
leoparrd вне форума Ответить с цитированием
Старый 07.04.2019, 17:11   #15
leoparrd
Заблокирован
 
Регистрация: 27.08.2010
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Не признанный гений?
По сравнению с тобой - да, многоуважаемый павлин в лампасах.
leoparrd вне форума Ответить с цитированием
Старый 07.04.2019, 18:01   #16
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Нужно не сомневаться, а проверить. Я не поленился, проверил, твоя функция как минимум в десять раз медленней чем любой способов из бреда в #11. B ней в цикле туча выделений памяти по текстовые строки. А за павлина в лампасах что имеешь, то имеешь )
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 07.04.2019 в 18:03.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести byte в текстовую строку бинарными данными Krasi Помощь студентам 1 08.10.2015 15:42
Перевод числа в текстовую строку, исправить код (FASM) Tanchik0611 Помощь студентам 2 21.10.2012 16:29
как сформировать текстовую строку? Volodymyr Microsoft Office Access 6 31.07.2011 12:49
excel разделить текстовую строку в ячейке на несколько ячеек!!! Bandikoot Microsoft Office Excel 2 27.04.2011 15:05