Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 09.12.2014
Сообщений: 5

Получение данных из .dat и сохранение в .txt

12.12.2014, 22:32. Показов 3201. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Существует бинарный файл с N вещественными числами (в начале файла стоит целое число N).
Необходимо вывести его на экран и сохранить в текстовом файле. Вот мой исходник.
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
#include "stdafx.h"
#include <iostream> 
#include <conio.h> 
#include <clocale> 
#include <iomanip> 
#include <fstream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_CTYPE, "");
     int  n, i;
     double *a;
     fstream g,g1;
    
     g.open("C:\\C++\\3.dat", ios::in|ios::out|ios::binary);
     g >> n;
     cout << n << endl;
     a = new double[n];
     for (i = 0; i < n; i++)
     {
         g >> a[i];
         cout << a[i] << endl;
     }
     g.close();
     delete[]a;
    _getch();
    return 0;
}
Проблема вот в чем: я написал код для создания двоичного файла и вбил данные туда. Но извлечь и записать в текстовый файл не выходит. Помогите найти ошибку или объяснить в чем причина косяка. Спасибо заранее.
P.S. Не стал писать запись в .txt файл, так как содержимое 3.dat не выводит в консоль
P.P.S. у меня VS Express 2013

Добавлено через 6 минут
На всякий случай показываю как бинарник создавал.
C++
1
2
3
4
5
6
7
8
9
10
11
12
 FILE *f;
 
     fopen_s(&f, "C:\\C++\\3.dat", "wb+");
     cout << "n=";
     cin >> n;
     fwrite(&n, sizeof(int), 1, f);
     for (i = 0; i < n; i++)
     {
         cin >> a;
         fwrite(&a, sizeof(int), 1, f);
     }
     fclose(f);
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.12.2014, 22:32
Ответы с готовыми решениями:

Сохранение и загрузка данных из ListView в txt файл
Добрый вечер! Возникла проблема при сохранении данных таблицы компонента ListView в txt файл и ,соответственно, при загрузке из txt в...

Получение данных с Com порта и сохранение их в txt
Доброго времени суток! Мне необходимо получить данные от устройства и сохранить их в txt файл. Написал вот такой код: using System; ...

Найти дробные значения y(x) и g(x) из файлов Y.DAT.txt и G.DAT.txt

8
10 / 10 / 5
Регистрация: 10.12.2014
Сообщений: 60
12.12.2014, 22:37
В коде создания файла ошибка в 10-ой строке:

fwrite(&a, sizeof(int), 1, f);

тип int, а должен быть double, судя по тому, что в задании и в первом коде.
0
0 / 0 / 0
Регистрация: 09.12.2014
Сообщений: 5
12.12.2014, 22:44  [ТС]
Мой косяк, не заметил. Все равно пишет ошибку.
0
10 / 10 / 5
Регистрация: 10.12.2014
Сообщений: 60
12.12.2014, 22:52
Попробуйте строку 22 переписать иначе:

C++
1
2
3
4
5
6
double dd; //где-нибудь выше цикла объявите
 
//в цикле
 
g>>d;
a[i] =d;
0
0 / 0 / 0
Регистрация: 09.12.2014
Сообщений: 5
12.12.2014, 23:00  [ТС]
Увы, тоже самое. Изменение на формат .txt не помагает так же. Но все равно спасибо.


0
10 / 10 / 5
Регистрация: 10.12.2014
Сообщений: 60
12.12.2014, 23:05
Ну, вот теперь понятно стало. Объявите n как unsigned int в обоих кодах. При чтении его из файла типа int оно может принимать отрицательное значение.
0
0 / 0 / 0
Регистрация: 09.12.2014
Сообщений: 5
12.12.2014, 23:11  [ТС]
Николай, опять же нет))) ну да ладно, буду искать на форумах дальше.
0
10 / 10 / 5
Регистрация: 10.12.2014
Сообщений: 60
12.12.2014, 23:16
Конечно, нет, потому что вы используете разные потоки создания бинарных файлов. Сделайте одинаково.

вот как записывает fwrite, к примеру:
Internally, the function interprets the block pointed by ptr as if it was an array of (size*count) elements of type unsigned char, and writes them sequentially to stream as if fputc was called for each byte.
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
12.12.2014, 23:57
Лучший ответ Сообщение было отмечено TechoMan как решение

Решение

TechoMan, Вам придется перебить файл данных, т.к. он криво записан
вот пример для работы с бинарными файлами
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
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
#include <iostream>
#include <fstream>
#include <string>
#include <cstdint>
 
using namespace std;
 
 
inline const char* cast_const(const void* ptr) {
    return static_cast<const char *>(ptr);
}
inline char* cast(void* ptr) {
    return static_cast<char *>(ptr);
}
 
int main_writer() {
    ofstream out;
    string fname;
    uint32_t sz;
    double n;
 
    cout << "enter file name: ";
    cin >> fname;
    out.open(fname.c_str(), ios::binary | ios::out);
    if(false == out.is_open()) {
        cerr << "Can't open " << fname << " for write" << endl;
        return -1;
    }
    cout << "enter size: ";
    cin >> sz;
 
    out.write(cast_const(&sz), sizeof(sz));
    while(sz) {
        cin >> n;
        out.write(cast_const(&n), sizeof(n));
        --sz;
    }
 
    return 0;
}
 
int main_reader() {
    ifstream in;
    string fname;
    uint32_t sz;
    double n;
 
    cout << "enter file name: ";
    cin >> fname;
    in.open(fname.c_str(), ios::binary | ios::in);
    if(false == in.is_open()) {
        cerr << "Can't open " << fname << " for read" << endl;
        return -1;
    }
 
    size_t count;
    count = in.readsome(cast(&sz), sizeof(sz));
    if(count != sizeof(sz)) {
        cerr << "error while read" << endl;
        return -2;
    }
    while(sz) {
        count = in.readsome(cast(&n), sizeof(n));
        if(count != sizeof(sz)) {
            cerr << "error while read" << endl;
            return -2;
        }
        cout << n;
        --sz;
    }
    return 0;
}
 
int main() {
    return 0;
}
Добавлено через 8 минут
в 64 строке ошибка
нужно
C++
1
if(count != sizeof(n)) {
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.12.2014, 23:57
Помогаю со студенческими работами здесь

Формы. Сохранение в txt и получение
Подскажите, как чтобы данные формы сохранялись в .txt файле, а потом их можно было вывести списком на другой странице. Вывод списка...

Загрузка данных из бинарных файлов и сохранение построчно в .dat файл
Добрый день. Помогите разобраться как написать программу, пожалуйста. У меня есть готовая программа, которая обрезает заголовки у wav...

Сохранение данных с ListView в .txt и загрузка с .txt
Сохранение данных с ListView в .txt и загрузка с .txt Помогите.

Дано 2 файла вещественных чисел а1.dat и а2.dat. В каком из двух данных файлов больше отрицательных элементов
Ввод чисел в файлы работает, а дальше нет. Подскажите как исправить и где... Очень прошу! Задание:Дано 2 файла вещественных чисел...

Сохранение данных в txt
Мне нужно на страницу добавить 2 текстовых поля и кнопку, а в HTML я полный 0. В первое поле вводится имя (пример: Andrey), во-второе...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru