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


Автор: Cantana 12.11.2007, 15:27
Привет всем программистом и тем кто хочет им стат!!! smile 

 у меня вопрос такого рода в прикрепленним файле структура нетипизированного файла
я попробовал и получилос вот такой код
Код
procedure TTM_RET.bb_okClick(Sender: TObject);
var
i,k,k8,b2,b,e:integer;
mas:array[1..2160]of integer;
s,st:string;
da:boolean;
//qator:integer;
begin
  Cursor:=crHourglass;
     try
    da:=false;
    dm2.ADOQuery1.Active:=false;
    dm2.ADOQuery1.Parameters.ParamByName('linkkey2').Value:=dm2.surov2.Fields[0].Value;
    dm2.ADOQuery1.Parameters.ParamByName('block').Value:=strtoint(Edit1.Text);
    dm2.ADOQuery1.ExecSQL;
    dm2.ADOQuery1.Active:=true;
    dm2.ad_q.Active:=false;
    dm2.ad_q.Parameters.ParamByName('nom').Value:=dm2.ADOQuery1.Fields[3].AsString;
    dm2.ad_q.Parameters.ParamByName('znak').Value:=dm2.ADOQuery1.Fields[2].AsString;
    dm2.ad_q.ExecSQL;
    dm2.ad_q.Active:=true;

 if strtoint(ComboBox1.Text)<=strtoint(ComboBox2.Text) then
 if ComboBox1.ItemIndex<>ComboBox2.ItemIndex then
 begin
 b:=ComboBox1.ItemIndex;
 e:=ComboBox2.ItemIndex;
 for k:=b to e do
  begin
  ComboBox1.ItemIndex:=k;
  s:=ComboBox1.Text;
  AssignFile(UntypedFile, 'TM_RET'+s+'.DAT');
  Reset(UntypedFile,1);

  TotalRead:=0;
  FSize:=filesize(UntypedFile);
  b2:=0;
  k8:=StrToInt(Edit1.Text);
  SetLength(dmas,FSize div 1407);
  SetLength(mas2,FSize div 1407);
  setlength(vremya,2*FSize div 1407);
 repeat
 Seek(UntypedFile,b2*1407);
 BlockRead(UntypedFile,dBuffer,7,BytesRead);
 i:=0;
 if  dbuffer[i+5]<>0 then
 begin
        // время опроса присваеваеться в массив
 dmas[b2]:=dbuffer[i]*360+dbuffer[i+1]*60+dbuffer[i+2]+(dbuffer[i+3]-1)*360*24;//+DaysInAYear(dbuffer[i+4]-1)*24*360;


 if dbuffer[i]<10 then vremya[b2]:='0'+floattostr(dbuffer[i]) //+':'+FloatToStr(dbuffer[i+1])+':'+floattostr(dbuffer[i+2])+'/'+floattostr(dbuffer[i+3])+'.'+floattostr(dbuffer[i+4])+'.'+floattostr(-15)+FloatToStr(dbuffer[i+6]);
 else vremya[b2]:=floattostr(dbuffer[i]);
 if dbuffer[i+1]<10 then vremya[b2]:=vremya[b2]+':0'+FloatToStr(dbuffer[i+1])//+':'+floattostr()+'/'+floattostr()+'.'+floattostr(dbuffer[i+4])+'.'+floattostr(dbuffer[i+5]-15)+FloatToStr(dbuffer[i+6]);
 else  vremya[b2]:=vremya[b2]+':'+FloatToStr(dbuffer[i+1]);
 if   dbuffer[i+2]<10 then vremya[b2]:=vremya[b2]+':0'+FloatToStr(dbuffer[i+2])
 else vremya[b2]:=vremya[b2]+':'+FloatToStr(dbuffer[i+2]);
 if dbuffer[i+3]<10 then vremya[b2]:=vremya[b2]+'/'+'0'+FloatToStr(dbuffer[i+3])
 else vremya[b2]:=vremya[b2]+'/'+FloatToStr(dbuffer[i+3]);
 if dbuffer[i+3]<10 then vremya[b2]:=vremya[b2]+'.'+'0'+FloatToStr(dbuffer[i+4])
 else vremya[b2]:=vremya[b2]+'.'+FloatToStr(dbuffer[i+4]);

 vremya[b2]:=vremya[b2]+'.'+floattostr(dbuffer[i+5]-15)+FloatToStr(dbuffer[i+6]);
 end;
  Seek(UntypedFile,k8*7+b2*1407);
  BlockRead(UntypedFile,Buffer,sizeof(buffer),BytesRead);

  mas2[b2]:=buffer[i];
  Cursor:=crsqlwait;
 st:=ed_time.Text+'/'+DateToStr(DateTimePicker1.Date);
  if vremya[b2]=st then da:=true;
  st:=MaskEdit1.Text+'/'+DateToStr(DateTimePicker1.Date);
  if vremya[b2]=st then da:=false;


  if da then begin
       if dmas[b2]<>0 then begin
                             dm2.insert.Parameters.ParamByName('data').Value:=dmas[b2];
                             dm2.insert.Parameters.ParamByName('energobyekt').Value:=dm2.ad_q.Fields[0].AsInteger;
                             dm2.insert.Parameters.ParamByName('znach').Value:=mas2[b2];
                             dm2.insert.ExecSQL;
                           end;


         if mas2[b2]<>mas2[b2-1] then
                          begin
                             mas[b2]:=dmas[b2];
                             dm2.ins_jimm.Parameters.ParamByName('data').Value:=dmas[b2];
                             dm2.ins_jimm.Parameters.ParamByName('energobyekt').Value:=dm2.ad_q.Fields[0].AsInteger;
                             dm2.ins_jimm.Parameters.ParamByName('znach').Value:=mas2[b2];
                             dm2.ins_jimm.ExecSQL;
                          end;


             end;
     b2:=b2+1;
    until b2=2160;
   end;
  end



код в принципе рабочий, но если у вас будеть мнение по этому поводу я был би рад их услишать а в данном случаи почитат smile 

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