Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
41 / 37 / 9
Регистрация: 01.02.2014
Сообщений: 825

Понять чем создан данный файл и попытаться его прочитать

08.04.2019, 20:26. Показов 2881. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Есть древняя софтина на дельфи (2004 год)
Вот там генерируется отчет в виде вот таких файлов (залью архив)

Главный файл это Rep , а файлы в папке Arhives видимо какое-то расширение / дополнение. Если честно без понятия. Вопрос в том, как такое прочитать)?

Результат из программы выведу на картинке и прикрепил pdf , который создает данная программа (может кому-то будет удобнее)
Очень надеюсь на вашу помощь
Миниатюры
Понять чем создан данный файл и попытаться его прочитать   Понять чем создан данный файл и попытаться его прочитать  
Вложения
Тип файла: zip db.zip (1.29 Мб, 9 просмотров)
Тип файла: pdf pdf.pdf (275.2 Кб, 6 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.04.2019, 20:26
Ответы с готовыми решениями:

Как сделать надпись "файл не создан" если нужно его прочитать но файл ещё не создан?
Как сделать надпись "файл не создан" если нужно его прочитать но файл ещё не создан? Например в такой программе: uses crt; Type...

Не удается прочитать текстовый файл который создан из приложения
Задача открывать из написаного мною приложения тектовые файлы которые не созданы этим приложением! Я сейчас пришу приложение и для...

Составить программу, позволяющую прочитать данный файл
Полученную матрицу записать в текстовый файл,имя которого ввести с клавиатуры.Составить программу, позволяющую прочитать данный...

12
41 / 37 / 9
Регистрация: 01.02.2014
Сообщений: 825
08.04.2019, 20:27  [ТС]
Кстати могу выложить программу. Если кто-то силен в реверсинге, возможно вы сможете понять что к чему. Написана на delphi без каких либо защит
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,672
Записей в блоге: 21
09.04.2019, 01:10
судя по всему, автор сделал собственный формат файлов для "бд"
с первым файлом все предельно ясно )
там поля фиксированной длины, в которые строки например записаны вместе с нулевым символом, где в делфи живет длина строки
остальное легко вычисляется по таблице на экране
в начале файла видимо записан текущий файл из папки Archives
там сложнее - видимо, записан массив точек для графика
но особо тоже не видно проблем
под словом "прочитать" что вы имели в виду?
программа эти файлы читает и пишет.
можно написать другую программу, которая тоже будет их читать и делать что... ??
1
41 / 37 / 9
Регистрация: 01.02.2014
Сообщений: 825
09.04.2019, 12:30  [ТС]
krapotkin, да. Эта программа читает и пишет логи. Но она написана очень давно, мне эти логи с разных машин нужно будет собирать на общий сервер и разбирать их там (сам прогаю на C#)
Вот собественно и вопрос. Как читать это. Не понимаю как пишет цифры в этот файл..
0
4192 / 1839 / 222
Регистрация: 06.10.2010
Сообщений: 4,127
09.04.2019, 14:51
Похоже, что данные точек хранятся в виде 2-байтовых целых чисел. В Hex-редакторе хорошо видны 3 массива точек (2 для "рапорта" и 1 для "сменный рапорта"). Все поля фиксированного размера. Читаться должно легко.
1
4192 / 1839 / 222
Регистрация: 06.10.2010
Сообщений: 4,127
10.04.2019, 05:04
Частично разобрал trm-файл в kaitai web ide
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
meta:
  id: trm
  file-extension: trm
  endian: be
  encoding: windows-1251
seq:
  - id: string1
    type: string
  - id: smena
    type: string
  - id: master
    type: string    
  - id: thermist
    type: string
  - id: string2
    type: string
  - id: plet
    type: string
  - id: styk
    type: string
  - id: date
    size: 21
  - id: temperatura_nagreva
    type: u2le
  - id: vremya_nagreva
    type: u2le
  - id: vremya_viderzki
    type: u2le    
  - id: vremya_smeny_ustr
    type: u2le        
  - id: vremya_zakalki
    type: u2le        
  - id: temp_posle_zakalki
    type: u2le        
  - id: davlenie_vozduha
    type: u2le        
  - id: value0
    type: u2le
  - id: result
    type: string
  - id: value1
    type: s4
  - id: value2
    type: s4
  - id: value3
    type: u2
  - id: nagrev
    type: array
  - id: zakalka1
    type: array    
  - id: zakalka2
    type: array    
types:
  array:
    seq:
    - id: value
      type: s4
    - id: array
      type: u2
      repeat: expr
      repeat-expr: 9999
  string:
    seq:
    - type:  u1
    - id: text
      size: 100
      type: strz

Как хранится дата не понял.
1
4192 / 1839 / 222
Регистрация: 06.10.2010
Сообщений: 4,127
10.04.2019, 05:36
Дата и время хранятся в виде TDateTime.
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
meta:
  id: trm
  file-extension: trm
  endian: be
  encoding: windows-1251
seq:
  - id: string1
    type: string
  - id: smena
    type: string
  - id: master
    type: string    
  - id: thermist
    type: string
  - id: string2
    type: string
  - id: plet
    type: string
  - id: styk
    type: string
  - size: 5
  - id: date
    type: f8le
  - id: time
    type: f8le
  - id: temperatura_nagreva
    type: u2le
  - id: vremya_nagreva
    type: u2le
  - id: vremya_viderzki
    type: u2le    
  - id: vremya_smeny_ustr
    type: u2le        
  - id: vremya_zakalki
    type: u2le        
  - id: temp_posle_zakalki
    type: u2le        
  - id: davlenie_vozduha
    type: u2le        
  - id: value0
    type: u2le
  - id: result
    type: string
  - id: value1
    type: s4
  - id: value2
    type: s4
  - id: value3
    type: u2
  - id: nagrev
    type: array
  - id: zakalka1
    type: array    
  - id: zakalka2
    type: array    
types:
  array:
    seq:
    - id: value
      type: s4
    - id: array
      type: u2
      repeat: expr
      repeat-expr: 9999
  string:
    seq:
    - type:  u1
    - id: text
      size: 100
      type: strz
Миниатюры
Понять чем создан данный файл и попытаться его прочитать  
1
4192 / 1839 / 222
Регистрация: 06.10.2010
Сообщений: 4,127
10.04.2019, 05:45
Лучший ответ Сообщение было отмечено MakcPletnev как решение

Решение

Поправил описание массивов точек.
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
meta:
  id: trm
  file-extension: trm
  endian: le
  encoding: windows-1251
seq:
  - id: string1
    type: string
  - id: smena
    type: string
  - id: master
    type: string    
  - id: thermist
    type: string
  - id: string2
    type: string
  - id: plet
    type: string
  - id: styk
    type: string
  - size: 5
    #Выравнивание
  - id: date
    type: f8
  - id: time
    type: f8
  - id: temperatura_nagreva
    type: u2
  - id: vremya_nagreva
    type: u2
  - id: vremya_viderzki
    type: u2    
  - id: vremya_smeny_ustr
    type: u2        
  - id: vremya_zakalki
    type: u2        
  - id: temp_posle_zakalki
    type: u2        
  - id: davlenie_vozduha
    type: u2        
  - id: value0
    type: u2
  - id: result
    type: string
  - size: 3
    #Выравнивание
  - id: value1
    type: s4
  - id: value2
    type: s4
  - id: value3
    type: u2
  - id: nagrev
    type: array
  - id: zakalka1
    type: array    
  - id: zakalka2
    type: array    
types:
  array:
    seq:
    - id: array
      type: u2
      repeat: expr
      repeat-expr: 10001
  string:
    seq:
    - type:  u1
    - id: text
      size: 100
      type: strz
1
41 / 37 / 9
Регистрация: 01.02.2014
Сообщений: 825
10.04.2019, 12:51  [ТС]
Огромное спасибо)
0
4192 / 1839 / 222
Регистрация: 06.10.2010
Сообщений: 4,127
10.04.2019, 13:42
Там хоть рабочий код генерится?
0
41 / 37 / 9
Регистрация: 01.02.2014
Сообщений: 825
10.04.2019, 17:25  [ТС]
murderer, не проверялс.. Надеюсь, что да, вроде выдает похожее на правду. Я же вам писал, пока это просто в стадии пощупать , как только понадобится, я отпишусь сразу. Пока особо не тратьте время, как минимум это получается и реализуемо - это все что надо сейчас знать
0
4192 / 1839 / 222
Регистрация: 06.10.2010
Сообщений: 4,127
10.04.2019, 18:45
Лучший ответ Сообщение было отмечено MakcPletnev как решение

Решение

Так можно прочитать и вывести файл на экран, не используя функции и типы данных, характерные для Delphi.
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
{$APPTYPE CONSOLE}
uses
  Windows,ShellAPI;
 
function printf(const Format: PAnsiChar): Integer; cdecl; varargs; external 'msvcrt.dll';
 
var
  buf: packed record
       Text1Len:        byte;
       Text1:           array[0..99] of AnsiChar;  //неизвестная строка
       WorkShiftLen:    byte;
       WorkShift:       array[0..99] of AnsiChar;  //смена
       MasterLen:       byte;
       Master:          array[0..99] of AnsiChar;  //мастер
       ThermistLen:     byte;
       Thermist:        array[0..99] of AnsiChar;  //термист
       Text2Len:        byte;
       Text2:           array[0..99] of AnsiChar;  //неизвестная строка
       RailLen:         byte;
       Rail:            array[0..99] of AnsiChar;  //плеть
       SpliceLen:       byte;
       Splice:          array[0..99] of AnsiChar;  //стык
       align:           array[0..4] of byte;       //выравнивание по границе 8 байт
       Date:            double;                    //Дата (в целой части количество дней, прошедших с 30.12.1899
       Time:            double;                    //Время начала обработки(в дробной части доля суток, например 0.5 - это полдень, 0 - полночь)
       HeatTemp:        word;                      //Температура нагрева в градусах по шкале Цельсия
       HeatTime:        word;                      //Время нагрева в секундах
       ExposureTime:    word;                      //Время выдержки в секундах
       DevChangeTime:   word;                      //Время смены устройства в секундах
       HardingTime:     word;                      //Время закалки в секундах
       AfterHardingTemp:word;                      //Температура после закалки в градусах по шкале Цельсия
       AirPressure:     word;                      //Давление воздуха в килопаскалях (КПа)
       Value0:          word;                      //Неизвестное значение
       ResultLen:       byte;
       Result:          array[0..99] of AnsiChar;  //Результат
       align2:          array[0..2] of byte;       //Выравнивание по границе 4 байта
       Value1:          integer;                   //Дальше какие-то неизвестные значения
       Value2:          integer;
       Value3:          word;
       HeatGraph:       array[0..10000] of word;   //График нагрева в градусах по шкале Цельсия
       HardingGraph1:   array[0..10000] of word;   //График закалки в килопаскалях (КПа)
       HardingGraph2:   array[0..10000] of word;   //График закалки в килопаскалях (КПа)
       end;
 
  f:       THANDLE;
  ftime:   FILETIME;
  systime: SYSTEMTIME;
  i:       integer;
  j:       DWORD;
  Args:    array of PWideChar;
 
begin
  SetConsoleOutputCP(1251);
  //Получаем массив параметров коммандной строки
  Pointer(Args):=CommandLineToArgvW(GetCommandLineW,i);
  if Args[1]<>nil then
  begin
    //Читаем файл
    f:=CreateFileW(Args[1],GENERIC_READ,0,0,OPEN_EXISTING,0,0);
    Pointer(Args):=0;
    ReadFile(f,buf,sizeof(buf),j,0);
    CloseHandle(f);
    //Конвертируем TDateTime в FILETIME
    pint64(@ftime)^:=round(buf.Date*24*60*60*10000000+94353120000000000+buf.Time*24*60*60*10000000);
    //Конвертируем FILETIME в SYSTEMTIME
    FileTimeToSystemTime(ftime,systime);
    //Выводим на экран
    printf('Смена                     %s'#13#10+
           'Мастер                    %s'#13#10+
           'Термист                   %s'#13#10+
           'Плеть                     %s'#13#10+
           'Стык                      %s'#13#10+
           'Дата                      %02u.%02u.%04u'#13#10+
           'Время начала обработки    %02u:%02u:%02u'#13#10+
           'Температура нагрева       %u '#176'C'#13#10+
           'Время нагрева             %u сек'#13#10+
           'Время выдержки            %u сек'#13#10+
           'Время смены устройства    %u сек'#13#10+
           'Время закалки             %u сек'#13#10+
           'Температура после закалки %u '#176'C'#13#10+
           'Давление воздуха          0,%u (МПа)'#13#10+
           'Результат                 %s',
           buf.WorkShift,
           buf.Master,
           buf.Thermist,
           buf.Rail,
           buf.Splice,
           systime.wDay,systime.wMonth,systime.wYear,
           systime.wHour,systime.wMinute,systime.wSecond,
           buf.HeatTemp,
           buf.HeatTime,
           buf.ExposureTime,
           buf.DevChangeTime,
           buf.HardingTime,
           buf.AfterHardingTemp,
           buf.AirPressure,
           buf.Result);
  end
  else
    printf('Имя файла не задано');
  printf(#13#10#13#10#13#10'Нажмите Escape для выхода...');
  while GetAsyncKeyState(VK_ESCAPE)=0 do; //Бесклнечный цикл
end.

Во вложении exe (перетащить на него trm-файл для открытия).
Вложения
Тип файла: 7z B.7z (9.9 Кб, 6 просмотров)
1
41 / 37 / 9
Регистрация: 01.02.2014
Сообщений: 825
10.04.2019, 23:50  [ТС]
murderer, окей) спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.04.2019, 23:50
Помогаю со студенческими работами здесь

Не могу понять как прочитать файл
Вродь как двоичный файл, но прочитать не могу его.. ...

Чем можно попытаться открыть формат .IFF ?
Попались файлы формата .IFF от 90-го года. В бинарном виде начало файла выглядит как: M1D]230; и далее каждая строка начинается с символа...

Создать файл, состоящий из 10 значений типа integer. Прочитать файл и вычислить сумму его элементов
Создать файл, состоящий из 10 значений типа integer. Прочитать файл и вычислить сумму его элементов.

На чем компилировать данный код и как его переписать для компиляции на турбоассемблере?
Привет. Есть код, который написан, вроде как тасм(правда, не разбираюсь), под компиляцию на 8086. В общем, кто разбирается, скажите,...

Чем из WPF приложения прочитать DBF файл
Доброго дня. Подскажите, чем из WPF приложения прочитать DBF файл? Запись не интересна, только чтение. И заодно, чтобы новую тему не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru