Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
[progeR]
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 614
Завершенные тесты: 1
#1

Чтение бинарного файла - C++

29.11.2014, 13:49. Просмотров 508. Ответов 5
Метки нет (Все метки)

Добрый

Добавлено через 6 минут
Добрый день.
Не получается прочитать бин. файл.
Суть какая: есть файл, в котором записаны дубл числа. Друг за другом. Их нужно прочитать ну и выполнить кое-какие действия (поиск максимумов).
Вот код:
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
77
78
79
80
81
82
83
84
85
86
#include <cmath>
#include <fstream>
#include <string.h>
#include <cstdio>
#include <iostream>
#include <sstream>
 
using namespace std;
 
ifstream in; ofstream out;
double tempValue;
char *value;
char *path;
int N, radius = 25;
struct data
{
    double value;
    int index;
} topMax, bottomMax;
 
void compareMaximum(data &max ,const int i)
{   
    //in.read((char *) &tempValue,sizeof(double));
        in.read(reinterpret_cast<char*>(&tempValue),sizeof(double));
    cout << tempValue << endl;
    if(tempValue <= max.value) return;
    max.value = tempValue;
    max.index = i;
}
void writeData()
{
    cout << topMax.index%N << " " << ceil(topMax.index/N) << " " << topMax.value << " " << bottomMax.index%N << " " << ceil(bottomMax.index/N) << " " << bottomMax.value << endl; //out
}
void searchMaximum(data &max)
{
    in.seekg(max.index-radius*(N+1)*8); int i, j;
    for(i = -radius, max.value = 0; i <= radius; i++) 
    {
        for(j = -radius; j <= radius; j++) compareMaximum(max, j);
        in.seekg((N-2*radius)*8, in.cur);
    }
}
int main(int argc, char **argv) //путь, где ищем, шаг, начало
{
    stringstream stream;
    stream << "../" << argv[1];
    string homeDir = stream.str();
    string filename = homeDir;
    string pattern = homeDir;
    
    if(atoi(argv[2]) == 1)
    {
        filename += "/fluenceLocalMax.txt";
        pattern += "/Fluence/fluence%06d.bin";
    }
    else if(atoi(argv[2]) == 2)
    {
        filename += "/plasmaLocalMax.txt";
        pattern += "/Max_Plasma/plasma%06d.bin";
    }
    else return 1;
    int step = atoi(argv[3]);
    int currentStep = (argv[4] != NULL) ? atoi(argv[4]) : 0;
 
    path = new char[pattern.size()];
    sprintf(path, pattern.c_str(), currentStep);
 
    ifstream in(path, ios::binary);
    if(!in.is_open()) return 2;
    
    ofstream out(filename.c_str());
    if(!out.is_open()) return 3;
 
    in.seekg(0, ios::end);
    N = sqrt(in.tellg()/8);
    in.seekg(0, ios::beg);
    int i, j, k; value  = new char[sizeof(double)];
    //cout << N;
    cout << "Поиск максимумов в начальном файле" << endl;
    for(i = 0,topMax.value = 0; i < N*N/2; i++) compareMaximum(topMax, i);
    for(i = N*N/2,bottomMax.value = 0; i < N*N; i++) compareMaximum(bottomMax, i);
    in.close();
    out << "Abscissa" << " " << "Ordinate" << " " << "TopMax" << "Abscissa" << " " << "Ordinate" << " " << "BottomMax" << endl;
    writeData();
    return 0;
}
Вся загвоздка в функции compareMaximum. Не считывает она числа! Вместо чисел выдает 0.
Думал входной файл левый. Написал код считывания файл на PHP. Все считывает, числа как числа.
Тут же естественно нет... Короче, помогите, плз, этот язык уже начинает парить...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2014, 13:49
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Чтение бинарного файла (C++):

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется
Формат файла состоит из 3 структур и одной переменной. Подробное описание...

Чтение из бинарного файла
Уважаемые форумчане! Прошу помочь мне с чтением из бинарного файла. Проблема...

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

Чтение бинарного файла
подскажите пожалуйста как можно из любого файла(*.bmp, *.mp3, *.avi и т.д.)...

Чтение бинарного файла
Привет! Необходима помощь в таком вопросе - Создал программу для хранения...

Чтение из бинарного файла
Здравствуйте. Столкнулся с проблемой, не до конца понимаю от чего она...

5
zss
Модератор
Эксперт С++
6959 / 6521 / 4139
Регистрация: 18.12.2011
Сообщений: 17,209
Завершенные тесты: 1
29.11.2014, 13:55 #2
А писали в этот файл как?
C++
1
out.write((char *) &tempValue,sizeof(double));
???????????????????????????
0
[progeR]
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 614
Завершенные тесты: 1
29.11.2014, 14:22  [ТС] #3
Цитата Сообщение от zss Посмотреть сообщение
А писали в этот файл как?
Код C++
1
out.write((char *) &tempValue,sizeof(double));
???????????????????????????
Дык какая разница, как писал. На PHP файл же считывается.
И мне непонятно: почему тут функция write, когда нужна функция read? Или теперь писать это read, а читать - это write?
И почему out, а не in?
Мне прочитать надо, а не записать.
0
zss
Модератор
Эксперт С++
6959 / 6521 / 4139
Регистрация: 18.12.2011
Сообщений: 17,209
Завершенные тесты: 1
29.11.2014, 14:50 #4
Я к тому, что может Ваш файл все же содержит буквы, а не бинарный код?
Если в файл out писали оператором бинарной записи
out.write((char *) &tempValue,sizeof(double));
то должно читаться корректно.
0
[progeR]
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 614
Завершенные тесты: 1
29.11.2014, 14:56  [ТС] #5
Нет, никаких букв, только double.
В смысле читаться корректно? Имеется ввиду, то код - он корректный и должен читать?
0
zss
Модератор
Эксперт С++
6959 / 6521 / 4139
Регистрация: 18.12.2011
Сообщений: 17,209
Завершенные тесты: 1
29.11.2014, 15:48 #6
Должен
0
29.11.2014, 15:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2014, 15:48
Привет! Вот еще темы с решениями:

Чтение бинарного файла
Здравствуйте. Есть код чтения бинарного файла: FILE *f; string tmp; char...

Чтение бинарного файла
Помогите, пожалуйста, научите, как правильно читать файлы! Есть бинарный файл....

Чтение из бинарного файла
Здравствуйте. У меня имеется некий класс Product, объекты которого хранятся в...

Чтение из бинарного файла
Ну собственно,у меня есть некий двоичный файл,в него записана моя информация в...


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

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

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