Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 18
1

Преобразование неизвестного формата (.US0) в .txt

11.01.2013, 23:34. Показов 4482. Ответов 30
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста способ, как преобразовать формат .US0 (его структура известна) в .txt в Builder C++. Например, как с использованием посимвольного чтения сделать вывод на экран информации из заголовка файла и так далее, а в следствии сохранения этой информации в файле текстового формата в определенной последовательности?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2013, 23:34
Ответы с готовыми решениями:

Преобразование визуальных данных из формата RGB в YUV (4:2:0)
Помогите, пожалуйста, добрые люди. При создании программы преобразовании визуальных данных из...

Преобразовать текст из *.txt (в любой кодировке) в картинку формата *.bmp
Привет) Нужна помощь с написанием программы..нужна информация) Задание: Написать программу,...

Преобразование исходного текстового формата txt в таблицу xls
Здравствуйте, подскажите пожалуйста как перевести из *.txt файла в *.xls, просмотрев несколько...

Чтение из файла неизвестного формата
Всем привет.Я изучаю си,по работе и по учебе параллельно.Практически дошел до струтур,но...

30
273 / 241 / 56
Регистрация: 29.05.2012
Сообщений: 889
11.01.2013, 23:39 2
Т.к. не знаю структуры опишу общие шаги.
1. Описать структуры описывающие структуру заголовка.
2. Описать дополнительные структуры.
3. Пишем код который открывает файл в режиме бинарного чтения, создаёт структуру заголовка, читает заголовок. В соответствии со структурой создаёт и заполняет дополнительные структуры.
4. Написать код который выводит в текстовый файл инф. в нужном вам виде.
1
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 18
11.01.2013, 23:45  [ТС] 3
Вот структура данного файла.
Чтобы описать структуры необходимо задавать массивы, как я понимаю?
Вложения
Тип файла: docx Структура файла.docx (20.1 Кб, 27 просмотров)
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
12.01.2013, 15:10 4
Omniknight, вероятно, документ битый, вордом не открывается - проверь и еще раз выложи.

Добавлено через 25 минут
Ну, слегка битый оказался - libreoffice пофыркал малость и открыл.

Впредь лучше выкладывай в виде текста или изображения. Вот то, что открылось:
Структура файлов формата УС0

Файл УС0 предназначен для хранения ТМИ медленноменяющихся параметров и состоит из следующих полей:
– заголовок файла (от 40 до 295 байт);
– таблица паспортов;
– наименование и значения ТМП.
Структура заголовка приведена в таблице П.1.1.

Таблица П.1.1 – Структура заголовка файла УС0
УС0Имя изделияИмя испытанияДата испытанияТНТККПРФLКомментарий
4 байта8 байтов8 Байтов8 байтов4 байта4 байта2 байта1 байт1 байт(L) байтов

В первом четырехбайтном поле находятся литеры УС0.
В полях "имя изделия", "имя испытания" и "дата испытания" содержатся символьные строки по восемь байт.
Поля ТН и ТК содержат начальное и, соответственно, конечное время из этого файла и задаются в формате числа с плавающей точкой.
Поля КП (количество паспортов) и L (длина комментария) являются целыми без знака, при значении L равным нулю комментарий отсутствует. В комментарии первые четыре байта в формате числа с плавающей точкой занимает временная поправка, по которой производится пересчет текущего времени.
Структура паспорта объекта приведена в таблице П.1.2.


Таблица П.1.2 – Структура паспорта объекта
Надо так понимать, что в одном файле хранится несколько паспортов - у каждого свой заголовок.
Приведи информацию полностью и еще выложи один файлик .US0 для измывательств общественности.
0
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 18
04.02.2013, 00:41  [ТС] 5
Файл полностью открылся, или то что выложили - это все что открылось?
Суть в том, что сначала идет заголовок один, потом множество паспортов, а потом идет информация.
Файл формата .US0 занимает большой объем памяти. Сюда вряд ли его можно разместить. Постараюсь найти минимального размера и выложить.
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
04.02.2013, 12:02 6
Цитата Сообщение от Omniknight Посмотреть сообщение
Файл полностью открылся, или то что выложили - это все что открылось?
Это все, что было мне открыто. Восстановлением документов было заниматься как-то недосуг.
0
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 18
05.02.2013, 00:26  [ТС] 7
Я скоро в Питер вернусь и выложу все корректно.
0
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 18
15.02.2013, 11:19  [ТС] 8
Структура файлов формата УС0

Файл УС0 предназначен для хранения ТМИ медленноменяющихся параметров и состоит из следующих полей:
– заголовок файла (от 40 до 295 байт);
– таблица паспортов;
– наименование и значения ТМП.
Структура заголовка приведена в таблице П.1.1.

Таблица П.1.1 – Структура заголовка файла УС0
УС0 Имя
изделия Имя
испытания Дата
испытания ТН ТК КП РФ L Комментарий
4
байта 8
байтов 8
Байтов 8
байтов 4
байта 4
байта 2
байта 1
байт 1
байт (L)
байтов

В первом четырехбайтном поле находятся литеры УС0.
В полях "имя изделия", "имя испытания" и "дата испытания" содержатся символьные строки по восемь байт.
Поля ТН и ТК содержат начальное и, соответственно, конечное время из этого файла и задаются в формате числа с плавающей точкой.
Поля КП (количество паспортов) и L (длина комментария) являются целыми без знака, при значении L равным нулю комментарий отсутствует. В комментарии первые четыре байта в формате числа с плавающей точкой занимает временная поправка, по которой производится пересчет текущего времени.
Структура паспорта объекта приведена в таблице П.1.2.


Таблица П.1.2 – Структура паспорта объекта
Имя
объекта Индекс Ф Т А0 А1 Размерность
параметра
12 байтов 2 байта 1 байт 1 байт 4 байта 4 байта 8 байтов

Поля “Имя объекта” и “Размерность параметра” – символьные. Поля “Индекс”, “Ф” (формат объекта) и “Т” (тип объекта) являются целыми без знака.
Поля “А0” и “А1” (масштабные коэффициенты) задаются в формате числа с плавающей точкой.
Существуют следующие форматы объектов:
а) 0 - массив (кадр, строка) неопределенной длины;
б) 1 - длина 1 байт;
в) 2 - длина 2 байта;
г) 4 - длина 4 байта;
д) 8 - длина 8 байтов.
Выделяют несколько типов объектов:
а) 0 - время в формате числа с плавающей точкой;
б) 1 - измеряемый параметр в кодовом виде;
в) 2 - измеряемый параметр в виде масштабированного целого без знака;
г) 3 - измеряемый параметр в виде числа с плавающей точкой;
д) 4 - структура измерительной системы;
е) 5 - элемент структуры;
ж) 6 - время в формате беззнакового целого.
При рассмотрении структуры паспорта необходимо учитывать следующее:
а) масштабные коэффициенты А0 и А1 используются для типов объекта 2 и 3.
б) допустимые сочетания форматов и типов объектов отмечены в таблице П.1.3.

Таблица. П.1.3 – Допустимые сочетания форматов и типов объектов
Формат Тип объекта
0 1 2 3 4 5
0 Х Х Х
1 X X X X
2 X X X X X
4 X X X X X X
8 X

в) имя структуры измерительной системы не должно превышать восьми символов, а имя элемента структуры при этом содержится в виде, представленном в таблице П.1.4.

Таблица. П.1.4 – Вид имени элемента структуры
Имя структуры Номер (адрес) элемента в данной структуре
8 байтов 4 байта

Возможны следующие разновидности файлов:
а) 0 - универсальный файл.
б) 2 - В6Н.
в) 1 - файл с укороченным индексом. В файле с укороченным индексом отличие от файла В6Н заключается лишь в формате представления поля "Индекс"

Таблица. П.1.5– Вид массива файла с укороченным индексом

ХХ Индекс
2 бита 14 битов

Два бита ХХ содержат индикатор длины значения параметра и означают следующее:
– 00 - массив переменной длины;
– 01 - значение занимает 2 байта;
– 10 - значение занимает 4 байта;
– 11 - значение занимает 8 байтов.
В файле с укороченным индексом однобайтные коды не допускаются.
г) 3 - c кодами (признаками) ошибки.

Структура файла УС0 с дешифрованной информацией

Для унификации всей дешифрованной информации в качестве базовой выбрана разновидность файла УС0 - файл с укороченным индексом.
Паспорта объектов имеют следующие поля:
а) формат объекта: 4 - длина четыре байта;
б) типы объекта определяются исходя из значений таблицы 1.3:
1) Т = 1 и Т = 3;
2) для временной информации Т = 0 и Т = 6.
Диапазон изменения индекса от 0 до 65535, т.е. два байта. Значение параметра определенно форматом объекта - четыре байта.
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
16.02.2013, 12:15 9
Omniknight, таблицы в таком виде нечитабельны, хоть картинки выложи что ли...
И выкладывай уже файлик для тестирования - пусть он будет большой, инет сейчас у многих позволяет не беспокоиться за траффик.
0
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 18
18.02.2013, 22:32  [ТС] 10
Вот снимок.
Миниатюры
Преобразование неизвестного формата (.US0) в .txt  
0
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 18
18.02.2013, 22:33  [ТС] 11
http://webfile.ru/6384716
вот ссылка на файл формата УС0
0
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 18
02.03.2013, 10:47  [ТС] 12
http://files.mail.ru/DFC4225EE... ABB39E5DCA
Вот здесь хранится файл в zip.
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
03.03.2013, 11:08 13
Структурки заголовков можно так оформить:
C++
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
struct us0_file_head {
    char us0_letters[4];
    char device_name[8];
    char test_name[8];
    char test_date[8];
    float start_time;
    float end_time;
    unsigned short records_count;
    char RF;
    unsigned char commentary_length;
    char *commentary;
    us0_file_head( ) {
        commentary = NULL;
    }
    ~us0_file_head( ) {
        if ( commentary ) {
            delete[] commentary;
        }
    }
};
struct record_head {
    char object_name[12];
    unsigned short index;
    unsigned char object_format;
    unsigned char object_type;
    float a0, a1;
    char param_dimension[8];
};
Тем не менее, считывать заголовки придется, видимо, вручную, каждое поле по-отдельности, так как разработчики формата не захотели позаботиться о выравнивании структур...

Понятно, в каком виде хранятся заголовки, однако неясно, как хранятся сами данные. Что за массивы неопределенной длины - где задается их размер? Что за "структура измерительной системы"?

Добавлено через 11 часов 52 минуты
Хотя, нет, это я вроде соврал... там же куча однобайтовых массивов и более объемные типы стоят на кратных позициях. Если выравнивание поставить в один байт, то вполне можно читать структуры целиком. Это надо попробовать.
1
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 18
03.03.2013, 11:22  [ТС] 14
Это тема моей выпускной квалификационной работы, хотя программированием никогда я не занимался. Но дипломный руководитель говорил, что нужно файл открывать в посимвольном чтении. Вот какой он дал пример:
C++
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
Чтение данных из файла в поток
 
C++ Examples: 
 
/*
The following example uses a button, a string grid, and an
Open dialog box on a form. When the button is clicked, the
user is prompted for a filename. When the user clicks OK,
the specified file is opened, read into a buffer, and closed.
Then the buffer is displayed in two columns of the string
grid. The first column contains the character values in the
buffer. The second column contains the numeric values of the
characters in the buffer.
*/
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int iFileHandle;
  int iFileLength;
  int iBytesRead;
  char *pszBuffer;
  if (OpenDialog1->Execute())
  {
    try
    {
      iFileHandle = FileOpen(OpenDialog1->FileName, fmOpenRead);
      iFileLength = FileSeek(iFileHandle,0,2);
      FileSeek(iFileHandle,0,0);
      pszBuffer = PChar(AllocMem(iFileLength+1));
//    pszBuffer = new char[iFileLength+1];
      iBytesRead = FileRead(iFileHandle, pszBuffer, iFileLength);
      FileClose(iFileHandle);
      for (int i=0;i<iBytesRead;i++)
      {
        StringGrid1->RowCount += 1;
        StringGrid1->Cells[1][i+1] = pszBuffer[i];
        StringGrid1->Cells[2][i+1] = IntToStr((int)pszBuffer[i]);
      }
      delete [] pszBuffer;
    }
    catch(...)
    {
      Application->MessageBox("Can't perform one of the following file operations: Open, Seek, Read, Close.", "File Error", IDOK);
    }
  }
}
Вложения
Тип файла: txt Чтение Builder.txt (1.4 Кб, 7 просмотров)
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
03.03.2013, 11:32 15
Это просто вычитка файла в массив char и отображение в таблице в виде пар "литера - число". Пример этот не имеет практически никакого отношения к теме.
Если нужно таким же макаром читать эти US0 - милости прошу.

А так нужно больше информации по формату, выбивай ее из препода.
0
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 18
03.03.2013, 11:42  [ТС] 16
А что нужно именно спросить, я в этом деле совсем чайник. Он пример этот дал, но ни какой пользы мне это не принесло. Пример я сделал, но он не рабочий.
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
03.03.2013, 13:14 17
Цитата Сообщение от Omniknight Посмотреть сообщение
А что нужно именно спросить
Цитата Сообщение от BRcr Посмотреть сообщение
Понятно, в каком виде хранятся заголовки, однако неясно, как хранятся сами данные. Что за массивы неопределенной длины - где задается их размер? Что за "структура измерительной системы"?
Сначала идет заголовок файла - его структура и размер описаны. Затем идут заголовки "паспортов" по очереди, структура их описана, количество их задается в заголовке файла. До этого момента все ясно.
Как потом идут данные? Что они из себя представляют и где именно задается размер каждого отдельно взятого куска данных?

Еще у тебя упоминаются различные разновидности файлов данного формата: универсальный, ВН6, с укороченным индексом и с дешифрованной информацией. Выложенный тобой файл к каким относится?
0
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 18
03.03.2013, 13:26  [ТС] 18
В данной программе должен использоваться ус0 с укороченным индексом.

В ус0 после паспортов идут значения параметров с привязкой их к шкале времени. В войсках используется программа на подобие по созданию отчетов, делается в принципе тоже самое, сейчас выложу руководство той программы.

Добавлено через 4 минуты
http://files.mail.ru/205C1C941... 57E16B54A4 здесь файл с руководством оператора.
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
03.03.2013, 13:58 19
Старайся грузить файлы на форум, а-то скоро придет LK и порубит все твои ссылки...
0
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 18
03.03.2013, 14:00  [ТС] 20
Я пробовал, просто нельзя было(( велик размер
0
03.03.2013, 14:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.03.2013, 14:00
Помогаю со студенческими работами здесь

Чтение бинарных файлов неизвестного формата
Доброго времени суток всем. Вот гуляя по просторам интернетов регулярно натыкаюсь на программы...

Считать побайтно файл неизвестного формата зная его структуру
Столкнулся с проблемой, нужно считать файл, у файла не прописано расширение, известна байтовая...

Загрузить в мемо текст из неизвестного .txt с известным path
Привет. Подскажите как залить в Memo файл *.txt в заданной папке. Файл меняет свое название....

Исследование "неизвестного" формата (отрезать начало файла до определённого заголовка)
Здравствуйте! Программированию я учусь собственными силами, о преподаваемом в университетах или на...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru