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

работа с файлами - C++

Восстановить пароль Регистрация
 
funx
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 9
07.06.2012, 19:39     работа с файлами #1
В файле note.txt находится информация о ноутбуках. Каждая строка содержит данные об одной модели. Данные в строке размещаются в следующих полях:
1:20 - наименование модели;
21:24 - цена в долларах США (целое число);
26:28 - масса ноутбука, кг (число с десятичной точкой из 4-х символов);
30:43 - габаритные размеры ноутбука в дюймах (высота х ширина х длина - три числа с десятичной точкой (4 символа, включая точку, разделенные "х"));
44:47 - частота процессора в МГц (целое число из 3-х символов);
49:51 - максимальный объем ОЗУ в мегабайтах (целое число из 3-х символов);
53:56 - размер дисплея по диагонали в дюймах (число с десятичной точкой из 4-х символов, включая точку);
58 - размер видеопамяти в мегабайтах (целое число из 1-го символа);
60:68 - разрешающая способность дисплея в пикселах (два целых числа, разделенные "х");
70:71 - частота регенерация дисплея в Гц (целое число из 2-х символов);
73:77 - объем HDD в гигабайтах (число с десятичной точкой из 5-ти символов);
Пример файла note.txt:
Acer Note Light 2699 5.6 02.0x11.8x08.3 100 040 10.4 1 1024x0768 60 0.774
ASW ND5123T 3489 7.2 02.3x11.8x10.1 133 032 12.1 1 1024x0768 70 1.300
ARMNote TS80CD 3699 7.2 02.0x11.5x08.3 133 064 11.3 1 1024x0768 75 1.300
AST Ascentia H50 4499 7.5 02.3x11.3x09.0 133 040 11.3 1 0800x0600 70 0.774

Примечание. Все неописанные позиции заполнены пробелами.
Файл может быть сформирован с помощью текстового редактора, который не вносит в файл управляющих символов редактирования. Это: FAR, ADITOR, редактор программ в турбо Си, турбо Паскаль и другие редакторы.

Задание.
Выбрать все записи, в которых объем HDD больше 1 гигабайта. Записи в выходном файле должны быть упорядочены в порядке возрастания тактовой частоты процессора ноутбука. Запись в файл осуществлять при помощи функций: fprintf(), fputs().

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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include <STDIO.H>
#include <STRING.H>
#include <MATH.H>
#include <CONIO.H>
#include <PROCESS.H>
struct Note
{
char  name[20],size[15],inch[5],hdd[5],mass[4];
int price,chast,ozu,vid,x,y,chastdisp;
Note
*Next;
};
int i;
char s;
Note *Head=NULL,*NEW;
FILE *f1,*f2;
chten()
{
f1=fopen("note.txt","r");
while(!feof(f1))
{
NEW=new Note;
for(i=0;i<20;i++)
fscanf(f1,"%c",&NEW->name[i]);
fscanf(f1,"%d",&NEW->price);
for(i=0;i<4;i++)
fscanf(f1,"%c",&NEW->mass[i]);
NEW->Next=NULL;
for(i=0;i<16;i++)
fscanf(f1,"%c",&NEW->size[i]);
fscanf(f1,"%d",&NEW->chast);
fscanf(f1,"%d",&NEW->ozu);
for(i=0;i<5;i++)
fscanf(f1,"%c",&NEW->inch[i]);
fscanf(f1,"%d",&NEW->vid);
fscanf(f1,"%d",&NEW->x);
fscanf(f1,"%c",&s);
fscanf(f1,"%d",&NEW->y);
fscanf(f1,"%d",&NEW->chastdisp);
for(i=0;i<6;i++)
fscanf(f1,"%c",&NEW->hdd[i]);
for (i=0;i<2;i++)
if ((NEW->hdd[i]=='1')||(NEW->hdd[i]=='2')||(NEW->hdd[i]=='3')||(NEW->hdd[i]=='4')||(NEW->hdd[i]=='5')||(NEW->hdd[i]=='6')||(NEW->hdd[i]=='7')||(NEW->hdd[i]=='8')||(NEW->hdd[i]=='9'))
if (Head==NULL)
Head=NEW;
else
{
NEW->Next=Head;
Head=NEW;
}
}
fclose(f1);
return(0);
}
zapoln(Note *NEW)
{
f2=fopen("notenew.txt","w");
while(NEW!=NULL)
{
for(i=1;i<20;i++)
fprintf(f2,"%c",NEW->name[i]);
fprintf(f2,"%d",NEW->price);
fprintf(f2," ");
for(i=1;i<4;i++)
fprintf(f2,"%c",NEW->mass[i]);
for(i=0;i<16;i++)
fprintf(f2,"%c",NEW->size[i]);
fprintf(f2,"%d",NEW->chast);
fprintf(f2," ");
fprintf(f2,"%d",NEW->ozu);
for(i=0;i<5;i++)
fprintf(f2,"%c",NEW->inch[i]);
fprintf(f2," ");
fprintf(f2,"%d",NEW->vid);
fprintf(f2," ");
fprintf(f2,"%d",NEW->x);
fprintf(f2,"x");
fprintf(f2,"%d",NEW->y);
fprintf(f2," ");
fprintf(f2,"%d",NEW->chastdisp);
for(i=0;i<6;i++)
fprintf(f2,"%c",NEW->hdd[i]);
fprintf(f2,"\n");
NEW=NEW->Next;
}
fclose(f2);
return(0);
}
sort(Note *head)
{
Note *current = NULL, *first = NULL, *second = NULL;
int isSorted = 0;
while( isSorted==0 ){
isSorted = 1;
current = head;
first = current->Next;
second = first->Next;
while( (second) ){
if(strcmp(first->inch,second->inch)>0){
isSorted = 0;
first->Next = second->Next;
second->Next = first;
current->Next = second;
}
current = current->Next;
first = current->Next;
second = first->Next;
}
}
return (0);
}
main ()
{
clrscr();
chten();
sort(Head);
zapoln(Head);
 
#define MAXLEN 80  //¬*ЄбЁ¬*«м**п ¤«Ё** бва®ЄЁ ў д*©«Ґ
{
char not[40];      //Ё¬п д*©«*
FILE *note;           //⥪бв®ўл© д*©«
char St[MAXLEN+2];  //бв®Є* Їа®зЁв****п Ё§ д*©«*
int n = 5;          //Є®«ЁзҐбвў® бва®Є, ўлўҐ¤Ґ**ле ** нЄа**
char key;           //Є«*ўЁи*, **¦*в*п Ї®«м§®ў*⥫Ґ¬
clrscr();
puts("Џа®б¬®ва ⥪бв®ў®Ј® д*©«*");
puts("‚ўҐ¤ЁвҐ Ї®«*®Ґ Ё¬п д*©«* Ё **¦¬ЁвҐ <Enter>");
printf("->");
scanf("%s",&not);
//ЋвЄалвм д*©« ў ०Ё¬Ґ звҐ*Ёп (r) ⥪бв* (t)
if ((note = fopen(not, "rt")) == NULL)
{
printf("ЋиЁЎЄ* ЇаЁ ®Ўа*йҐ*ЁЁ  Є д*©«г %s\n", not);
getch();
return 0;
}
clrscr();
while (!feof(note))
{
fgets(St, 60, note);
printf("%s", St);
if (++n > 51)
{
printf("\n„«п Їа®¤®«¦Ґ*Ёп **¦¬ЁвҐ");
printf(" «оЎго Є«*ўЁиг...");
key = getch();
gotoxy(1,wherey());
delline;
n = 0;
 
}
}
fclose(note);
printf("\n„«п §*ўҐаиҐ*Ёп **¦¬ЁвҐ <Enter>");
getch(); }
 
s=getch();
}
Вот мой код не работает сортировка, помогите пожалуйста исправить.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2012, 19:39     работа с файлами
Посмотрите здесь:

Работа с файлами C++
C++ Работа с файлами
C++ работа с файлами
C++ Работа с файлами
Работа с файлами C++
C++ Работа с файлами
Работа с файлами C++
C++ Работа с файлами в C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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