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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
11.02.2011, 13:43     Конвертирование текстового файла в двоичный #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
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);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2011, 13:43     Конвертирование текстового файла в двоичный
Посмотрите здесь:

C++ шифрование текстового файла
C++ Редактирование текстового файла
чтение из текстового файла C++
C++ Конвертирование файла в 10-ю систему счисления и обратно
C++ Из заданного двоичного файла создать новый двоичный файл, у которого байты переставлены в обратном порядке
Каким образом открыть двоичный код, файла любого формата? C++
C++ Перевод файла в двоичный код
Указание текстового файла-источника и принимающего файла в cmd 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 нигде обїявлять не надо!
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);
}
Yandex
Объявления
11.02.2011, 14:56     Конвертирование текстового файла в двоичный
Ответ Создать тему
Опции темы

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