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

Считывание из двоичного файла - C++

Восстановить пароль Регистрация
 
Лев Борисов
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
03.12.2013, 00:22     Считывание из двоичного файла #1
Ребята, помогите пожалуйста! Из двоичного файла нужно считать числа, отвечающие определённым условиям, например, только положительные. Их число известно!

C++
1
2
3
4
5
6
7
8
9
A=new int[number];      // Создаю массив динамический, number - известное количество чисел
 
ifstream isFile("Counts.txt", ios::binary);
int b;
while(! isFile.eof())               // Потом пытался хотя бы одно вывести, но не удаётся
    {
        isFile.read((char*)&b, sizeof(b));
        cout << b << endl;  
    }
Как исправить код?
Конечно, понятно, что нужен будет цикл for для записи этих целых чисел в массив.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stima
429 / 284 / 16
Регистрация: 22.03.2011
Сообщений: 923
Завершенные тесты: 1
03.12.2013, 02:10     Считывание из двоичного файла #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
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <ctime>
#include <cstdlib>
 
#include <cassert>
 
#include <fstream>
#include <iostream>
 
void randomize()
{
    std::ofstream out("data.txt", std::ofstream::binary);
    if (!out.is_open())
    {
        std::cout << "can't open file" << std::endl;
        exit(1);
    }
 
    srand(time(0));
    int count = rand() % 100;
    for (int i = 0; i < count; ++i)
    {
        int value = rand() % 100 * (rand() % 2 == 0 ? -1 : 1);
        out.write(reinterpret_cast<char*>(&value), sizeof(int));
    }
}
 
int main()
{
    randomize();
 
    std::ifstream in("data.txt", std::ifstream::binary);
    if (!in.is_open())
    {
        std::cout << "can't open file" << std::endl;
        return 1;
    }
 
    in.seekg (0, in.end);
    int length = in.tellg();
    in.seekg (0, in.beg);
 
    //be sure we have right data
    assert((length % sizeof(int)) == 0);
    
    int value = 0;
    int last = length / sizeof(int) - 1;
    for (int i = 0; i < last; ++i)
    {
        in.read(reinterpret_cast<char*>(&value), sizeof(int));
 
        if (value > 0)
        {
            std::cout << value << " ";
        }
    }
    
    in.read(reinterpret_cast<char*>(&value), sizeof(int));
    if (value > 0)
    {
        std::cout << value << std::endl;
    }
 
    return 0;
}
Лев Борисов
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
03.12.2013, 02:27  [ТС]     Считывание из двоичного файла #3
Спасибо большое! Я тут уже сам разобрался, но всё равно очень благодарен!
Возник другой вопрос: можно ли сортировать не только положительные числа, но и отрицательные при выводе в файл следующим образом
C++
1
2
3
4
5
6
7
while (cin >> count) {
        if ( (count > 0) && (count%5 == 0) )
            number++;
        outFile.seekp((count-1)*sizeof(count));
        outFile.write((char*)&count, sizeof(count));                                
    }
    outFile.close();
stima
429 / 284 / 16
Регистрация: 22.03.2011
Сообщений: 923
Завершенные тесты: 1
03.12.2013, 02:35     Считывание из двоичного файла #4
Вопрос не понятен, что Вы вкладуете в определение сортировать?

Привидите пример (например))
ввод: -1 -2 3 1 2 3 -5
вывод: -5 -2 -1 1 2 3 3
Лев Борисов
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
03.12.2013, 02:40  [ТС]     Считывание из двоичного файла #5
Да, как в примере) - сортировать в порядке возрастания
stima
429 / 284 / 16
Регистрация: 22.03.2011
Сообщений: 923
Завершенные тесты: 1
03.12.2013, 03:00     Считывание из двоичного файла #6
Ваши действия:

1. Открыть файл.
2. Считать данные в массив (возможно std::vector, если разрешенно использовать по условию).
3. Закрыть файл.
4. Отсортировать массив, если разрешено - использовать для этого std::sort, иначе написать сортировку самому (проще всего bubble sort).
5. Открыть файл.
6. Презаписать данные в файл.
7. Закрыть файл.
8. Профит.

п.с. Можете взять за основу мой код, там только добавить буффер для хранения и сортировку.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2013, 15:18     Считывание из двоичного файла
Еще ссылки по теме:

C++ Создание двоичного файла на С++
использование двоичного файла C++
C++ Запись двоичного файла

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

Или воспользуйтесь поиском по форуму:
Лев Борисов
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
03.12.2013, 15:18  [ТС]     Считывание из двоичного файла #7
Да, именно так я сделал, только без использования вектора.

Просто хотел узнать, есть ли какая-то схожая с
C++
1
outFile.seekp((count-1)*sizeof(count));
функция, которая сортирует в порядке возрастания не только положительные вводимые числа, но и отрицательные - тогда бы можно было обойтись без сортировки пузырьком, но всё равно спасибо!
Yandex
Объявления
03.12.2013, 15:18     Считывание из двоичного файла
Ответ Создать тему
Опции темы

Текущее время: 05:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru