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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2011, 20:33   #11
Катя Анисина
 
Регистрация: 12.12.2011
Сообщений: 7
По умолчанию

Я конечно не спец в форумах, как писать в личку не нашла(( Там затруднение не выйдет что в DTL формате русские заголовки??? их не проблема переписать, и еще могу для удобства выложить dtl файлик с маленьким списком =)
Катя Анисина вне форума Ответить с цитированием
Старый 19.12.2011, 15:29   #12
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

первая кнопка evt
вторая кнопка dtl без заголовков
третья кнопка dtl с заголовками

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,DateUtils;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type
  TDtlStaticRec=packed record
    Sec010170:integer;
    MSec:byte;
    params:array[1..16] of word;
  end;
  TEvtStaticRec=packed record
    Sec010170:integer;
    Event,Category,Length:byte;
  end;
  TEvtVarRec=packed record
    Head:TEVTStaticRec;
    Message:string;
  end;

function SecToDateTime(Sec:integer):TDateTime;
begin
  result:=25569;//EncodeDate(1970,01,01);
  result:=IncSecond(result,Sec);
end;

function FormatEvtRec(const Rec:TEVTVarRec):string;
var d:TDateTime;
begin
  d:=SecToDateTime(Rec.Head.Sec010170);
  result:=AnsiQuotedStr(IntToStr(Rec.Head.Event),'"')+','+
          AnsiQuotedStr(IntToStr(Rec.Head.Category),'"')+','+
          AnsiQuotedStr(FormatDateTime('YY"/"MM"/"DD',d),'"')+','+
          AnsiQuotedStr(FormatDateTime('HH:mm:ss',d),'"')+','+
          AnsiQuotedStr(UTF8Decode(Rec.Message),'"');
end;

function FormatDtlRec(const Rec:TDtlStaticRec):string;
var
  d:TDateTime;
  i:integer;
begin
  d:=SecToDateTime(Rec.Sec010170);
  result:='"'+FormatDateTime('YY"/"MM"/"DD',d)+'",'+
          '"'+FormatDateTime('HH:mm:ss',d)+'",'+
          '"'+IntToStr(Rec.Msec*10)+'",';
   for i:=low(Rec.params) to high(Rec.params) do
    result:=result+'"'+IntToStr(Rec.params[i])+'",';
  result:=copy(result,1,length(result)-1);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Stream:TFileStream;
  Rec:TEVTVarRec;
begin
  Stream:=TFileStream.Create('EL_20110922.evt',fmOpenRead);
  try
    Stream.Position:=16;
    while Stream.Position<Stream.Size do
    begin
      Stream.ReadBuffer(Rec.Head,SizeOf(Rec.Head));
      SetLength(Rec.Message,Rec.Head.Length);
      Stream.ReadBuffer(PChar(Rec.Message)^,Rec.Head.Length);
      memo1.Lines.Add(FormatEvtRec(Rec));
    end;
  finally
    Stream.Free;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Stream:TFileStream;
  Rec:TDtlStaticRec;
begin
  memo1.Lines.BeginUpdate;
  try
    memo1.Lines.Clear;
    Stream:=TFileStream.Create('20110922.dtl',fmOpenRead);
    try
      Stream.Position:=404;
      while Stream.Position<Stream.Size do
      begin
        Stream.ReadBuffer(Rec,SizeOf(Rec));
        memo1.Lines.Add(FormatDtlRec(Rec));
      end;
    finally
      Stream.Free;
    end;
  finally
    memo1.Lines.EndUpdate;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
type
  TDtlStaticHeader=packed record
    Sign,Undef1,Date:integer;
    Count1,Count2:integer;
  end;
  TDtlFieldDef=packed record
    FieldType,FieldSize:integer;
    FieldName:string;
  end;
  TDtlHead=record
    Header:TDtlStaticHeader;
    Fields:array of TDtlFieldDef;
  end;
var
  Stream:TFileStream;
  Head:TDtlHead;
  i:integer;
  w:word;
  s:string;
  Rec:TDtlStaticRec;
begin
  memo1.Lines.BeginUpdate;
  try
    memo1.Lines.Clear;
    Stream:=TFileStream.Create('20110922.dtl',fmOpenRead);
    try
      with Head do
      begin
        Stream.ReadBuffer(Header,SizeOf(Header));
        SetLength(Fields,Header.Count1);
        for i:=low(Fields) to high(Fields) do
          Stream.ReadBuffer(Fields[i],SizeOf(Int64));
        Stream.ReadBuffer(i,SizeOf(integer));
        for i:=low(Fields) to high(Fields) do
        begin
          Stream.ReadBuffer(w,SizeOf(w));
          SetLength(Fields[i].FieldName,w);
          Stream.ReadBuffer(PChar(Fields[i].FieldName)^,w);
        end;
        s:='"Date","Time","Millisecond",';
        for i:=low(Fields) to high(Fields) do
          s:=s+'"'+UTF8Decode(Fields[i].FieldName)+'",';
        s:=copy(s,1,length(s)-1);
        memo1.Lines.Add(s);
      end;

      while Stream.Position<Stream.Size do
      begin
        Stream.ReadBuffer(Rec,SizeOf(Rec));
        memo1.Lines.Add(FormatDtlRec(Rec));
      end;
    finally
      Stream.Free;
    end;
  finally
    memo1.Lines.EndUpdate;
  end;
end;

end.
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 20.12.2011, 13:45   #13
Катя Анисина
 
Регистрация: 12.12.2011
Сообщений: 7
По умолчанию

Все работает !!! Slym низкий поклон за его светлый труд и огромное спасибо!
Катя Анисина вне форума Ответить с цитированием
Старый 10.07.2013, 14:40   #14
D.i.M.K.i.N.
Новичок
Джуниор
 
Регистрация: 10.07.2013
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
реверс evt дал вот это
доброе время суток.
подскажите пжлста что значит реверс?
и если не затруднит описать подробнее
что это за файла dtl и evt и как их обработать...
D.i.M.K.i.N. вне форума Ответить с цитированием
Старый 10.07.2013, 16:22   #15
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

http://ru.wikipedia.org/wiki/%CE%E1%...E1%EE%F2%EA%E0

что конкретно нужно?

чел дал файл с неизвестной структурой, я эту неизвестность методом тыка почикал, и разсувал по полочкам
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 10.07.2013 в 16:33.
Slym вне форума Ответить с цитированием
Старый 11.07.2013, 17:45   #16
D.i.M.K.i.N.
Новичок
Джуниор
 
Регистрация: 10.07.2013
Сообщений: 2
По умолчанию

Есть необходимость тоже почикать эти файлы, но на С#.
Знаний Delphi = 0. Поэтому и интересует как Вы
почикали, и разсували по полочкам эти файлы.
Можите объяснить?
D.i.M.K.i.N. вне форума Ответить с цитированием
Старый 12.07.2013, 08:38   #17
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

бери и чикай весь секрет в приведёном выше листинге...
файлы опираются на структуры фиксированного размера...
варианта 2:
1. если шарп умеет оперировать записями (аналог record) и считывать их из файла, то тупой копипаст с конвертацией в c# моего листинга
2. чтение каждой переменной известного размера, тоже самое по сути но гиморней
аля

TDtlStaticHeader=class
Sign,Undef1,Date:integer;
Count1,Count2:integer;
end;

StaticHeader.Sign:= Stream.readinteger;
StaticHeader.Undef1:= Stream.readinteger;
StaticHeader.Date:= Stream.readinteger;
строка имеет спереди длинну, сначала читаем 2 байта длинны потом считываем строку длинной длинна
length=Stream.readWord;
string=Stream.readstring(length);

p.s.
в шарпе я только читатель, но подредактировать смогу - выкладывай свою поделку допилим
я нынче безработный время есть... донат по желанию
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 12.07.2013 в 10:49.
Slym вне форума Ответить с цитированием
Старый 17.07.2013, 16:15   #18
John Doe
 
Регистрация: 17.07.2013
Сообщений: 4
По умолчанию

D.i.M.K.i.N. вы сделали на С#?

Кто может "перевести" пост №12 с Delphi на С#(WinForm VS2010)?

Последний раз редактировалось John Doe; 17.07.2013 в 16:38.
John Doe вне форума Ответить с цитированием
Старый 17.07.2013, 18:46   #19
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Такой востребованный формат? И почему его всем надо на шарпе?
Ставлю студию попилю шарп... Как распилю выложу...
а ваабще товарищи шарп очень похож на дельфю по синтаксису так что не сидите сложа руки...
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 18.07.2013, 11:25   #20
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Наверно можно не пилить, для John Doe я сделал уже (не за бесплатно).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
КАК ПЕРЕДЕЛАТЬ ФОРМАТ mp4 В ФОРМАТ 3gp,MPEG4 kamalruslan Софт 4 20.08.2015 16:16
Определить:формат последовательности параметров & способ размещения последовательности переменных DenSyntax Помощь студентам 0 22.06.2010 17:26
подключение двух компьютеров к интернет через одно подключение Chudo4258 Помощь студентам 3 30.03.2010 16:07
Delphi подключение Help & manual DelphiQuestions Помощь студентам 0 17.11.2009 15:25
TForm & TImage & PNG & Прозрачность delphi_beginner Общие вопросы Delphi 7 19.09.2009 08:46