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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
#1

Конвертирование текстового файла в двоичный - C++

11.02.2011, 13:43. Просмотров 2310. Ответов 2
Метки нет (Все метки)

Здравствуйте! У меня возникла проблема при конвертировании текстового файла в двоичный. Помогите, пожалуйста, найти ошибку в коде:
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
extern struct tabl {
    int pob, por, nich, zab, prop, och;
    char name[15];
};
tabl *q;
void convert(int a)
{
    FILE *in,*bin;
    char s[15], d[15]; int i;
    q = new tabl[a];
    a:std::cin>>s;
    if((in=fopen(s,"r"))==NULL)
    {std::cout<<"Нет такого файла, введите название ещё раз!" << std::endl; goto a;}
    else
    {
        std::cout<<"Сейчас программа будет конвертировать данные из файла "<<s<<" в бинарный файл."<<std::endl;
        std::cout<<"Введите имя бинарного файла: "; std::cin>>d;
        bin=fopen(d,"w+b");
        for(i=0; i<a; i++)
        {
            fscanf(in,"%s%d%d%d%d%d",q[i].name,&q[i].pob,&q[i].por,&q[i].nich,&q[i].zab,&q[i].prop);
            q[i].och = 2*q[i].pob + q[i].nich;
            fwrite(&q,sizeof(q),1,bin);
        }
        std::cout<<"Данные успешно сконвертированы."<<std::endl;
    }
    fclose(in);
    fclose(bin);
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2011, 13:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конвертирование текстового файла в двоичный (C++):

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла. - C++
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;locale.h&gt; #include&lt;iomanip&gt; #include &lt;cstdlib&gt; using namespace std; struct...

Добавить в конец первого текстового файла содержимое второго текстового файла - C++
Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла.

Конвертирование файла в 10-ю систему счисления и обратно - C++
Добрый вечер уважаемые Участники. Это снова я:-* Появилась тут еще 1-на интересная или не интересная задача, в общем для кого как. ...

Перевод файла в двоичный код - C++
Привет всем. Возникла проблема: нужно любой файл перевести в двоичный код. Как это сделать средствами C++ или WInAPI?

Как узнать двоичный код файла? - C++
...То есть разложить на единицы и нолики.

Каким образом открыть двоичный код, файла любого формата? - C++
Каким образом открыть двоичный код, файла любого формата? Гугл читал, толком ничего не нашел, может кто что-то посоветует?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
-=ЮрА=-
Заблокирован
Автор FAQ
11.02.2011, 14:02 #2
В качестве параметра твоя функция void convert(int a) принимает целочисленную переменную, при этом в строке 13
C++
1
{std::cout<<"Нет такого файла, введите название ещё раз!" << std::endl; goto a;}
ты осуществляешь безусловный переход к метке 'a' с идентичным int a именем, думаю тут и ошибка, на первый взгляд вроди как изъянов в твоём коде не нашёл.
Просто переименуй метку например
C++
1
goro metka; metka:
само название metka нигде обїявлять не надо!
0
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
11.02.2011, 14:56  [ТС] #3
Поменял, ничего не изменилось... Вот весь код:
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
#include <iostream>
#include <conio.h>
#include <fstream>
 
extern struct tabl {
    int pob, por, nich, zab, prop, och;
    char name[15];
};
 
tabl *q;
 
void convert(int a);
 
void main() {
    setlocale(LC_ALL,"RUS");
    tabl *b,tmp;
    FILE *bin;
    int i=0,n,fl=0,r;
    char s[15];
    puts (" Данная программа на основе таблицы чемпионата\n"
        "по футболу составит итоговую таблицу чемпионата,\n"
        "подсчитав число очков для каждой команды и\n"
        "расположение их в порядке невозрастания.");
    std::cout << "Введите кол-во команд: "; std::cin >> n;
    b=new tabl[n];
    std::cout<<"\nВведите имя исходного текстового файла: "; convert(n);
    b:std::cout<<"\nТеперь введите еще раз имя бинарного файла: "; std::cin>>s;
    if((bin=fopen(s,"rb"))==NULL)
    {std::cout<<"Нет такого файла, введите название ещё раз!\n" << std::endl; goto b;}
    while(!feof(bin))
    {
        fscanf(bin,"%s%d%d%d%d%d%d",b[i].name,&b[i].pob,&b[i].por,&b[i].nich,&b[i].zab,&b[i].prop,&b[i].och);
    }
    a:for(i=0; i<n-1; i++) {
        if(b[i].och<b[i+1].och) {
            tmp=b[i];
            b[i]=b[i+1];
            b[i+1]=tmp;
            fl=1;
        }
    }
    if(fl==1)
    {fl=0; goto a;}
    puts("Итоговая таблица:");
    std::cout<<"----------------------------------------------------------------------------"<<std::endl;
    std::cout<<"Название\tПобеды\tПоражения\tНичьи\tЗабитые\tПропущенные\tОчки"<<std::endl;
    std::cout<<"----------------------------------------------------------------------------"<<std::endl;
    for(i=0; i<n; i++) {
        std::cout << b[i].name << "\t\t";
        std::cout << b[i].pob << "\t";
        std::cout << b[i].por << "\t\t";
        std::cout << b[i].nich << "\t";
        std::cout << b[i].zab << "\t";
        std::cout << b[i].prop << "\t\t";
        std::cout << b[i].och << std::endl;
    }
    std::cout<<"----------------------------------------------------------------------------"<<std::endl;
    getch ();
    return;
}
 
void convert(int a)
{
    FILE *in,*bin;
    char s[15], d[15]; int i;
    q = new tabl[a];
    metka:std::cin>>s;
    if((in=fopen(s,"r"))==NULL)
    {std::cout<<"Нет такого файла, введите название ещё раз!" << std::endl; goto metka;}
    else
    {
        std::cout<<"Сейчас программа будет конвертировать данные из файла "<<s<<" в бинарный файл."<<std::endl;
        std::cout<<"Введите имя бинарного файла: "; std::cin>>d;
        bin=fopen(d,"w+b");
        for(i=0; i<a; i++)
        {
            fscanf(in,"%s%d%d%d%d%d",q[i].name,&q[i].pob,&q[i].por,&q[i].nich,&q[i].zab,&q[i].prop);
            q[i].och = 2*q[i].pob + q[i].nich;
            fwrite(&q,sizeof(q),1,bin);
        }
        std::cout<<"Данные успешно сконвертированы."<<std::endl;
    }
    fclose(in);
    fclose(bin);
}
Вот содержание текстового файла:
Sparta 10 2 4 13 15
CSKA 11 11 1 1 1
Zenit 9 9 9 9 9
Arsenal 6 6 6 6 6
Russia 10 10 10 10 10
Albania 1 0 1 0 1

Добавлено через 45 минут
Ураааа!!! Нашёл ошибку! Вот исправленный код:
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
#include <iostream>
#include <conio.h>
#include <fstream>
 
extern struct tabl {
    int pob, por, nich, zab, prop, och;
    char name[15];
};
 
tabl *q;
 
void convert(int a);
 
void main() {
    setlocale(LC_ALL,"RUS");
    tabl *b,tmp;
    FILE *bin;
    int i=0,n,fl=0,r;
    char s[15];
    puts (" Данная программа на основе таблицы чемпионата\n"
        "по футболу составит итоговую таблицу чемпионата,\n"
        "подсчитав число очков для каждой команды и\n"
        "расположение их в порядке невозрастания.");
    std::cout << "Введите кол-во команд: "; std::cin >> n;
    b=new tabl[n];
    std::cout<<"\nВведите имя исходного текстового файла: "; convert(n);
    b:std::cout<<"\nТеперь введите еще раз имя бинарного файла: "; std::cin>>s;
    if((bin=fopen(s,"rb"))==NULL)
    {std::cout<<"Нет такого файла, введите название ещё раз!\n" << std::endl; goto b;}
    else
    for(i=0; i<n; i++)
        fread(b,n*sizeof(b[i]),1,bin);
    a:for(i=0; i<n-1; i++) {
        if(b[i].och<b[i+1].och) {
            tmp=b[i];
            b[i]=b[i+1];
            b[i+1]=tmp;
            fl=1;
        }
    }
    if(fl==1)
    {fl=0; goto a;}
    puts("Итоговая таблица:");
    std::cout<<"----------------------------------------------------------------------------"<<std::endl;
    std::cout<<"Название\tПобеды\tПоражения\tНичьи\tЗабитые\tПропущенные\tОчки"<<std::endl;
    std::cout<<"----------------------------------------------------------------------------"<<std::endl;
    for(i=0; i<n; i++) {
        std::cout << b[i].name << "\t\t";
        std::cout << b[i].pob << "\t";
        std::cout << b[i].por << "\t\t";
        std::cout << b[i].nich << "\t";
        std::cout << b[i].zab << "\t";
        std::cout << b[i].prop << "\t\t";
        std::cout << b[i].och << std::endl;
    }
    std::cout<<"----------------------------------------------------------------------------"<<std::endl;
    getch ();
    return;
}
 
void convert(int a)
{
    FILE *in,*bin;
    char s[15], d[15]; int i;
    q = new tabl[a];
    metka:std::cin>>s;
    if((in=fopen(s,"r"))==NULL)
    {std::cout<<"Нет такого файла, введите название ещё раз!" << std::endl; goto metka;}
    else
    {
        std::cout<<"Сейчас программа будет конвертировать данные из файла "<<s<<" в бинарный файл."<<std::endl;
        std::cout<<"Введите имя бинарного файла: "; std::cin>>d;
        bin=fopen(d,"w+b");
        for(i=0; i<a; i++)
        {
            fscanf(in,"%s%d%d%d%d%d",q[i].name,&q[i].pob,&q[i].por,&q[i].nich,&q[i].zab,&q[i].prop);
            q[i].och = 2*q[i].pob + q[i].nich;
            fwrite(&q[i],sizeof(q[i]),1,bin);
        }
        std::cout<<"Данные успешно сконвертированы."<<std::endl;
    }
    fclose(in);
    fclose(bin);
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2011, 14:56
Привет! Вот еще темы с ответами:

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

Указание текстового файла-источника и принимающего файла в cmd - C++
Подскажите, как сделать что б при вводе через cmd надо было указывать файл-исходник и принимающий файл? &quot;полный путь\fdsfsd.exe in.txt...

как может корректно выполняющийся оператор >> (чтение из текстового файла) негативно влиять на открытие другого файла? - C++
Друзья! Создадим два текстовых файла, f_0.txt и f_1.txt и что-нибудь в них запизаем, например в первый запихаем 1234 а во второй 5678 и...

Из заданного двоичного файла создать новый двоичный файл, у которого байты переставлены в обратном порядке - C++
7. По заданному двоичному файлу с произвольным содержанием создать новый двоичный файл, у которого байты переставлены в обратном...


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

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

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