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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2013, 11:48   #21
John Doe
 
Регистрация: 17.07.2013
Сообщений: 4
По умолчанию

Подтверждаю. Сделал на С# пост#6.
Недорого. Быстро.

На пост#12 тоже бы хотелось взглянуть,
но денег жалко, т.к. студент)))
John Doe вне форума Ответить с цитированием
Старый 18.07.2013, 21:27   #22
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

вот так всегда - афтар в пролете: быстро и бесплатно
в #6 evt а в #12 evt и dtl
в личку выложи креатив может и dtl прикручу
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 18.07.2013 в 21:29.
Slym вне форума Ответить с цитированием
Старый 18.07.2013, 22:27   #23
John Doe
 
Регистрация: 17.07.2013
Сообщений: 4
По умолчанию

новичок. нет возможности писать в личку.
сам пиши обсудим, на пивасик наскребем)))
ICQ No. 666056529

вопрос:
как узнали Stream.Position:=16 или 404
и что последовательность integer, byte, word ?
методом подбора?

Последний раз редактировалось John Doe; 19.07.2013 в 10:57. Причина: + вопрос
John Doe вне форума Ответить с цитированием
Старый 21.07.2013, 17:03   #24
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

struct TEvtHeader
{
    public int Sign, Undef1, Date, Count;
}
struct TEvtRecord{
    public DateTime Date;
    public byte Event,Category;
    public string Message;
    public override string ToString()
    {
        return
            Event.ToString() +", "+
            Category.ToString() + ", " +
            Date.ToString("yy/MM/dd") + ", " +
            Date.ToString("HH:mm:ss") + ", " +
            Message;
    }
}

class EvtReader
{
    private BinaryReader reader;
    public TEvtHeader Header;
    public TEvtRecord Record = new TEvtRecord();

    public EvtReader(string FileName)
    {
        reader = new BinaryReader(new FileStream(FileName, FileMode.Open, FileAccess.Read));
        ReadHeader();
    }

    public void Close() { reader.Close(); }

    private void ReadHeader(){
        Header.Sign = reader.ReadInt32();
        Header.Undef1 = reader.ReadInt32();
        Header.Date = reader.ReadInt32();
        Header.Count = reader.ReadInt32();
    }

    public bool Next()
    {
        if (reader.BaseStream.Position == reader.BaseStream.Length) { return false; }
        Record.Date=(new DateTime(1970, 01, 01)).AddSeconds(reader.ReadInt32());
        Record.Event = reader.ReadByte();
        Record.Category = reader.ReadByte();
        
        short len = reader.ReadByte();
        byte[] data = reader.ReadBytes(len);
        Record.Message = Encoding.UTF8.GetString(data);
        return true;
    }
}

struct TDtlFieldDef{
    public int FieldType,FieldSize;
    public string FieldName;
}

struct TDtlHeader{
    public int Sign,Undef1,Date,Count1,Count2;
    public TDtlFieldDef[] Fields;
}

struct TDtlRecord{
    public DateTime Date;
    public short[] Params;
    public override string ToString()
    {
        string res =
            Date.ToString("yy/MM/dd") + ", " +
            Date.ToString("HH:mm:ss") + ", " +
            Date.ToString("ffff");
            foreach(short param in Params){
                 res=res + ", " + param.ToString();
            }
        return res;
    }
}

class DtlReader
{
    private BinaryReader reader;
    public TDtlHeader Header;
    public TDtlRecord Record = new TDtlRecord();

    public DtlReader(string FileName)
    {
        reader = new BinaryReader( new FileStream(FileName, FileMode.Open, FileAccess.Read));
        ReadHeader();
    }

    public void Close() { reader.Close();}

    private void ReadHeader() {
        Header.Sign=reader.ReadInt32();
        Header.Undef1=reader.ReadInt32();
        Header.Date=reader.ReadInt32();
        Header.Count1=reader.ReadInt32();
        Header.Count2=reader.ReadInt32();
        Header.Fields=new TDtlFieldDef[Header.Count1];

        for(int i = 0; i < Header.Count1; i++)  {
            Header.Fields[i].FieldType=reader.ReadInt32();
            Header.Fields[i].FieldSize=reader.ReadInt32();
        }
        reader.ReadInt32();//skip 4 byte
        for(int i = 0; i < Header.Count1; i++)  {
            short len=reader.ReadInt16();
            byte[] data=reader.ReadBytes(len);
            Header.Fields[i].FieldName = Encoding.UTF8.GetString(data);
        }
    }

    public bool Next()
    {
        if (reader.BaseStream.Position == reader.BaseStream.Length) { return false; }
        Record.Date = (new DateTime(1970, 01, 01)).AddSeconds(reader.ReadInt32()).AddMilliseconds(reader.ReadByte()*10);

        Record.Params = new short[Header.Count1];
        for (int i = 0; i < Header.Count1; i++)
        {
            Record.Params[i]=reader.ReadInt16();
        }
        return true;
    }
}
юзадж
Код:
private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            EvtReader reader = new EvtReader("EL_20110922.evt");
            while (reader.Next())
            {
                textBox1.AppendText(reader.Record.ToString() + "\n");
            }
            reader.Close();

        }

        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            DtlReader reader = new DtlReader("20110922.dtl");

            while (reader.Next())
            {
                textBox1.AppendText(reader.Record.ToString() + "\n");
            }
            reader.Close();

            
        }
P.S.
код dtl действителен только при использовании полей типа "3" - двубайтовый/short
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 21.07.2013 в 20:28.
Slym вне форума Ответить с цитированием
Старый 22.07.2013, 13:51   #25
John Doe
 
Регистрация: 17.07.2013
Сообщений: 4
По умолчанию

Header не показывает. одни нули...
John Doe вне форума Ответить с цитированием
Старый 22.07.2013, 14:39   #26
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

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

Код:
        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            EvtReader reader = new EvtReader("EL_20110922.evt");
            textBox1.AppendText(Encoding.UTF8.GetString(BitConverter.GetBytes(reader.Header.Sign)) + "\n");
            while (reader.Next())
            {
                textBox1.AppendText(reader.Record.ToString() + "\n");
            }
            reader.Close();

        }

        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            DtlReader reader = new DtlReader("20110922.dtl");
            textBox1.AppendText(Encoding.UTF8.GetString(BitConverter.GetBytes(reader.Header.Sign)) + "\n");
            while (reader.Next())
            {
                textBox1.AppendText(reader.Record.ToString() + "\n");
            }
            reader.Close();
        }
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 22.07.2013 в 14:51.
Slym вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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