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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2015, 15:29   #1
sera.kerch
Пользователь
 
Регистрация: 09.04.2015
Сообщений: 24
По умолчанию Подскажите как создать ссылку на структуру из record-ов

Доброго времени суток
есть структура

Код:
  Tdp=record
    dp:integer;
    size:integer;
  end;
  Tdip=record
    dip:integer;
    dp:array of Tdp;
  end;
  Tsp=record
    sp:integer;
    dip:array of Tdip;
  end;
  Tsip=record
    sip:integer;
    sp:array of Tsp;
  end;
  Tp=record
    p:integer;
    sip:array of Tsip;
  end;

var
 paket:array of Tp;
при конечном обращении получается в процедуре


Код:
 
var
  i,k,p,sip,sp,dip:integer;
begin
/ proto
 f:=false;
 k:=high(paket);
 for i:=0 to k do
  if proto=paket[i].p then begin
   p:=i;
   f:=true;
   break;
  end;
 if not f then begin
   k:=k+1;
   SetLength(paket,k+1);
   paket[k].p:=proto;
   p:=k;
 end;
// sourceIP
 f:=false;
 k:=high(paket[p].sip);
 for i:=0 to k do
  if sourceIP=paket[p].sip[i].sip then begin
   sip:=i;
   f:=true;
   break;
  end;
 if not f then begin
   k:=k+1;
   SetLength(paket[p].sip,k+1);
   paket[p].sip[k].sip:=sourceIP;
   sip:=k;
 end;
// SourcePort
 f:=false;
 k:=high(paket[p].sip[sip].sp);
 for i:=0 to k do
  if SourcePort=paket[p].sip[sip].sp[i].sp then begin
   sp:=i;
   f:=true;
   break;
  end;
 if not f then begin
   k:=k+1;
   SetLength(paket[p].sip[sip].sp,k+1);
   paket[p].sip[sip].sp[k].sp:=SourcePort;
   sp:=k;
 end;
// destIP
 f:=false;
 k:=high(paket[p].sip[sip].sp[sp].dip);
 for i:=0 to k do
  if destIP=paket[p].sip[sip].sp[sp].dip[i].dip then begin
   dip:=i;
   f:=true;
   break;
  end;
 if not f then begin
   k:=k+1;
   SetLength(paket[p].sip[sip].sp[sp].dip,k+1);
   paket[p].sip[sip].sp[sp].dip[k].dip:=destIP;
   dip:=k;
 end;
// DestPort
 f:=false;
 k:=high(paket[p].sip[sip].sp[sp].dip[dip].dp);
 for i:=0 to k do
  if DestPort=paket[p].sip[sip].sp[sp].dip[dip].dp[i].dp then begin
   paket[p].sip[sip].sp[sp].dip[dip].dp[i].size:=paket[p].sip[sip].sp[sp].dip[dip].dp[i].size+data_size;
   f:=true;
   break;
  end;
 if not f then begin
   k:=k+1;
   SetLength(paket[p].sip[sip].sp[sp].dip[dip].dp,k+1);
   paket[p].sip[sip].sp[sp].dip[dip].dp[k].dp :=DestPort;
   paket[p].sip[sip].sp[sp].dip[dip].dp[k].size :=data_size;
 end;
как сделать чтобы было как то так:

Код:
p:=paket[p].sip[sip].sp[sp].dip[dip];

k:=high(p.dp);
SetLength(p.dp,k+1);
p.dp[k].dp :=DestPort;
p.dp[k].size :=DataSize;
или как можно оптимизировать запись трафика с суммированием

Заранее спасибо.

Последний раз редактировалось sera.kerch; 15.05.2015 в 15:48.
sera.kerch вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать уникальную копию record, содержащую вложенные динамические массивы? Dmitro25 Общие вопросы Delphi 2 08.10.2014 09:47
как создать ссылку(внешний ключ) silwerhof SQL, базы данных 4 06.10.2012 22:59
Как создать динамическую структуру в составе которой есть динамическая структура Vladin Общие вопросы C/C++ 5 26.07.2011 14:08
Как создать ссылку в редакторе Джек Бентон HTML и CSS 1 14.11.2010 16:58
Дайте ссылку или объясните как создать html help Волк Общие вопросы Delphi 4 07.02.2009 10:04