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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2007, 13:43   #1
malevich
Пользователь
 
Аватар для malevich
 
Регистрация: 01.11.2006
Сообщений: 63
По умолчанию конвертер

Подскажите пожалуста как работать с бинарными файлами. Буду признателен если вдобавок дадите какие-нибудь ссылки по этой теме. Задача у меня такая: на огневом испытании двигателя ЖРД РН "Ангара" идет запись параметров в бинарный файл (*.dat). Мне надо из этих иероглифов получить реальные числа.
Как это делается я нигде не нашел. Я прикрепил структуру бинарного файла , подскажите, как его конвертировать в обычный текстовый формат?

Заранее очень признателен Вам...
Вложения
Тип файла: doc DATFormat.doc (45.5 Кб, 27 просмотров)
malevich вне форума Ответить с цитированием
Старый 27.01.2007, 16:05   #2
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

реальные испытания?
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 27.01.2007, 16:36   #3
malevich
Пользователь
 
Аватар для malevich
 
Регистрация: 01.11.2006
Сообщений: 63
По умолчанию

а как иначе по вашему отработать двигатель? Про "НПО Энергомаш" надеюсь знаеете?
так как работать с бинарными файлами???
malevich вне форума Ответить с цитированием
Старый 10.02.2007, 23:18   #4
malevich
Пользователь
 
Аватар для malevich
 
Регистрация: 01.11.2006
Сообщений: 63
По умолчанию

есть бинарный файл (предположительно компрессированный) такого содержания:
Џ*  (‡@ @ Ј*  (‡@ @ ђ)  (‡@ @
написал прогу на Fortran которая преобразует эту последовательность байтов в числа:
*********************************** *******************
real*4 r
real*8 t(30000), p(30000,100), tb, te
integer*4 k(100),i,rr
character*3 ts/' t'/
character*7 c(100)
open( 5, file = 'tp.bin', recl=1, form='binary', access='direct',
& mode='read' ) ! Вход-Файл данных испытаний
do i=1,100
read (5,rec=i) r !!! i - порядковый номер байта
write(111,'(1x,1pd15.8)') dble(r)
enddo ! i
end
*********************************** **********************
здесь за конвертирование отвечает параметр rec=i процедуры read.
Результат работы проги такой:
1.52671468D-41
9.40400189D-38
1.83670992D-40
7.17464814D-43
2.80259693D-45
7.10542736D-15
-1.26389153D-34
***************
*************** и т.д.
Вопрос: как мне такое же преобразование сделать средствами Delphi???
неделю бьюсь, ничего не выходит! как надо обращаться к файлу?
Помогите плиз.....
malevich вне форума Ответить с цитированием
Старый 10.02.2007, 23:39   #5
Lynx
Пользователь
 
Аватар для Lynx
 
Регистрация: 09.02.2007
Сообщений: 49
По умолчанию

считывай Blockread-ом в файл, как у тебя показано в *.doc, да и по-моему, тип *.dat это всего лишь бинар без всякого сжатия, т.е. как есть... сорри за тафталогию
Свой среди чужих
Чужой среди своих

Последний раз редактировалось Lynx; 10.02.2007 в 23:47.
Lynx вне форума Ответить с цитированием
Старый 11.02.2007, 00:12   #6
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Эх, если бы я хоть чуть-чуть знал Фортран... Напиши что именно должна делать твоя программаю Тогда будет больше шансов что тебе кто то ответит.
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 13.02.2007, 00:41   #7
malevich
Пользователь
 
Аватар для malevich
 
Регистрация: 01.11.2006
Сообщений: 63
По умолчанию

Прога должна считать (для простоты) 1 байт и конвертировать его в текст. Этот байт имеет тип integer (после конвертирования должно получится 10895)! как это в делфи сделать??
Я прикреплю бинарный файл (точнее его часть, а то много получится).

Если кому-то станет интересна данная задачя, или захочет мне помочь, то попробуйте считать первый байт и преобразовать его так чтобы получилось 10895 или дайте направляюшие советы подсказки, буду очень рад всему

Последний раз редактировалось malevich; 13.02.2007 в 00:53. Причина: 6456
malevich вне форума Ответить с цитированием
Старый 13.02.2007, 01:08   #8
malevich
Пользователь
 
Аватар для malevich
 
Регистрация: 01.11.2006
Сообщений: 63
По умолчанию

http://getfile.biz/62085
а вот и файл

To AVer: за сайт спасибо!

Последний раз редактировалось malevich; 13.02.2007 в 01:11.
malevich вне форума Ответить с цитированием
Старый 13.02.2007, 09:06   #9
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Мда...
1) Число 10895 - никогда не поместится в 1 байт
2) Запускаем калькулятор, вводим 10895 и преобразуем в 16-ричную систему, получаем 2A8F.
3) Открываем HEX-редактором Ваш файл, смотрим первые 2 байта, они равны... 8F2A - т.е. это то самое число, но записанное обратной записью (байты местами поменяли), вот и всё

P.S.: спасибо за отзыв

Последний раз редактировалось zetrix; 13.02.2007 в 14:38.
zetrix вне форума Ответить с цитированием
Старый 13.02.2007, 21:29   #10
malevich
Пользователь
 
Аватар для malevich
 
Регистрация: 01.11.2006
Сообщений: 63
По умолчанию

как переводить из одной системы исчисления в другую я вроде бы кое-как знаю:
Код HTML:
function DecToBase( Decimal: LongInt; const Base: Byte): String;
const
Symbols: String[16] = '0123456789ABCDEF';
var
scratch: String;
remainder: Byte;
 begin
     scratch := '';
       repeat
            remainder := Decimal mod Base; // îñòàòîê äåëåíèÿ
            scratch := Symbols[remainder + 1] + scratch;
            Decimal := Decimal div Base;
        until ( Decimal = 0 );
            Result := scratch;
 end;
1. Меня интересует как файл перевести, допустим в 16-ю систему исчисления, как он отображается в HEX-редакторе. (открывать НЕХ-ом,копировать и вставлять - это не дело!!!) Процедуры такие имеются вообще?

2. Вопрос конечно ламерский, но всеже дайте совет если я ошибаюсь.
В файле есть числа типа REAL, как правило занимают 2байта. Но ведь переводить из одной системы исчисления в другую мы можем только целые числа (выходит при конвертировании они округляются???) куда девался тогда разделитель??? Идея такая: если число занимает 2 байта, то:
1-й байт это целая часть
2-й байт это дробная часть

я правильно рассуждаю? Если нет то как тогда отследить разделитель?
malevich вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конвертер из png в jpg или gif или bmp Квэнди Мультимедиа в Delphi 8 04.10.2011 22:26
Сделать Конвертер vizor9 Свободное общение 11 01.10.2009 00:57
Конвертер bik => avi Altera Софт 6 11.05.2008 15:01
конвертер из *.icon в *.bmp KORT Свободное общение 2 21.10.2007 22:32
конвертер KORT Свободное общение 3 27.08.2007 01:47