
30.08.2011, 07:49
|
Прохожий
|
|
Регистрация: 19.08.2011
Сообщения: 28
Репутация: 10
|
|
Вот что получилось.
Код:
type
AMA = packed record
RecId : Byte; //Идентификатор записи
LenRec : Word; //Длина записи
Flags : array[1..3] of Byte; //Флажки
SeqAndStat : Byte; //Посл-сть записи Статус оплаты
LenLacAndOwnId : Byte; //Длина LAC и ID владельца
{DnA : TStream; - Проблема в том что не умею работать с потоками: как использовать поток затем вывести данные}
DnA : array[1..5] of Byte; //Переменная часть - Номер абонента А - значение массива просто подобрал
//исп. hexviewer
//Если просто пишу DnA : array of Byte; то выходит ошибка, где говорится о том
//что требуется финализация переменной f: file of AMA;
//Значение переменного массива рассчитывается как DnA : array[1..i] of Byte
//где i = div [(LenLacAndOwnId+1)/2]
//Описание Пакета № 100
Np100 : Byte; //Номер пакета
Date : array[1..3] of Byte; //Дата
Time : array[1..3] of Byte; //Время
Flags100 : Byte; //Флажки Пакета № 100
Prod : array[1..3] of byte;//Прод-сть
//Описание Пакета № 101
Np101 : Byte; //Номер пакета
LenDnB : Byte; //Длина номера абонента Б
{DnB : TStream; - Проблема в том что не умею работать с потоками: как использовать поток затем вывести данные}
DnB : array[1..1] of Byte; //Переменная часть - Номер абонента Б - значение массива просто
// подобрал исп. hexviewer
//Если просто пишу DnA : array of Byte; то выходит ошибка, где говорится о том
//что требуется финализация переменной f: file of AMA;
//Значение переменного массива рассчитывается как DnB : array[1..j] of Byte
//где j = div [(LenDnB+1)/2]
//Описание Пакета № 130
Np130 : Byte; //Номер пакета
LenP : Byte; //Длина пакета
Zp : Word; //Значение причины
RezAndOpr : byte; //Резерв и определение
//Описание Пакета № 103
Np103 : Byte; //Номер пакета
TeTv : array[1..3] of byte; // Тарифные единицы для тарификации вызова
end;
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
OpenDialog: TOpenDialog;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
f: file of AMA;
open : Topendialog;
Rec : AMA;
Buffer : array [0..8191] of byte;
NumRecsRead,t : integer;
begin
memo1.Clear;
open := TOpenDialog.Create(self);
open.InitialDir := 'C:\000';
open.Options := [ofFileMustExist];
open.Filter := 'ama files|*.*';
open.Execute;
AssignFile(f,open.FileName);
{$I-}
Reset(f);
{$I+}
seek(f,0);
{while not eof(f) do
begin}
Read(f,Rec);
memo1.Lines.Add(inttostr(Rec.RecId) + ' - ИДЕНТИФИКАТОР ЗАПИСИ');
memo1.Lines.Add(inttostr(Rec.LenRec) + ' - ДЛИНА ЗАПИСИ');
memo1.Lines.Add(inttostr(Rec.Flags[1]) + ' - Флажок F12');
memo1.Lines.Add(inttostr(Rec.Flags[2]) + ' - Флажок F12');
memo1.Lines.Add(inttostr(Rec.Flags[3]) + ' - Флажок F12');
memo1.Lines.Add(inttostr(Rec.SeqAndStat) + ' - Посл-сть записи и статус оплаты');
memo1.Lines.Add(inttostr(Rec.LenLacAndOwnId) + ' - Длина LAC и ID владельца');
memo1.Lines.Add(inttohex(Rec.DnA[1],1) + inttohex(Rec.DnA[2],1) + inttohex(Rec.DnA[3],1) + inttohex(Rec.DnA[4],1) + inttohex(Rec.DnA[5],1) + ' - Номер абонента А');
//Выводим пакет № 100
memo1.Lines.Add(inttostr(Rec.Np100) + ' - Номер пакета');
memo1.Lines.Add(inttohex(Rec.Date[3],1) +'.'+ inttohex(Rec.Date[2],1) +'.'+ inttohex(Rec.Date[1],1) + ' - Дата');
memo1.Lines.Add(inttostr(Rec.Time[1]) +':'+ inttostr(Rec.Time[2]) +':'+ inttostr(Rec.Time[3]) + ' - Время');
memo1.Lines.Add(inttohex(Rec.Prod[3],1) +':'+ inttohex(Rec.Prod[2],1) +':'+ inttohex(Rec.Prod[1],1) + ' - Продолжительность');
//Выводим пакет № 101
memo1.Lines.Add(inttostr(Rec.Np101) + ' - Номер пакета');
memo1.Lines.Add(inttostr(Rec.LenDnB) + ' - Длина номера абонента Б');
memo1.Lines.Add(inttostr(Rec.DnB[1]) + ' - Номера абонента Б');
//Выводим пакет № 130
memo1.Lines.Add(inttostr(Rec.Np130) + ' - Номер пакета');
memo1.Lines.Add(inttostr(Rec.LenP) + ' - Длина пакета');
memo1.Lines.Add(inttostr(Rec.Zp) + ' - Причина');
memo1.Lines.Add(inttostr(Rec.RezAndOpr) + ' - Резерв и определение');
{end;}
CloseFile(f);
end;]
Как обойти ошибку которая требует финализации переменной f: file of AMA или дайте ссылочку где можно почитать про работу с потоками.
|