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

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

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

Считать данные о ноутбуках с .txt, обрабатывать их и записывать в .bin файл отсортированные данные - C++

04.10.2014, 21:24. Просмотров 607. Ответов 19
Метки нет (Все метки)

Добрый вечер.
Пред мной поставлена задача написать программу, которая будет считывать данные о ноутбуках с файла .txt обрабатывать их и записывать в .bin файл уже отсортированные данные.
Видел несколько тем на форуме, но к сожалению, не одного решения не нашел. Чего посоветуете?
Имею вот такую заданную структуру:
C++
1
2
3
4
5
6
7
8
9
10
struct NOTEBOOK{
        char model[21];     // наименование модели
        struct size {       // габаритные размеры ноутбука в дюймах (ВЫСОТАхДЛИНАхШИРИНА — tpn числа с десятичной точкой (4 символа, включая точку, разделенные 'х');
            float x;        // высота
            float y;        // длина
            float z;        // ширина
            };
        float w;            // вес
        float price;        // цена
};
Структура бинарного файла: 2 байта - число записей в файле, далее записи по структуре NOTEBOOK.
В файл записывать и выводить на экран только те ноутбуки, где ОЗУ не менее 40 мбайт, которые отсортироваь по объему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2014, 21:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считать данные о ноутбуках с .txt, обрабатывать их и записывать в .bin файл отсортированные данные (C++):

Данные записать в файл F1.txt, затем прочитать оттуда, обрабатывались и записывались в бинарный файл F2.bin с проверкой - C++
Никак не получается отладить в BC++ 3.1. Как сделать в классах так, чтобы введённые данные записывались в файл F1.txt, затем читались...

Структуры: ввести данные о работниках и вывести их данные, отсортированные по алфавиту - C++
Всем привет! Подскажите пожалуйста, что не так с моей функцией proverka? Мне нужно ввести данные о работниках и вывести их данные,...

Как из файла txt считать данные в массив? - C++
Добрый день. С с++ у меня очень плохо, но срочно нужно сделать одну вещь. Есть файл file.txt, в нем располагается массив данных, к...

Рандомный выбор из файла: считать данные из txt - C++
Есть такое задание: Задан файл в котором записаны Ф.И.О. Требуется рандомно выбрать из этого файла 1/2/3(по запросу пользователя)...

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

Переписать данные файла input.txt в файл output.txt, отсортировать их в алфавитном порядке по фамилии - C++
Народ меня тут 11 задач мне нужно их подробно прокомментировать какая строчка что делает(пример первая задача) помогите плиз кому не...

19
GetLucky
0 / 0 / 0
Регистрация: 03.09.2014
Сообщений: 87
05.10.2014, 11:45  [ТС] #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
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
87
88
89
90
91
92
93
94
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
struct NOTEBOOK{
        char model[21];  // наименование
        int cost;        // цена в долларах (целое число);
        float bulk;      // масса ноутбука в кг (число с десятичной точкой из четырех символов);
        struct SIZE{     // габаритные размеры ноутбука в дюймах (ВЫСОТАхДЛИНАхШИРИНА — tpn числа с десятичной точкой (4 символа, включая точку, разделенные 'х');
            float x;     // высота
            float y;     // длина
            float z;     // ширина
            };SIZE sz;
        int freq;        // частота процессора в МГц (целое число из трех символов);
        int ozu;         // максимальный объем ОЗУ в мегабайтах (целое число из двух символов);
        float diagonal;  // размер диагонали дисплея в дюймах (число с десятичной точкой из четырех символов, включая точку);
        int video;       // размер видеопамяти в мегабайтах — целое число из одного символа;
                         // разрешающая способность дисплея в пикселах (два целых числа, разделенные 'х');
        int hg;          // высота
        int wd;          // ширина
        int hz;          // частота регенерации дисплея в Гц (целое число из двух символов);
        float hdd;       // объем HDD в гигабайтах (число с десятичной точкой из пяти символов).
};
NOTEBOOK a[16];
NOTEBOOK b[1];
int i=0, k=0;
 
void read(){
    char s[100];
    FILE *note, *fout;
    note = fopen("note.txt","r");
    fout = fopen("note.bin","wb");
    printf ("n Model\t\t\tHgz\tCost\n");
    while (!feof(note)){
        fgets(s,100,note);
        if (atoi(&s[43])>120){k++;}
        }
    fwrite (&k, 2, 1, fout);
    fseek(note, 0L, SEEK_SET);             // выставление указателя в начало файла
 
    while (!feof(note)){
        fgets(s,100,note);
        if (atoi(&s[43])>120){
        strncpy(a[i].model,s, 18);
        a[i].cost = atoi(&s[19]);
        a[i].bulk = atof(&s[24]);
        a[i].sz.x = atof(&s[28]);
        a[i].sz.y = atof(&s[33]);
        a[i].sz.z = atof(&s[38]);
        a[i].freq = atoi(&s[43]);
        a[i].ozu = atoi(&s[47]);
        a[i].diagonal = atof(&s[50]);
        a[i].video = atoi(&s[55]);
        a[i].hg = atoi(&s[57]);
        a[i].wd = atoi(&s[62]);
        a[i].hz = atoi(&s[67]);
        a[i].hdd = atof(&s[70]);
        i++;
        }}
 
    int t=0;
    int iz=0;
    while (t==0){
          for (i=0;i<k-1;i++){
              if(a[i].cost < a[i+1].cost){
                  iz=1;
                  b[0]=a[i];
                  a[i]=a[i+1];
                  a[i+1]=b[0];
                  }
                }
          if (iz==0){t=1;}else{iz=0;}}
 
    for (i=0;i<k;i++){
        printf ("%d %s\t%d\t%d\n",i+1,a[i].model,a[i].freq,a[i].cost);
        }
    fwrite (&a, sizeof (NOTEBOOK), k, fout);
    fclose(note);
    fclose(fout);
    printf ("\nNumber of records=%d",k);
    printf ("\nnote.txt write in struct...OK\n");
    printf ("note.bin write...OK\n");
}
 
 
int main(){
    FILE *note;
    if((note = fopen("note.txt", "r")) == 0){
    printf("error with opening the input file\n"); system("pause");return 1;}
    fclose(note);
    read();
system ("pause");
return 0;
}
Пример файла note.txt прикрепляю к посту.
0
Вложения
Тип файла: txt note.txt (1.3 Кб, 12 просмотров)
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2014, 11:59 #3
Цитата Сообщение от GetLucky Посмотреть сообщение
Пример файла note.txt прикрепляю к посту.
Кривые записи присутствуют.
0
GetLucky
0 / 0 / 0
Регистрация: 03.09.2014
Сообщений: 87
05.10.2014, 12:00  [ТС] #4
alsav22, в плане?
У меня отображение как на скрине ниже.
0
Миниатюры
Считать данные о ноутбуках с .txt, обрабатывать их и записывать в .bin файл отсортированные данные  
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2014, 12:02 #5
Цитата Сообщение от GetLucky Посмотреть сообщение
в плане?
Понял, прошу прощения. Подумал, что там повторы затесались:
BSI NP8657D 2605 2605 8.0 02.3х11.8х09.3 133 40 11.3 1 1024х0768 60 0.810
BSI NP5265A 3765 3765 8.2 02.5х12.0х09.0 150 32 12.1 2 1024х0768 70 1.300
0
GetLucky
0 / 0 / 0
Регистрация: 03.09.2014
Сообщений: 87
05.10.2014, 12:04  [ТС] #6
alsav22, потер. перезалил.
0
Вложения
Тип файла: txt note.txt (1.3 Кб, 10 просмотров)
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2014, 12:08 #7
Я бы тому, кто такой файл создавал, руки оторвал. Так сделано специально, чтобы извлекать данные сложно было?

Добавлено через 1 минуту
Цитата Сообщение от GetLucky Посмотреть сообщение
потер. перезалил.
Неправильно было?
0
GetLucky
0 / 0 / 0
Регистрация: 03.09.2014
Сообщений: 87
05.10.2014, 12:08  [ТС] #8
alsav22, этот файл был вообще дан в текстом в docx. Можете отредачить как будет удобнее.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2014, 12:10 #9
Цитата Сообщение от GetLucky Посмотреть сообщение
этот файл был вообще дан в текстом в docx. Можете отредачить как будет удобнее.
Я не об этом, а о самом формате сохранения данных текстовым методом и в одной строке.
0
GetLucky
0 / 0 / 0
Регистрация: 03.09.2014
Сообщений: 87
05.10.2014, 12:11  [ТС] #10
alsav22, к сожаленью такое задание.
Как я понимаю нужно будет разбивать стринговую переменную на части и преобразовывать с помощью atoi?
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2014, 12:23 #11
Цитата Сообщение от GetLucky Посмотреть сообщение
Как я понимаю нужно будет разбивать стринговую переменную на части и преобразовывать с помощью atoi?
Если просто число в строке, то методы форматируемого чтения и так прочитают число (там, где числа разделены х, тоже можно считать как числа). Тут самое сложное - отделить название модели от всего остального, потому как непонятно, а где оно, это название, собственно, заканчивается.
0
GetLucky
0 / 0 / 0
Регистрация: 03.09.2014
Сообщений: 87
05.10.2014, 12:25  [ТС] #12
alsav22, как на счет примера что есть в 2 посте?
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2014, 12:47 #13
Цитата Сообщение от GetLucky Посмотреть сообщение
как на счет примера что есть в 2 посте?
Если поля записей имеют фиксированную ширину, то можно и так.
0
GetLucky
0 / 0 / 0
Регистрация: 03.09.2014
Сообщений: 87
05.10.2014, 12:49  [ТС] #14
alsav22, можете привести пример как это реализовать?
Я пока новичек и не понимаю как правильно применить atoi, как высчитать символы и тд.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2014, 13:20 #15
Цитата Сообщение от GetLucky Посмотреть сообщение
можете привести пример как это реализовать?
Там же реализовано. Чем не пример?
0
05.10.2014, 13:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2014, 13:20
Привет! Вот еще темы с ответами:

В файле input.txt содержатся сведения о группе студентов. переписать данные файла в файл output.txt, отсортировав их по возрастанию - C++
Добрый вечер!!! Я - новичок по работе с С++, помогите, пожалуйста, написать программу на этом языке. В файле input.txt содержатся сведения...

Почти отсортированные случайные данные - C++
что такое почти отсортированные случайные данные? мне необходимо эти данные отсортировать быстрой сортировкой.

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

Как считать данные из файла и вывести в файл - C++
Я сегодня написал 2 программы: Моё решение: #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main() { ...


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

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

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