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

Бинарные файлы данных - C++

Восстановить пароль Регистрация
 
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
14.12.2013, 00:11     Бинарные файлы данных #1
Доброго времени суток, господа)
извольте помочь мне с кодом)
Задание:
Есть бинарный файл Ф1 с целыми числами:10 отрицательных и 10 больше 0.
Создать файл Ф2 в котором будет 5 отрицательных, 5 положительных чисел с файла Ф1. Числа в файле Ф1 разположены хаотично!
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
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <stdio.h>
using namespace std;
 
void neeew()
{
    FILE *f;
    int size=20;
    int *a;
    f=fopen("D:\\test.dat", "wb");
    for(int i = 0; i<size; ++i)
    {
        cout <<"vvedite"<< i <<"element massiva"<<a[i];
    cin>>a[i];
    }
    cout << endl;
    fclose(f);
}
void here()
{
    int *a;
    FILE *f;
    FILE *f1;
    int c=0;
    int d=0;
    f = fopen("D:\\test.dat", "rb");
    if (f)
    {
        f1=fopen("D:\\test1.dat", "wb");
        while (fread(&a,sizeof(int), 1, f))
        {
        for(int i=0;i<20;i++)
            {
            if(a[i]>0 && c<5)
                {
                    c++;
                    cout << a[i];
                    fwrite(&a[i], sizeof(int), 1, f1);
                }
                if(a[i]<0 && d<5)
                {
                    d++;
                    cout << a[i];
                    fwrite(&a[i], sizeof(int), 1, f1);
                }
            }
            fclose(f);
            fclose(f1);
        }
    }
    else 
    cout << "Error f!" << endl;
}
 
int main()
{
    int *a;
    int size=20;
    neeew();
    here();
    FILE *f1;
    f1 = fopen("D:\\test1.dat", "rb");
    if (f1)
    {
        while (fread(&a,sizeof(int), 1, f1))
        for(int i=0;i<size;i++)
        {
            cout << a[i];
 
        }
        cout << endl; 
        fclose(f1);
    }
    else 
    cout << "Error f1!" << endl;
    cin.get();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2013, 00:11     Бинарные файлы данных
Посмотрите здесь:

Бинарные файлы.. C++
C++ Бинарные файлы
Бинарные файлы C++
Бинарные файлы C++
C++ Бинарные файлы в С++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.12.2013, 00:19     Бинарные файлы данных #2
Код для чего выложен?
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
14.12.2013, 01:47  [ТС]     Бинарные файлы данных #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Код для чего выложен?
я же написал: "помощь с кодом".
alsav22
14.12.2013, 01:51
  #4

Не по теме:

Цитата Сообщение от aimbat Посмотреть сообщение
я же написал: "помощь с кодом".
Не ответ на вопрос.

ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,043
14.12.2013, 01:53     Бинарные файлы данных #5
Цитата Сообщение от aimbat Посмотреть сообщение
я же написал: "помощь с кодом".
для начала прокомментируй его
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
14.12.2013, 02:17  [ТС]     Бинарные файлы данных #6
Цитата Сообщение от ValeryS Посмотреть сообщение
для начала прокомментируй его
с таким ранком вы нуждаетесь в моих нелепых комментах?
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,043
14.12.2013, 02:19     Бинарные файлы данных #7
Цитата Сообщение от aimbat Посмотреть сообщение
с таким ранком вы нуждаетесь в моих нелепых комментах?
да
потому что я не знаю что ты там написал
каким алгоритмом пользовался
и потом когда начнешь комментировать сам найдешь свои ошибки, ну если тебе это интересно конечно
uhx
 Аватар для uhx
56 / 56 / 6
Регистрация: 11.07.2013
Сообщений: 300
14.12.2013, 02:27     Бинарные файлы данных #8
Цитата Сообщение от aimbat Посмотреть сообщение
я же написал: "помощь с кодом".
В каком месте? Где ошибка?
У тебя вроде готовый код, но что тебе в нем надо помочь - непонятно, ибо сидеть и разбираться в твоих задумках желания нет. Пиши конкретнее.

Добавлено через 2 минуты
ПЫСЫ почему нельзя использовать библиотеку fstream? К чему эти FILE *f1, *f; ... Как-то убого выглядит, на мой взгляд

Добавлено через 3 минуты
А по сути все просто:
Создаешь допустим temp переменную, в которую будет записываться число. Затем узнаешь, какое оно и записываешь в тот или иной массив (их 2, для разных чисел). Потом по порядку их выводишь.
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
14.12.2013, 02:27  [ТС]     Бинарные файлы данных #9
Цитата Сообщение от uhx Посмотреть сообщение
В каком месте? Где ошибка?
У тебя вроде готовый код, но что тебе в нем надо помочь - непонятно, ибо сидеть и разбираться в твоих задумках желания нет. Пиши конкретнее.

Добавлено через 2 минуты
ПЫСЫ почему нельзя использовать библиотеку fstream? К чему эти FILE *f1, *f; ... Как-то убого выглядит, на мой взгляд
В чем проблема в 15 строке?
Миниатюры
Бинарные файлы данных  
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
14.12.2013, 02:29     Бинарные файлы данных #10
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
#include <fstream>
#include <iostream>
#include <iomanip>
 
using namespace std;
 
const int offsets[] = { 0, 2, 1, 3 }, plus = 1, minus=-1;
 
fstream f, g;
int i, j, k, X;   
int main()
{
    int curr = 1;
    f.open("f", ios::in | ios::out | ios::trunc | ios::binary);
    for (k = 1; k <= 2; ++k)
    {
        for (i = 1; i <= 10; ++i)
        {
            int value = plus*curr++;
            f.write(reinterpret_cast<char*>(&value), sizeof(value));
        }
        for (j = 1; j <= 10; ++j)
        {
            int value = minus*curr++;
            f.write(reinterpret_cast<char*>(&value), sizeof(value));
        }
    }
    g.open("g", ios::in | ios::out | std::ios::trunc | std::ios::binary);
    f.seekp(0);
    for (i = 0; !f.eof(); ++i)
        for (j = 0; j < 4 && f.good(); ++j)
        {
            f.seekg((5 * (4*i + offsets[j])) * sizeof(X));
            for (k = 1; k <= 5 && f.good(); ++k)
            {
                f.read (reinterpret_cast<char*>(&X), sizeof(X));
                if (f.gcount() == sizeof(X))
                    g.write(reinterpret_cast<char*>(&X), sizeof(X));
            }
        }
    f.close();
    
    g.seekg(0);
    while (!g.eof())
    {
        g.read(reinterpret_cast<char*>(&X), sizeof(X));
        if (g.gcount() == sizeof(X)) cout << setw(4) << X;
    }
    g.close();
}
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,043
14.12.2013, 02:31     Бинарные файлы данных #11
Цитата Сообщение от aimbat Посмотреть сообщение
В чем проблема в 15 строке?
это вот эта что ли
Цитата Сообщение от aimbat Посмотреть сообщение
cout <<"vvedite"<< i <<"element massiva"<<a[i];
а ты массив a где объявлял? и какого он размера?
я же сказал прокомментируй весь код и найдешь кучу косяков
uhx
 Аватар для uhx
56 / 56 / 6
Регистрация: 11.07.2013
Сообщений: 300
14.12.2013, 02:31     Бинарные файлы данных #12
aimbat, может потому, что вы пытаетесь вывести в консоль указатель, который был лишь объявлен? Ему ведь даже ничего не присвоено.
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
14.12.2013, 02:33     Бинарные файлы данных #13
Цитата Сообщение от ValeryS Посмотреть сообщение
я же сказал прокомментируй весь код и найдешь кучу косяков
сударь, истину говорит...
uhx
 Аватар для uhx
56 / 56 / 6
Регистрация: 11.07.2013
Сообщений: 300
14.12.2013, 02:35     Бинарные файлы данных #14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <fstream>
#include <iostream>
using namespace std;
 
int main(){
setlocale(0,"");
int a;
ifstream f1("D:\\1.txt");
f1>>a;
cout<<a;
ofstream f2("D:\\f2.txt");
f2<<a;
system("pause>>void");
}
И никаких варнингов на fopen...
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
14.12.2013, 02:39  [ТС]     Бинарные файлы данных #15
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
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
#include <fstream>
#include <iostream>
#include <iomanip>
 
using namespace std;
 
const int offsets[] = { 0, 2, 1, 3 }, plus = 1, minus=-1;
 
fstream f, g;
int i, j, k, X;   
int main()
{
    int curr = 1;
    f.open("f", ios::in | ios::out | ios::trunc | ios::binary);
    for (k = 1; k <= 2; ++k)
    {
        for (i = 1; i <= 10; ++i)
        {
            int value = plus*curr++;
            f.write(reinterpret_cast<char*>(&value), sizeof(value));
        }
        for (j = 1; j <= 10; ++j)
        {
            int value = minus*curr++;
            f.write(reinterpret_cast<char*>(&value), sizeof(value));
        }
    }
    g.open("g", ios::in | ios::out | std::ios::trunc | std::ios::binary);
    f.seekp(0);
    for (i = 0; !f.eof(); ++i)
        for (j = 0; j < 4 && f.good(); ++j)
        {
            f.seekg((5 * (4*i + offsets[j])) * sizeof(X));
            for (k = 1; k <= 5 && f.good(); ++k)
            {
                f.read (reinterpret_cast<char*>(&X), sizeof(X));
                if (f.gcount() == sizeof(X))
                    g.write(reinterpret_cast<char*>(&X), sizeof(X));
            }
        }
    f.close();
    
    g.seekg(0);
    while (!g.eof())
    {
        g.read(reinterpret_cast<char*>(&X), sizeof(X));
        if (g.gcount() == sizeof(X)) cout << setw(4) << X;
    }
    g.close();
}
а можно чуть прокомментить?
почему выводит во второй строке совсем другие значения + их так мноого?
uhx
 Аватар для uhx
56 / 56 / 6
Регистрация: 11.07.2013
Сообщений: 300
14.12.2013, 02:43     Бинарные файлы данных #16
aimbat, во 2 строке подключение библиотеки iostream, если мне не изменяет мое зрение.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2013, 02:46     Бинарные файлы данных
Еще ссылки по теме:

Бинарные файлы данных(задача) C++
Бинарные файлы данных(задача) C++
C++ Бинарные файлы

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

Или воспользуйтесь поиском по форуму:
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
14.12.2013, 02:46  [ТС]     Бинарные файлы данных #17
Цитата Сообщение от uhx Посмотреть сообщение
aimbat, во 2 строке подключение библиотеки iostream, если мне не изменяет мое зрение.
прик
Yandex
Объявления
14.12.2013, 02:46     Бинарные файлы данных
Ответ Создать тему
Опции темы

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