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

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

29.11.2014, 13:49. Просмотров 543. Ответов 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
Ответы с готовыми решениями:

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

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

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

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

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

5
zss
Модератор
Эксперт С++
7255 / 6702 / 4242
Регистрация: 18.12.2011
Сообщений: 17,692
Завершенные тесты: 1
29.11.2014, 13:55 2
А писали в этот файл как?
C++
1
out.write((char *) &tempValue,sizeof(double));
???????????????????????????
0
[progeR]
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
Завершенные тесты: 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
Модератор
Эксперт С++
7255 / 6702 / 4242
Регистрация: 18.12.2011
Сообщений: 17,692
Завершенные тесты: 1
29.11.2014, 14:50 4
Я к тому, что может Ваш файл все же содержит буквы, а не бинарный код?
Если в файл out писали оператором бинарной записи
out.write((char *) &tempValue,sizeof(double));
то должно читаться корректно.
0
[progeR]
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
Завершенные тесты: 1
29.11.2014, 14:56  [ТС] 5
Нет, никаких букв, только double.
В смысле читаться корректно? Имеется ввиду, то код - он корректный и должен читать?
0
zss
Модератор
Эксперт С++
7255 / 6702 / 4242
Регистрация: 18.12.2011
Сообщений: 17,692
Завершенные тесты: 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...

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


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

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

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