Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.25;
Скачать: CL | DM;

Вниз

Вопрос о временный таблицах   Найти похожие ветки 

 
Сергей М. ©   (2006-05-18 12:04) [40]


> всё это происходит во время работы  обработки


Что подразумевается под "обработкой" ?
Иллюстрируй в коде ..


 
Officeman   (2006-05-18 12:05) [41]

>В чем же проблема ?

не знаю как задать другое имя для временной таблички. (.
если не трудно (я всех достал, я знаю), приведи пример который ты уже приводил. но на 2 temp табличке.


 
Сергей М. ©   (2006-05-18 12:14) [42]

А что ты под "именем таблички" подразумеваешь ?
В моем примере у таблиц нет имен ..


 
ЮЮ ©   (2006-05-18 12:15) [43]

>не знаю как задать другое имя

var
 first, second, current: <когда с типом например определишься>;
 first и second создаешь и инициализируешь. Отрисовываешь и просчитываешь current, при переключении установив current := first (second)

второй вариант:

var
 tab: array of  <когда с типом например определишься>;
 Idx: integer;

 Отрисовываешь и просчитываешь tab[Idx]. Переключаешься изменением Idx


 
Jeer ©   (2006-05-18 12:26) [44]

Officeman   (18.05.06 12:05) [41]

В общем, начни с чтения умных книжек.


 
Сергей М. ©   (2006-05-18 13:02) [45]

const

MaxRows = 200;
MaxCols = 10000;

type

PTempTable = ^TTempTable
TTempTable = array[0..MaxRows-1, 0..MaxCols-1] of Integer;

PTempRow = ^TTempRow;
TTempRow = array[0..MaxCols-1] of Integer;

PTempCol = ^TTempCol;
TTempCol = array[0..MaxRows-1] of Integer;

PTempTableInfo = ^TTempTableInfo;
TTempTableInfo = packed record
  Rows, Cols: Integer;
  TableData: PTempTable;
end;

var
 TableList: TList;

...
 TableList := TList.Create;
...

function CreateTable(const Rows, Cols: Integer): Integer;
var
 Info: PTempTableInfo;
begin
 New(Info);
 try
   Info.Rows := Rows;
   Info.Cols := Cols;
   GetMem(Info.TableData, Rows * Cols * SizeOf(Integer));
   try
     InitTable(Info.TableData);
     Result := TableList.Add(Info);
   except
     FreeMem(Info.TableData);
     raise;
   end;      
 except
   Dispose(Info);
   raise;
 end;
end;

procedure DestroyTable(const Index: Integer);
var
 Info: PTempTableInfo;
begin
 Info := TableList[i];
 FreeMem(Info.TableData);
 Dispose(Info);
 TableList.Delete(i);
end;

procedure DestroyTableList;
var
 i: Integer;
begin
 for i := 0 to TableList.Count - 1 do DestroyTable(TableList[i]);
 TableList.Free;
end;

...

//пример обращения к элементу 3-й таблицы

PTempTable(TabeleList[2])[5, 6] := ...


 
Officeman   (2006-05-18 13:02) [46]

to ЮЮ, погодите плиз. ещё раз. я тех кто в танке. )
Помогите разобратся! Вы потрясающие учителя.



unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Mask, ToolEdit, CurrEdit;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Memo1: TMemo;
   name34: TButton;
   Num: TRxCalcEdit;
   Memo2: TMemo;
   Memo3: TMemo;
   Button2: TButton;
   Num2: TRxCalcEdit;
   procedure Button1Click(Sender: TObject);
   procedure name34Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

 const
MaxRows = 5000;    //колонок
MaxCols = 100;            //строк

type
PTempTable = ^TTempTable;    //  ??? такого в F1 вапще нет

TTempTable = array[0..MaxRows-1, 0..MaxCols-1] of Integer;
PTempRow = ^TTempRow;
TTempRow = array[0..MaxCols-1] of Integer;
PTempCol = ^TTempCol;
TTempCol = array[0..MaxRows-1] of Integer;

var
Form1: TForm1;
TempTable: PTempTable;   //  "TempTable"  это и есть имя таблички ?
TempRow: PTempRow;
TempCol: PTempCol;
Rows: Integer = MaxRows;
Cols: Integer = MaxCols;
Row, Col: Integer;
i: Integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

memo1.Visible:=false;
memo1.Clear;
memo2.Clear;

 Rows:= 100;
 Cols:= 20;

// создаём табличку под инедификатором  "TempTable"   ???????????
GetMem(TempTable, Rows * Cols * SizeOf(Integer));  

//заполняем значениями
   for Row := 0 to Rows-1 do //столбец
     for Col := 0 to Cols - 1 do begin //строка
      i := random(3);
      TempTable[Row, Col] := i;
      Inc(i);
      memo1.Lines.Add(inttostr(Row)+". "+inttostr(i));
     end;
  FreeMem(TempCol);
memo1.Visible:=true;
 end;

procedure TForm1.name34Click(Sender: TObject);
begin

Col := 3        

//штудируем все колонки, начиная с нулевой, получаем значения СТРОКИ 3
  for Row := 0 to Rows-2 do begin
    memo2.Lines.Add(inttostr(Col+1)+". "+inttostr(TempTable[row, col]+1));

//вот тут вапще косяк. в табличке записано 2,1,3. когда вытаскиваю.
//то получаю 1,0,2.  ровно на единицу меньше. пришлось приписать +1
//голову сломал, ответа не нашёл.


  end;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin

Row := 3   // значения текущей колонки !!!!!!!!!!!

//штудируем все Строчки, начиная с нулевой.
  for Col := 0 to Cols-1 do begin

// тоже самое +1 пришлось делать. чтобы правильные значения взять.
//я чёто неправильно сделал! непонимаю в чём гвоздь


    memo3.Lines.Add(inttostr(Row)+". "+inttostr(TempTable[row, col]+1));

  end;

end;

end.



 
Officeman   (2006-05-18 13:09) [47]

>//пример обращения к элементу 3-й таблицы
>PTempTable(TabeleList[2])[5, 6] := ...


т.е. ты создаёшь список из нескольких(трёх) таблиц?     [0,1,2]   так ?


 
Сергей М. ©   (2006-05-18 13:21) [48]


> Officeman   (18.05.06 13:09) [47]


Я их не создаю.
Я лишь привел пример процедур/ф-ций, манипулирующих созданием/уничтожением таблицы с занесением ее в список и удаления из списка.

Сколько раз ты вызовешь ф-цию Createtable, столько таблиц и будет создано.

В строчке

PTempTable(TabeleList[2])[5, 6] := ...

подразумевается, что Createtable() была вызвана тобой не менее 3-х раз


 
Сергей М. ©   (2006-05-18 13:23) [49]


> TempTable: PTempTable;   //  "TempTable"  это и есть имя
> таблички ?


Это не "имя таблички", это символьный идентификатор переменной, предназначенной для хранения указателя на данные типа  TTempTable


 
Сергей М. ©   (2006-05-18 13:32) [50]

Наврал.

Вот так будет правильней :

procedure InitTable(const Table: PTempTableInfo);
var Row, Col: Integer;
begin
 with Info^ do
 for Row := 0 to Rows - 1 do
   for Col := 0 to Cols - 1 do
     TableData[Row, Col] := ...;
end;

function CreateTable(const Rows, Cols: Integer): Integer;
var
Info: PTempTableInfo;
begin
New(Info);
try
  Info.Rows := Rows;
  Info.Cols := Cols;
  GetMem(Info.TableData, Rows * Cols * SizeOf(Integer));
  try
    InitTable(Info);
    Result := TableList.Add(Info);
  except
    FreeMem(Info.TableData);
    raise;
  end;      
except
  Dispose(Info);
  raise;
end;
end;


 
Officeman   (2006-05-18 14:08) [51]

Спасибо за краткий экскурс. если приду в очередной тупик подниму здесь вопросик. спасибо.


 
Officeman   (2006-05-19 09:18) [52]


Result := TableList.Add(Info);


как правильно инициализировать  TableList  , в этом случае


 
Сергей М. ©   (2006-05-19 09:24) [53]

Инициализация происходит строчкой выше:

InitTable(Info);



Страницы: 1 2 вся ветка

Текущий архив: 2006.06.25;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.045 c
15-1149128005
Arazel
2006-06-01 06:13
2006.06.25
Народ! подскажите где взять документацю ф.с. Ex2/Ex3/NTFS/...


3-1146133045
linx
2006-04-27 14:17
2006.06.25
Получить значение генератора


2-1149681186
фыв
2006-06-07 15:53
2006.06.25
Компонент в определенном месте на поле


15-1148898228
vidiv
2006-05-29 14:23
2006.06.25
"http://www.microsoft.com/rus/getthefacts/topics/ipi.mspx"...


3-1146041888
Delphi basic
2006-04-26 12:58
2006.06.25
Crystal Peports из Delphi