Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87

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

04.10.2014, 21:24. Показов 1815. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.10.2014, 21:24
Ответы с готовыми решениями:

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

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

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

19
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87
05.10.2014, 11: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
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 прикрепляю к посту.
Вложения
Тип файла: txt note.txt (1.3 Кб, 15 просмотров)
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2014, 11:59
Цитата Сообщение от GetLucky Посмотреть сообщение
Пример файла note.txt прикрепляю к посту.
Кривые записи присутствуют.
0
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87
05.10.2014, 12:00  [ТС]
alsav22, в плане?
У меня отображение как на скрине ниже.
Миниатюры
Считать данные о ноутбуках с .txt, обрабатывать их и записывать в .bin файл отсортированные данные  
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2014, 12:02
Цитата Сообщение от 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
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87
05.10.2014, 12:04  [ТС]
alsav22, потер. перезалил.
Вложения
Тип файла: txt note.txt (1.3 Кб, 21 просмотров)
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2014, 12:08
Я бы тому, кто такой файл создавал, руки оторвал. Так сделано специально, чтобы извлекать данные сложно было?

Добавлено через 1 минуту
Цитата Сообщение от GetLucky Посмотреть сообщение
потер. перезалил.
Неправильно было?
0
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87
05.10.2014, 12:08  [ТС]
alsav22, этот файл был вообще дан в текстом в docx. Можете отредачить как будет удобнее.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2014, 12:10
Цитата Сообщение от GetLucky Посмотреть сообщение
этот файл был вообще дан в текстом в docx. Можете отредачить как будет удобнее.
Я не об этом, а о самом формате сохранения данных текстовым методом и в одной строке.
0
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87
05.10.2014, 12:11  [ТС]
alsav22, к сожаленью такое задание.
Как я понимаю нужно будет разбивать стринговую переменную на части и преобразовывать с помощью atoi?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2014, 12:23
Цитата Сообщение от GetLucky Посмотреть сообщение
Как я понимаю нужно будет разбивать стринговую переменную на части и преобразовывать с помощью atoi?
Если просто число в строке, то методы форматируемого чтения и так прочитают число (там, где числа разделены х, тоже можно считать как числа). Тут самое сложное - отделить название модели от всего остального, потому как непонятно, а где оно, это название, собственно, заканчивается.
0
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87
05.10.2014, 12:25  [ТС]
alsav22, как на счет примера что есть в 2 посте?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2014, 12:47
Цитата Сообщение от GetLucky Посмотреть сообщение
как на счет примера что есть в 2 посте?
Если поля записей имеют фиксированную ширину, то можно и так.
0
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87
05.10.2014, 12:49  [ТС]
alsav22, можете привести пример как это реализовать?
Я пока новичек и не понимаю как правильно применить atoi, как высчитать символы и тд.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2014, 13:20
Цитата Сообщение от GetLucky Посмотреть сообщение
можете привести пример как это реализовать?
Там же реализовано. Чем не пример?
0
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87
05.10.2014, 13:22  [ТС]
alsav22, ну этот код писал не я и мне в нем сложно разобраться. Да еще и комментариев не хватает. Можете по нему хотя бы объяснить?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2014, 13:35
Цитата Сообщение от GetLucky Посмотреть сообщение
Можете по нему хотя бы объяснить?
Там объяснять особенно нечего. Сначала читаются строки (не более 99 символов) из файла, слово строки, с 43 индекса, перводится в число, сравнивается со 120, если больше, увеличивается счётчик k. После прочтения всех строк, значение счётчика записывается в файл. После этого опять читаются строки из файла. Опять проверяется слово строки, с 43 индекса, если это число больше 120, то дальше идёт занесение в массив NOTEBOOK a[16] слов строки, которые переводятся в числа (кроме первого поля с названием, это просто копируется).
0
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87
05.10.2014, 13:39  [ТС]
alsav22, программа неправильно выводит данные в терминал.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2014, 14:02
Цитата Сообщение от GetLucky Посмотреть сообщение
программа неправильно выводит данные в терминал.
И что? Может быть. Какое это отношение имеет к этому?
Цитата Сообщение от GetLucky Посмотреть сообщение
Можете по нему хотя бы объяснить?
0
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87
05.10.2014, 15:02  [ТС]
alsav22, просто хотел, что бы Вы помогли разобраться в программе..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.10.2014, 15:02
Помогаю со студенческими работами здесь

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

Функция: считать данные из файла txt и передать в массив
Доброго времени знатаки, Как правильно написать функиця которая считывает данные из файла txt, и передает данные массив. Есть у нас...

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

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

Как из txt файла с hex перевести данные в bin
добрый день! Задача такова есть текстовый файл с hex строками. надо их извлечь и поместить в .bin но так что бы они остались теме же....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru