0 / 0 / 0
Регистрация: 19.01.2018
Сообщений: 18
1

Двоичные файлы, ввод-вывод

22.01.2018, 16:11. Показов 3084. Ответов 1

Здравствуйте. Столкнулся с проблемой ввода-вывода в двоичный файл.

Вот само задание:
1. С помощью текстового редактора создать файл на диске, содержащий в первой строке два натуральных числа N и M – количество строк и столбцов матрицы соответственно, далее следует N строк, состоящих из M целых чисел – элементы матрицы. Числа в файле разделены пробелами.
2. Разработать, отладить, продемонстрировать и защитить преподавателю укрупненную графическую схему алгоритма и программу, которая создает двоичный файл на основе текстового файла, записывая в него сначала два целых числа N и M, а затем элементы матрицы, считанные из текстового файла. В качестве буфера при вводе-выводе использовать одномерный массив размерностью M. Вывести содержимое двоичного файла на монитор. Двумерные массивы не создавать.
и т.д.


Можно ли записать в двоичный файл отдельные числа(в коде это 'n' и 'm')?
Как перейти на новую строку в двоичном файле?(Я попытался что то сделать (строка 32), но боюсь .. дело плохо)
Как прочитать из двоичного файла? (Пытался идти через read и getline, но не получается... (конкретней в стр. 36-37 листинга)


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
#define _CRT_SECURE_NO_WARNINGS 
#include <iostream>
#include <fstream>
#include <clocale>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    ifstream in("tfile.txt");
    if (!in.is_open())
    {
        cout << "Ошибка! Невозможно открыть файл!" << endl;
        system("pause");
        return 1;
    }
    ofstream out("dfile.dos", ios::in | ios::out | ios::trunc | ios::binary);
    int n, m, j=0;
    in >> n >> m;
    cout << n << " " << m << endl;
    int *buf = new int[m];
    do //  Здесь происходит чтение поэлементно из текстового файла с последующей записью массива в двоичный файл
    {
        for (int i = 0; i < m; i++)
        {
            in >> buf[i];
            cout << buf[i] << " ";
        }
        memset(buf, 0, sizeof(int)*m);
        cout << endl;
        out.write((char*)buf, sizeof(int));
        out << '\n';
        j++;
    } while (j < n);
    memset(buf, 0, sizeof(int)*m);
//  out.read();         Хотел использовать что-то из этого, но пишет, что 
//  out.getline();        class std::basic_ofstream<char_traits<char>>" не содержит члена getline()
 
    
    in.close();
    out.close();
    system("pause");
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2018, 16:11
Ответы с готовыми решениями:

Двоичные файлы, ввод-вывод
Здравствуйте. При компиляции программы вызывается исключение со след. текстом: Вызвано исключение...

Файловый ввод-вывод.Текстовые файлы
Добрый день! Создать текстовый файл, содержащий символьные значения, следующего формата 'a' '5'...

Вывод и ввод значений через файлы
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &quot;StdAfx.h&quot; using namespace std; int main() {...

Работа с файлами, ввод и вывод, многостроковые файлы
Есть проблема. Я пытался создать такую программу, смыслом которой является: вывод данных из...

1
2479 / 1906 / 951
Регистрация: 21.12.2010
Сообщений: 3,473
Записей в блоге: 10
22.01.2018, 18:58 2
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
#include <iostream>
#include <fstream>
#include <cstdlib>
 
int main()
{
    std::ifstream ifst("in.txt");
    if (!ifst.is_open())
    {
        std::cerr << "Unable to open input text file";
        exit(1);
    }
    std::ofstream ofs("bf.bin", std::ios::binary);
    int n, m;
    ifst >> n >> m;
    int* buf = new int[m];
    ofs.write(reinterpret_cast<char*>(&n), sizeof(int) / sizeof(char));
    ofs.write(reinterpret_cast<char*>(&m), sizeof(int) / sizeof(char));
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < m; ++j)
        {
            ifst >> buf[j];
        }
        ofs.write(reinterpret_cast<char*>(buf), m * sizeof(int) / sizeof(char));
    }
    ifst.close();
    ofs.clear();
    ofs.close();
    std::ifstream ifsb("bf.bin", std::ios::binary);
    if (!ifsb.is_open())
    {
        std::cerr << "Unable to open input binary file";
        exit(2);
    }
    ifsb.read(reinterpret_cast<char*>(buf), 2 * sizeof(int) / sizeof(char));
    std::cout << buf[0] << "  " << buf[1] << std::endl;
    for (int i = 0; i < n; ++i)
    {
        ifsb.read(reinterpret_cast<char*>(buf), m * sizeof(int) / sizeof(char));
        for (int j = 0; j < m; ++j)
        {
            std::cout << buf[j] << "  ";
        }
        std::cout << std::endl;
    }
    ifsb.close();
    delete[] buf;
    buf = nullptr;
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.01.2018, 18:58
Помогаю со студенческими работами здесь

Ввод вывод из/в файлы(и еще пару вопросов)
Знаю парочку способов ввести/вывести данные из файла не знаю какой из них какой! :) В общем я...

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

Двоичные файлы
Здравствуйте. Кому не сложно, помогите, пожалуйста, решить задачу. Не забуду сказать &quot;спасибо&quot;. ...

Двоичные файлы
Работа с двоичными файлами. Создать файл, состоящий из n вещественных чисел. Вывести на экран все...

двоичные файлы
дан файл целых чисел. Создать два новых файла, первый из которых содержит положительные числа из...

Двоичные файлы
У меня есть код программы работающий с текстовыми файлами, #include &lt;iostream&gt; #include &lt;conio.h&gt;...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru