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

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

Войти
Регистрация
Восстановить пароль
 
xXValeraXx
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 10
#1

Реализовать считывание данных из файла .grd - C++

16.02.2017, 13:57. Просмотров 220. Ответов 8
Метки нет (Все метки)

В общем, как и сказано в заголовке, нужно реализовать считывание данных из файла .grd. Раньше я только считывал данные из тхт и там все было значительно проще. С grid-файлом так не выходит и я не могу найти структуру этого файла, каждый источник излагает свой вариант и пока не один из них не помог. Или я не умею реализовать считывание файлаи не могу разобраться в описании этог расширения.
Вообще это часть научной работы - входные данные для программы. И научный руководитель настаивает на следующем варианте кода(хотя результат совсем не похож на то, что нужно):
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
//#include <iostream>
//#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
 
 
//using namespace std;
 
int main()
{
    FILE *outf;
 
short sNx, sNy;
int N, i, ix,iy;
double x_min, x_max, y_min, y_max, z_min, z_max;
 
 
outf = fopen("relief_1024x1024.grd","rb");
 
    fread(&sNx, sizeof(short),   1, outf);
    fread(&sNy, sizeof(short), 1, outf);
    N = sNx*sNy;
 
    printf("Nx=%d, Ny=%d, N=%d \n", sNx, sNy, N);
 
    _getch();
 
    float *z = new float[N];
 
    fread(&x_min, sizeof(double),   1, outf);
    fread(&x_max, sizeof(double), 1, outf);
    fread(&y_min, sizeof(double), 1, outf);
    fread(&y_max, sizeof(double), 1, outf);
    fread(&z_min, sizeof(double), 1, outf);
    fread(&z_max, sizeof(double), 1, outf);
 
 
    for(i=0; i<N; i++)
    {
        fread(&z[i], sizeof(float),   1, outf);
        ix = i % N; iy = i / N;
        //printf("ix=%d, iy=%d, i=%d, z = %g\n", ix,iy,i, z);
    }
    fclose(outf);
 
 
    /*std::ofstream mout("z.txt");
    for(i=0;i<N;i++)
    {
            mout << z[i] <<std::endl;
    }
    mout.close(); // закрываем файл*/
 
    /*float z[K];
 
    for(int i=0;i<K;i++)
    {
        fread(&z[i], sizeof(int),   1, outf);
    }
 
    ofstream fout("z.txt");
        for(int j=0;j<K;j++)
        {
            fout << z[j] <<endl;
        }
    fout.close(); // закрываем файл*/
 
    free(z);
 
    return 1;
}
Также прикрепил файл с которого мне нужно считать данные.
0
Вложения
Тип файла: rar relief_1024x1024.rar (812.9 Кб, 3 просмотров)
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2017, 13:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реализовать считывание данных из файла .grd (C++):

Структура Карточка спортсмена, реализовать считывание данных из файла - C++
пытался переделать программу, но компилятор виснет намертво Задача:На каждого из спортсменов, заявленных на областных соревнованиях по...

Реализовать побайтовое считывание файла - C++
как реализовать побайтовое считывание с файла конкретно в этой программе? ios_base::binary это оно или нет? Заранее спасибо за ответ :)...

Считывание данных из файла - C++
не могу считать данные из файла На вход программы подаются 365 строк, которые содержат информацию о среднесуточной температуре всех дней...

Считывание данных из файла - C++
Есть файл в котором содержится число 145. Мне нужно считать из файла это число без числа 5, то есть все числа до числа 5. Помогите.

Считывание данных из файла - C++
Всем привет, возник вопрос. Нужно считывать из .txt файла координаты точек в массив, размерность которого . Но т.к числа разделены &quot;,&quot; ,...

Считывание данных из файла - C++
// Laboratornaya_4.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; #include...

8
nd2
2384 / 1973 / 691
Регистрация: 29.01.2016
Сообщений: 6,422
16.02.2017, 16:41 #2
Цитата Сообщение от xXValeraXx Посмотреть сообщение
я не могу найти структуру этого файла
Тогда это невыполнимое задание. Невозможно извлечь нужные данные из файла неизвестной структуры.
0
xXValeraXx
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 10
16.02.2017, 19:27  [ТС] #3
Это файл .grd, используется в ГИС. Его структура не известна мне. А в целом, это расширение имеет вполне определенную структуру. И чтобы получить данные нужно считать некоторое кол-во переменных того или иного типа, а я не знаю в каком порядке и какие переменные в нём хранятся. И надеялся, что в данном вопросе мне поможет человек, который работал с файлами этого расширения и знает как и что из них считывается.
0
nd2
2384 / 1973 / 691
Регистрация: 29.01.2016
Сообщений: 6,422
16.02.2017, 20:03 #4
Цитата Сообщение от xXValeraXx Посмотреть сообщение
в целом, это расширение имеет вполне определенную структуру.
Если имеет вполне определённую структуру, то как понять это?
Цитата Сообщение от xXValeraXx Посмотреть сообщение
каждый источник излагает свой вариант
Цитата Сообщение от xXValeraXx Посмотреть сообщение
Его структура не известна мне.
Узнай.
Цитата Сообщение от xXValeraXx Посмотреть сообщение
а я не знаю в каком порядке и какие переменные в нём хранятся.
Узнай.
Цитата Сообщение от xXValeraXx Посмотреть сообщение
хотя результат совсем не похож на то, что нужно
Как выглядит этот результат, и чем он не похож на то, что нужно?
0
xXValeraXx
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 10
16.02.2017, 20:18  [ТС] #5
Я думаю нету смысла вам объяснять и отвечать. Человек, который работал с grd знает как и что считывать, а вы явно нет, поэтому не вижу смысла обсуждать этот вопрос с вами. Мне нужна помощь того, кто в этом разбирается, т.к. в интернете сложно найти что-то толковое по этому поводу.
0
nd2
2384 / 1973 / 691
Регистрация: 29.01.2016
Сообщений: 6,422
16.02.2017, 20:25 #6
Цитата Сообщение от xXValeraXx Посмотреть сообщение
я не могу найти структуру этого файла, каждый источник излагает свой вариант и пока не один из них не помог.
Не помог в чём? Чтобы кто-то сделал за тебя?
0
xXValeraXx
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 10
16.02.2017, 20:48  [ТС] #7
Я не знаю структуру, соответственно не могу считать все как нужно. Знающий человек скажет в каком порядке и какие считать переменные. Или может у меня просто что-то не так оформлено в проге. А вы просто спорите, можете больше не захламлять эту тему, пожалуйста.
Я нигде не говорил "напишите мне прогу", а скинул свою и жду, что кто-то подскажет что в ней не так, а не подсказки в духе:"узнай",- я думал на этом форуме и узнают у других программистов и если я пишу сюда, значит уже искал вне форума и не нашел.
0
nd2
2384 / 1973 / 691
Регистрация: 29.01.2016
Сообщений: 6,422
16.02.2017, 22:41 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от xXValeraXx Посмотреть сообщение
Я нигде не говорил "напишите мне прогу", а скинул свою и жду, что кто-то подскажет что в ней не так,
Я насчёт твоего кода спросил:
Цитата Сообщение от xXValeraXx Посмотреть сообщение
хотя результат совсем не похож на то, что нужно
Цитата Сообщение от nd2 Посмотреть сообщение
Как выглядит этот результат, и чем он не похож на то, что нужно?
Но ты не ответил.
Цитата Сообщение от xXValeraXx Посмотреть сообщение
Я не знаю структуру
Ну, вот здесь структура хорошо описана: http://geospatialdesigns.com/surfer6_format.htm

Добавлено через 48 минут
В твоём коде ошибка в начале чтения: прежде, чем читать два short, нужно пропустить маркер файла (DSBB), размер маркера - 4 байта.

Добавлено через 30 минут
Дальше там с чтением всё правильно.
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
int main()
{
    FILE *outf;
 
    short sNx, sNy;
    int N, i, ix,iy;
    double x_min, x_max, y_min, y_max, z_min, z_max;
    
    outf = fopen("relief_1024x1024.grd","rb");
    if (!outf)
    {
        printf("Error opening file!\n");
        _getch();
        return 0;
    }
    
    // читаем и проверяем маркер файла
    char marker[5] = {0};
    fread(marker, sizeof(char), 4, outf);
    printf("%s\n", marker);
    if (strcmp(marker, "DSBB") != 0)
    {
        printf("The file format is not the same!\n");
        _getch();
        return 0;
    }
    
    fread(&sNx, sizeof(short), 1, outf);
    fread(&sNy, sizeof(short), 1, outf);
    N = sNx*sNy;
 
    printf("Nx=%d, Ny=%d, N=%d \n", sNx, sNy, N);
 
    _getch();
 
    float *z = new float[N];
 
    fread(&x_min, sizeof(double), 1, outf);
    fread(&x_max, sizeof(double), 1, outf);
    fread(&y_min, sizeof(double), 1, outf);
    fread(&y_max, sizeof(double), 1, outf);
    fread(&z_min, sizeof(double), 1, outf);
    fread(&z_max, sizeof(double), 1, outf);
 
 
    for(i=0; i<N; i++)
    {
        fread(&z[i], sizeof(float),   1, outf);
        ix = i % N; iy = i / N;
        //printf("ix=%d, iy=%d, i=%d, z = %g\n", ix,iy,i, z);
    }
    fclose(outf);
 
 
    /*std::ofstream mout("z.txt");
    for(i=0;i<N;i++)
    {
            mout << z[i] <<std::endl;
    }
    mout.close(); // закрываем файл*/
 
    /*float z[K];
 
    for(int i=0;i<K;i++)
    {
        fread(&z[i], sizeof(int),   1, outf);
    }
 
    ofstream fout("z.txt");
        for(int j=0;j<K;j++)
        {
            fout << z[j] <<endl;
        }
    fout.close(); // закрываем файл*/
 
    free(z);
 
    return 0;
}
1
xXValeraXx
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 10
17.02.2017, 00:19  [ТС] #9
Спасибо большое, наконец-то будет возможность доделать эту научную работу)так давно бился над этой, казалось бы, простой задачей при том, что вычислительный блок уже сделал и намного быстрее.
0
17.02.2017, 00:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2017, 00:19
Привет! Вот еще темы с ответами:

Считывание данных из файла - C++
у меня такая проблема: считываю данные из файла открытого fopen для чтения, символы записываются в символьный массив, как только считывание...

Считывание данных с файла - C++
Здравствуйте, помогите пожалуйста, программа не может прочитать данные из файла и я не знаю почему, вот код (dev-c++) if (*c==13) ...

Считывание данных из файла - C++
почему не првильно работает считывание из файла? #include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;malloc.h&gt; #include...

Считывание данных из файла - C++
Нужно реализовать вывод данных структуры из файла.. Задание: Заполнение футбольных команд и вывод их на экран. Вводим: название...


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

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

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