Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
[progeR]
30 / 8 / 0
Регистрация: 20.08.2011
Сообщений: 610
Завершенные тесты: 1
#1

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

29.11.2014, 13:49. Просмотров 481. Ответов 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++):

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется - C++
Формат файла состоит из 3 структур и одной переменной. Подробное описание формата во вложении, просьба посмотреть его. У меня возникла...

Чтение из бинарного файла - C++
Всем приветы. Подскажите или помогите, пожалста. Есть вот такая штука: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

Чтение из бинарного файла - C++
Добрый вечер.Возникла проблема при чтении имени объекта из бинарного файла,запись в файл идет по структуре |char|int|double|float|'/0'|...

Чтение бинарного файла - C++
Помогите, пожалуйста, научите, как правильно читать файлы! Есть бинарный файл. В нем хранятся шеснадцатиричные числа. (по 40 чисел в...

Чтение из бинарного файла - C++
Здравствуйте. Столкнулся с проблемой, не до конца понимаю от чего она возникает и как решить её. Открываю для чтения файл в бинарном...

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

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

Чтение бинарного файла - C++
подскажите пожалуйста как можно из любого файла(*.bmp, *.mp3, *.avi и т.д.) получить двоичное представление этого файла или хотя бы считать...

Чтение из бинарного файла - C++
Создала Базу данных. запись в файл происходит, а чтение из файла не получается. исправьте, пожалуйста, или подскажите как? #include...

Чтение бинарного файла - C++
Подскажите пожалуйста как можно правильно открыть бинарный файл не зная структуры? С чего мне начать? Вот пример:

Чтение бинарного файла - C++
как получить доступ к произвольному адресу файла? Нужно отправить файл через ком порт но не с 0 а с адреса 1а000 в цикле по 0х100 байт. с 0...


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

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

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