Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Массив записей


Автор: Albinos_x 24.12.2005, 14:58
Доброго времени суток!

Суть проблемы. Использую массив записей, как делал это и раньше, и не раз:
Код

type
  TFileRecC = File of Byte;

type
  TRecTabFile = record
     rtNameSize : byte;       
     rtFileName : string;    
     rtFileSize : string[10];  
     rtFile : string;       
     end;

type
  TRecTab = array of TRecTabFile;

...

procedure FileRecCAdd(FileName,PachFileName, Z :String; var TypeFile:TRecTab);
var
    index:integer;
begin
index:=length(TypeFile)+1;
SetLength(TypeFile,index);
TypeFile[index].rtNameSize:=Length(PachFileName);
TypeFile[index].rtFileName:=PachFileName;
TypeFile[index].rtFile:=FileName;
TypeFile[index].rtFileSize:=Z;
end;

procedure RecTabAddFull(dir:string; var TypeFile:TRecTab);
var Filename:TStringList;
    PachName:TStringList;
    Z:TStringList;
    i,con:word;
begin
Filename:=TStringList.Create;
PachName:=TStringList.Create;
Z:=TStringList.Create;
Filename.Clear;
PachName.Clear;
Z.Clear;
ScanDir(Dir, Dir, Filename, PachName,Z);
con:=Filename.Count;
if con>0 then
   begin
   for i:=0 to (con-1) do
      begin
      FileRecCAdd(Filename.Strings[i],PachName.Strings[i],Z.Strings[i],TypeFile);
      end;
   end;
Filename.Free;
PachName.Free;
end;

...


но процедура
Код

procedure FileRecCAdd(FileName,PachFileName, Z :String; var TypeFile:TRecTab);
var
    index:integer;
begin
index:=length(TypeFile)+1;
SetLength(TypeFile,index);
TypeFile[index].rtNameSize:=Length(PachFileName);
TypeFile[index].rtFileName:=PachFileName;
TypeFile[index].rtFile:=FileName;
TypeFile[index].rtFileSize:=Z;
end;

выполняется только один раз, а на второй раз, на строчке:
Код

SetLength(TypeFile,index);

вылетает дебаггер...
сначала в коде была TypeFile[index].rtFile - типа TFileRecC (файловая переменная), думал что из-за этого, но и замена на строку с именем файла ничего не дало...

Заранее всем Спасибо!!!

Автор: Albinos_x 24.12.2005, 15:13
всё проблема решена... простите, что отвлёк... действительно нужно выспаться, простейшая невнимательность:
Код

procedure FileRecCAdd(FileName,PachFileName, Z :String; var TypeFile:TRecTab);    
var    
    index:integer;    
begin    
index:=length(TypeFile)+1;    
SetLength(TypeFile,index);    
TypeFile[index-1].rtNameSize:=Length(PachFileName);    
TypeFile[index-1].rtFileName:=PachFileName;    
TypeFile[index-1].rtFile:=FileName;    
TypeFile[index-1].rtFileSize:=Z;    
end;

хотя всё равно не понятно почему один раз выполнялось... хотя не должно было...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)