Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Jaydens_Blues
0 / 0 / 0
Регистрация: 15.10.2014
Сообщений: 30
#1

Чтение файла с данными типа real. Тип real в билдере или как его "обойти"? - C++

26.10.2015, 09:28. Просмотров 853. Ответов 41
Метки нет (Все метки)

Читаю файл в структуру,

C++
1
2
3
4
5
6
7
8
9
double Fdat;
 
struct STR
       {
        ...
 
       } rec
 
read( Fdat,(char *)&rec,sizeof(rec));
но данные на выходе получаются, вежливо говоря, не совсем те, которые должны. Описание струкруты самого файла у меня есть. Подозреваю, что проблема в том, что в структуре читаемого файла присутствует тип Real, 6 байт, а в билдере, как я понял, нет этого типа, есть float или double по 4 и 8 байт соответственно. Помимо этого, ещё в файле есть IUNT и UDINT, я их объявляю как unsigned int и unsigned long int, и это верно, если не ошибаюсь.
Читаю другие файлы другой структуры, где нет вещественного типа (и Fdat как int идёт), и всё как надо читается.
Верно ли я понял причину (real) и что можно сделать, какой тип объявить вместо real? Если все же double, то как читать 6 байт? Пробовал сделать так

C++
1
read( Fdat,(char *)&rec,sizeof(rec)-(sizeof(float))/2); // типа отнимаем 2 лишних байта
, но результата положительного это не дало. Помогите, пожалуйста. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2015, 09:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение файла с данными типа real. Тип real в билдере или как его "обойти"? (C++):

При компиляции ошибка: C2228: left of ".real",".imag" must have struct/class/union - C++
Помогите, пожалуйста! Компилирую в VS2010... Ошибка: C2228: left of ".real",".imag" must have struct/class/union... Почему возникает эта...

Given real numbers a, b, c. Find if a quadratic inequality ах2 + bx + с = 0 has real roots. If it does, output them - C++
ВОТ задача помогите решить Given real numbers a, b, c, where a is not 0. Find if a quadratic inequality ах2 + bx + с = 0 has real...

Дано: a:array[1…n] of real;p:real;k:integer;(a[1]<=a[2]<=⋯<=a[n],0<k≤n). - C++
Дано: a:array of real;p:real;k:integer;(a&lt;=a&lt;=⋯&lt;=a,0&lt;k≤n). Удалить из a элемент с номером k (т.е. a) и вставить элемент, равный p, так,...

Error C2679: бинарный "<<": не найден оператор, принимающий правый операнд типа "std::string" (или приемлемое - C++
эмулятор работы банкомата Например #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;time.h&gt; #include...

"Чудеса типа float" или "Куда девалась информация?" - C++
кусок кода: int k=100; float sum=0; for (int i=; i&lt;k; i++) for(int j=1; j&lt;i; j++) sum+=1/(2*j+i) ...

Определить тип данных "Запись", имеющий поля "Фамилия", "Пол", "Зарплата" - C++
определить тип данных запись имеющий поля фамилия пол зарплата. определить массив из 10 записей. в программе ввести в массив данные и...

41
nmcf
5349 / 4669 / 1562
Регистрация: 14.04.2014
Сообщений: 18,605
27.10.2015, 12:24 #31
В файле просто структуры, заголовка нет? Дамп в любом hex-редакторе сделай, или в том же Far открой в Hex и покажи.
0
Fulcrum_013
Нарушитель
698 / 762 / 74
Регистрация: 14.12.2014
Сообщений: 6,034
Завершенные тесты: 3
28.10.2015, 04:13 #32
Цитата Сообщение от Jaydens_Blues Посмотреть сообщение
Другие файлы, с которыми нет проблем, как раз используютTDateTime, не использует вещественные типы и т.д
TDateTime это double с набором операторов преобразования. Целая часть - дни, дробная время суток. Он только в дельфе появился. Если в них есть TDateTime значит делалась прога на дельфе. А в ней real=double, и вообще все типы аналогичны билдеровским. Но есть разница в работе с файлами. в дельфе/паскале файлы типизированы но типу записи (record аналог struct в с) и могут выравнивание как всей записи так и каждого поля обрабатывать совсем не так как запись одним куском через fread/fwrite.
0
Jaydens_Blues
0 / 0 / 0
Регистрация: 15.10.2014
Сообщений: 30
28.10.2015, 06:50  [ТС] #33
Цитата Сообщение от nmcf Посмотреть сообщение
В файле просто структуры, заголовка нет? Дамп в любом hex-редакторе сделай, или в том же Far открой в Hex и покажи.
Во всяком случае, про него мне ничего не сказали. А начало выглядит как-то так

Чтение файла с данными типа real. Тип real в билдере или как его "обойти"?
0
Fulcrum_013
Нарушитель
698 / 762 / 74
Регистрация: 14.12.2014
Сообщений: 6,034
Завершенные тесты: 3
28.10.2015, 07:13 #34
Цитата Сообщение от Jaydens_Blues Посмотреть сообщение
Во всяком случае, про него мне ничего не сказали. А начало выглядит как-то так
Если там нет заголовка, то что там делают текстовые данные?
0
Jaydens_Blues
0 / 0 / 0
Регистрация: 15.10.2014
Сообщений: 30
28.10.2015, 07:23  [ТС] #35
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Если там нет заголовка, то что там делают текстовые данные?
Получается, он есть? Мне его надо как-то "пропустить" и читать уже после него?
0
Fulcrum_013
Нарушитель
698 / 762 / 74
Регистрация: 14.12.2014
Сообщений: 6,034
Завершенные тесты: 3
28.10.2015, 07:38 #36
Цитата Сообщение от Jaydens_Blues Посмотреть сообщение
Мне его надо как-то "пропустить" и читать уже после него?
Если там есть заголовок то в нем скорее всего есть и откуда начинать читать. А вполне возможно и формат записи, на что наталкивает текст, который по всей видимости является именами полей структуры.
0
Jaydens_Blues
0 / 0 / 0
Регистрация: 15.10.2014
Сообщений: 30
28.10.2015, 07:46  [ТС] #37
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Если там есть заголовок то в нем скорее всего есть и откуда начинать читать. А вполне возможно и формат записи, на что наталкивает текст, который по всей видимости является именами полей структуры.
Да, там все поля структуры, даже каждый элемент data есть, data[0], data[1] и т.д. А вот дальше уже периодически повторяющаяся информация, которая уже не так понятна, вернее, совсем непонятна. Видимо, это и есть сами данные
0
Fulcrum_013
Нарушитель
698 / 762 / 74
Регистрация: 14.12.2014
Сообщений: 6,034
Завершенные тесты: 3
28.10.2015, 08:01 #38
Цитата Сообщение от Jaydens_Blues Посмотреть сообщение
которая уже не так понятна, вернее, совсем непонятна. Видимо, это и есть сами данные
А в заголовке соответственно их описание. как вариант формат длина и смещение в записи.
0
Jaydens_Blues
0 / 0 / 0
Регистрация: 15.10.2014
Сообщений: 30
28.10.2015, 08:06  [ТС] #39
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А в заголовке соответственно их описание. как вариант формат длина и смещение в записи.
В принципе есть какие-то варианты, как это все верно считать? Или это "читай то, сам не знаешь что" и без авторов программы не обойтись?
0
Fulcrum_013
Нарушитель
698 / 762 / 74
Регистрация: 14.12.2014
Сообщений: 6,034
Завершенные тесты: 3
28.10.2015, 08:17 #40
Цитата Сообщение от Jaydens_Blues Посмотреть сообщение
Или это "читай то, сам не знаешь что"
Ну если есть заголовок то что есть это "сам не знаешь что" выяснить гораздо проще. Естественно с описанием формата от авторов вообще было бы просто.
0
Jaydens_Blues
0 / 0 / 0
Регистрация: 15.10.2014
Сообщений: 30
28.10.2015, 08:26  [ТС] #41
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Ну если есть заголовок то что есть это "сам не знаешь что" выяснить гораздо проще
Только вот с заголовком-то что делать? Как его прочитать, чтобы хоть что-то понять из него?
0
nmcf
5349 / 4669 / 1562
Регистрация: 14.04.2014
Сообщений: 18,605
28.10.2015, 17:45 #42
Загрузи сюда весь файл, если он не секретный.
0
28.10.2015, 17:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2015, 17:45
Привет! Вот еще темы с ответами:

Массив шаблонов или как обратиться к элементам разного типа, хранящиеся в одном "списке" по индексу - C++
Собственно, вот такой вот вопрос. Очень нужно решение. Спасибо.

Класс "одномерный массив" и методы для работы с его данными - C++
Описать класс одномерный массив, содержащий его элементы и их количество, а так же методы: вывода всех значений на экран, нахождения...

Error: значение типа "const char" нельзя присвоить сущности типа "double" - C++
#include &lt;iostream&gt; #include &lt;iomanip&gt;// using namespace std; void main(void) { const int k=5; int a=10; unsigned int...

Значение типа "void" нельзя использовать для инициализации сущности типа "int" - C++
Не понимаю, почему компилятор считает, что s.pop() это значение типа &quot;void&quot;.. он же вернет этот удаляемый элемент? Как исправить? void...


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

Или воспользуйтесь поиском по форуму:
42
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru