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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2024, 16:29   #1
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 263
По умолчанию сохранение строковых данных

Добрый день.

есть следующая ситуация:
1) список строк1 (TStringList), число строк от 1000 до 2000000, формат строки 665:687686:12334456(это пример), где : разделитель
2) список строк2 (TStringList), число строк от 0 до 255, формат строки 12334456(это пример)
3) цикл FOR список1, где отделяется третий параметр (12334456), внутри цикл FOR где выводится строка, если строки в циклах совпадают, тогда строка1 (665:687686:12334456) перезаписывается в хранилище строк с именем третьего параметра (12334456)
таким образом может возникнуть до 256 хранилищ с числом строк от 1000 до 140000 строк в каждом.
в общем это раздел одного большого массива строк на некоторое количество массивом по заданному параметру (список строк2)

вопрос: на основе чего можно сделать такое хранилище строк? TListBox? динамический многомерный массив? что то еще? надо учесть быстродействие, по максимуму необходимо

Заранее спасибо за ответы
Pcrepair вне форума Ответить с цитированием
Старый 22.09.2024, 16:55   #2
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,844
По умолчанию

Цитата:
Сообщение от Pcrepair Посмотреть сообщение
что то еще? надо учесть быстродействие, по максимуму необходимо
Для третьего списка строк:
Код:
begin
  StringList3.Capacity := StringList1.Capacity; // берем ёмкость первого списка
end;
Этого должно оказаться достаточно.

И, да, нет смысла городить динамические массивы, когда есть специализированный класс для хранения строк, нужно лишь уметь им пользоваться.
В разработке: воспроизводственный контур ИТ
Vapaamies вне форума Ответить с цитированием
Старый 22.09.2024, 17:35   #3
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 263
По умолчанию

StringList3.Capacity ???

там вообще может быть сотни новых StringList(для каждого параметра сортировки свой) причем сколько именно заранее неизвестно. хотя... можно конечно и все 256 создать заранее, но это как то не так
Код:
procedure TMain.Button1Click(Sender: TObject);
var
  hWin: Cardinal;
  BitMap, btmCtrl: TBitMap;
  LstHWColor, LstCls: TStringList;
  tmp: DWord;
  ClsLst, ColorData, TmpStr, pxColorData: string;
  I, J, H, W, Pos1, Pos2, hPic, wPic, Cnt: integer;
  Red, Green, Blue: Byte;
  Clr: TColor;
begin
  LstCls := TStringList.Create;
  LstHWColor := TStringList.Create;

  LstHWColor.Text := Memo1.Text; // список строк1
  LstCls.Text := Memo2.Text; // список строк2

  for I := 0 to LstHWColor - 1 do
  begin
    pxColorData := (LstHWColor[I]);
    ColorData := выделение(pxColorData);

    for J := 0 to LstCls.Count - 1 do
    begin

      if (ColorData = LstCls[J]) then
      begin
        // вот тут надо сохранить массивы строк с именем LstCls[J]
      end;

    end;

  end;

end;

Последний раз редактировалось Pcrepair; 22.09.2024 в 17:47.
Pcrepair вне форума Ответить с цитированием
Старый 22.09.2024, 19:36   #4
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,844
По умолчанию

Цитата:
Сообщение от Pcrepair Посмотреть сообщение
StringList3.Capacity ???
Как-то криво прочитал первое сообщение, часть упустил.

Цитата:
Сообщение от Pcrepair Посмотреть сообщение
там вообще может быть сотни новых StringList(для каждого параметра сортировки свой) причем сколько именно заранее неизвестно. хотя... можно конечно и все 256 создать заранее, но это как то не так
На самом деле «так» или «не так» зависит от конкретных условий. Например, будут ли эти списки передаваться наружу или жить лишь в рамках одной процедуры?

В модуле Cntrs есть TObjectList для ответственного хранения списков объектов, в современных версиях Delphi есть какие-то более продвинутые классы через обобщения. Но в рамках одной процедуры можно не морочиться и описать простой массив, даже не динамический, а распределение и освобождение списков выполнять вручную.

А индексы фиксированны же? То есть, может быть цвет 1, 10 и 100, а промежуточные пусты? Тогда точно обычный массив. Брать элемент, проверять, не nil ли, создавать, если nil, после чего использовать. Если полученную цветомузыку нужно передавать наружу — можно даже свой класс замутить, ибо фиксированные индексы — особый случай.
В разработке: воспроизводственный контур ИТ
Vapaamies вне форума Ответить с цитированием
Старый 23.09.2024, 07:18   #5
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 263
По умолчанию

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
будут ли эти списки передаваться наружу или жить лишь в рамках одной процедуры
дальше обработка в той же процедуре, но потом вывод отфильтрованных данных гПерем, для дальнейшего использования

понятно что есть TObjectList, TList, даже record, TStack, TCollection и... что то еще. но нужно пробовать, проверять. вопрос был к тем кто уже. основной вопрос - быстродействие
Pcrepair вне форума Ответить с цитированием
Старый 23.09.2024, 09:22   #6
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,844
По умолчанию

Цитата:
Сообщение от Pcrepair Посмотреть сообщение
основной вопрос - быстродействие
Быстродействие чего? Про установку Capacity я уже сказал. По умолчанию там совсем маленькое значение — 8 то ли 16, при превышении увеличивается в 2 раза. Если для результирующих списков выставить сразу LstHWColor.Count div 255 — должна быть явная экономия на перераспределениях с копированием, особенно на начальном росте. Минус — повышенный расход памяти (хотя и не такой повышенный — при сегодняшних объемах-то; там тупо значение, умноженное на 4 байта указателя), если списки каких-то значений окажутся короткими.

Цитата:
Сообщение от Pcrepair Посмотреть сообщение
TObjectList, TList, даже record, TStack, TCollection
Быстродействие у них плюс-минус должно быть одинаковое, а TCollection не подходит, он не для этого.
В разработке: воспроизводственный контур ИТ
Vapaamies вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка строковых данных Антон1111 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 22.03.2012 15:07
обработка строковых данных (на C) zZzzZzzzzzzzzz Помощь студентам 3 08.02.2012 15:21
обработка строковых данных chainik1 Помощь студентам 0 12.12.2010 11:42
Обработка строковых данных locdoc Паскаль, Turbo Pascal, PascalABC.NET 2 06.12.2010 17:28
Обработка строковых данных >>arty<< Помощь студентам 4 15.01.2010 23:07