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

Чтение из бинарного файла - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Односвязные списки, стек http://www.cyberforum.ru/cpp-beginners/thread28976.html
Помогите пожалуйста, кто может:(. нужно только дописать удаление. вот само задание: удаление из линейного стека входной последовательности целых чисел все узлы, содержащие наиболее часто встречающееся значение. #include <iostream> using namespace std; struct node{ int info; node *link; };
C++ Как убрать окно консоли Всем привет! Посмотрите как можно убрать черное окно чтобы осталась только окно диалога.... http://www.cyberforum.ru/cpp-beginners/thread28971.html
Несоставляемое число C++
Подскажите решение плииз.... Дано N натуральных чисел. Требуется найти минимальное натуральное число, не представимое суммой никаких из этих чисел, если в эту сумму каждое исходное число может входить не более одного раза. Входные данные Входной файл INPUT.TXT в первой строке содержит натуральное число N, не превосходящее 104, далее следуют N строк, в каждой из которых записано по одному...
вывод в файл таблицы C++
Привет всем. Помогите пожалуйста с курсовой, мне нужно написать программу на языке С для вывода в файл таблицы значений функции. Аргумент функции t должен принимать значения от 0 до +2п с шагом дельта t = п/20. 2 пособия пересмотрел, ничего подобного не увидел, даже намёка на данную работу... за рание спасибо.
C++ "Присоединить" DLL http://www.cyberforum.ru/cpp-beginners/thread28943.html
Я написал программу используя wxWidgets и Code::Blocks, скомпилировал ее под windows (компилятор - mingw). При запуске она требует wxmsw28u_gcc.dll. Вопрос в следующем, возможно ли сделать так, чтобы эта библиотека интегрировалась в исполняемый файл программы, чтобы не было необходимости носить ее отдельным файлом? Если да, то как? PS: Не судите строго если вопрос дурацкий, я только учусь...
C++ Как правильно реализовать поиск количества заданого символа Доброго времени суток. Вообщем имеется такой код, в котором нужно найти количество символа а , правильно ли будет так реализовать ? Если правильно , то еще вопрос , при первом же проходе цикла переменная і почемуто присваивает значение 9, как "заставить" цикл нормально работать. void main() { char * symbline = "aaanjfbrie"; int linelength = strlen(symbLine) int findsymbcount() ... подробнее

Показать сообщение отдельно
YurA_280784
Заблокирован
08.04.2009, 10:58     Чтение из бинарного файла
Я прекрасно понял проблему!!!
Говорю же если пишешь динамикой то со чтением в структуру сложновато, т.к. записи в конечном итоге имеют различную длину, вот более или мене работоспособны код, обрати внимание когда всё фиксированно то и прога не вылетает.
Ошибки в твоём коде,
1. твой файл базы данных в ряде функций не закрывается, но это не сильная ошибка вдруг ты не хочешь чтоб другие проги имели к нему доступ
2. И какже ты хочешь число записей в своей базе подсчитать, а????Ели у тебя даже переменной под твои RowNumber не отведено, я решил єту проблему, тем что в моём варианте у меня записи фиксированной длины и я могу размер файла на размер структуры DataRow поделить вот и выйдет число.
3. в случае сбоя в readTable например указатель в файле застрял твоя addRow может привести к зацикливанию!!!
4. это ж в каком учебнике такое определение длины строки написано????
C++
1
2
int size = readInt(stream);
char* res = new char[size + 1];
У тебя там числа порядка INT_MAX появляются єто меня вообще поразило!!!
5 Писать прототипы функций впереди main() - єто очень плохой стиль программирования, єто в любом учебнике написано,вот
Вообщем kitten, просто учти мои слова в своей проге, а вообще если ты хочешь динамики в строках, то
заведи в своём файле разделители между полями структуры DataRow, к примеру пусть єто символ @ а также между самими структурами например > и тогда можно читать весь файл как текст а в нём искать подстроки >DataRow>, а уже в єтих подстроках искать поля @поле@ и советую завести переменную для общего числа структур DataRow содержащихся в файле, так будет легче віделять память и к томуже в настоящих БД при их повреждении можно получить число повреждённых записей...
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
#include <stdio.h>
#include <string.h>
#include <assert.h>
 
FILE *file;//лучше сделать глобальной переменной
 
struct dataRow
{
        int id;
        char surname_owner[64];
        int number_of_processors; //число процессоров
        char type_of_processors[64]; //тип процессоров
        int size_memory; //объем памяти
        char type_of_video_controller[64]; //тип видеоконтроллера
        int size_of_video_buffer; //объем видеопамяти
        char type_of_hard_disk[64]; //тип винчестера
        int number_of_hard_disk; //число винчестера
        char capacity_of_hard_disk[64]; //емкость винчестера
        int number_of_integrated_controller; //кол-во интегрированных контроллеров
        int number_of_outside_device; //колво внешних устройств
        char operational_system[64]; //операционная система
        //char str[256];
};
 
struct dataTable
{
    struct dataRow Rows[100];
    int RowNumber;
};
 
void printRow(struct dataRow Row);
void writeInt(FILE* stream, int a);
void writeString(FILE* stream, char *a);
int readInt(FILE* stream);
char* readString(FILE* stream);
void addRow(struct dataRow row, struct dataTable* table);
void readTable(FILE* stream, struct dataTable* table); 
void writeTable(FILE* stream, struct dataTable table);
void printTable(struct dataTable table);
 
void p1();//обработчик 1-го пункта меню
void p2();//обработчик 2-го пункта меню
void p3();//обработчик 3-го пункта меню
 
void main()
{
    printf("\t\tMENU\r\n");
    printf("1 - For adding row print\r\n");
    printf("2 - For showing table print\r\n");
    printf("3 - For searching print\r\n");
    int number;bool bContinue = true;
    scanf("%d", &number);
    switch(number)
    {
    case 1:
        p1();
        break;
    case 2:
        p2();
        break;
    case 3:
        p3();
        break;
    default :
        bContinue = false;
        break;
    }
    if(bContinue)
        main();
}
 
void p1()
{
    
    struct dataRow row;
    printf ("Enter id (int)\n");                
    scanf ("%d", &row.id);
    
    printf ("Enter surname_owner (string)\n");  
    scanf ("%s", &row.surname_owner);
    
    printf ("Enter number_of_processors (int)\n");
    scanf ("%d", &row.number_of_processors);
        
    printf ("Enter type_of_processors (string)\n");     
    scanf ("%s", &row.type_of_processors);
    
    printf ("Enter size_memory (int)\n");
    scanf ("%d", &row.size_memory);
        
    printf ("Enter type_of_video_controller (string)\n");
    scanf ("%s", &row.type_of_video_controller);
        
    printf ("Enter size_of_video_buffer (int)\n");
    scanf ("%d", &row.size_of_video_buffer);
     
    printf ("Enter type_of_hard_disk (string)\n");
    scanf ("%s", &row.type_of_hard_disk);
        
    printf ("Enter number_of_hard_disk (int)\n");
    scanf ("%d", &row.number_of_hard_disk);
        
    printf ("Enter capacity_of_hard_disk (string)\n"); 
    scanf ("%s", &row.capacity_of_hard_disk);
       
    printf ("Enter  number_of_integrated_controller (int)\n");
    scanf ("%d", &row.number_of_integrated_controller);
    
    printf ("Enter number_of_outside_device (int)\n");
    scanf ("%d", &row.number_of_outside_device);
    
    printf ("Enter operational_system (string)\n");
    scanf ("%s", &row.operational_system);
        
    if( (file = fopen("KR.txt", "wb+")) )
    {
        fwrite (&row, 1, sizeof(dataRow), file);
        fclose(file);
        printf("KR.txt yspeshno sozdan\r\n");
    }
    else
        printf("Oshibka sozdaniya KR.txt\r\n");
}
 
void p2()
{
    struct dataTable table;int i;
    if( (file = fopen("KR.txt", "rb+")) )
    {
        readTable(file, &table);
        fclose(file);
        for(i = 0; i < table.RowNumber; i++)
            printRow(table.Rows[i]);
    }
    else
        printf("Oshibka chteniya KR.txt\r\n");
}
 
void p3()
{
    //
}
 
void printRow(struct dataRow Row)
{
    printf("%d %s %d %s %d %s %d %s %d %s %d %d %s\n", 
        Row.id, Row.surname_owner, 
        Row.number_of_processors, 
        Row.type_of_processors, 
        Row.size_memory, 
        Row.type_of_video_controller, 
        Row.size_of_video_buffer, 
        Row.type_of_hard_disk, 
        Row.number_of_hard_disk, 
        Row.capacity_of_hard_disk, 
        Row.number_of_integrated_controller, 
        Row.number_of_outside_device, 
        Row.operational_system);
}
 
void writeInt(FILE* stream, int a)
{
    fwrite(&a, sizeof(int), 1,stream);
}
 
void writeString(FILE* stream, char *a)
{
    writeInt(stream, (int)strlen(a));
    fwrite(a, strlen(a), 1, stream);
}
 
int readInt(FILE* stream)
{
    int showing;
    fread(&showing, sizeof(int), 1, stream);
    return showing;
}
 
char* readString(FILE* stream)
{
//  int size = readInt(stream);
 //   char* res = new char[size + 1];
    char res[64];
    fread((void *)res, 1, 64, stream);
    return res;
}
 
void addRow(struct dataRow row, struct dataTable* table)
{
    table->Rows[table->RowNumber - 1] = row;
    //table->RowNumber++;
}
 
void readTable(FILE* stream, struct dataTable* table)
{
    int k=0;
    struct dataRow row;
    fseek(file,0,SEEK_END);
    table->RowNumber = ftell(file)/sizeof(row);
    fseek(file,0,SEEK_SET);
    for(int i=0; i < table->RowNumber; i++)
    {
        row.id                   = readInt(stream);   //int
        strcpy(row.surname_owner,readString(stream));//string
        row.number_of_processors = readInt(stream);   //int
        strcpy(row.type_of_processors,readString(stream));//string
        row.size_memory          = readInt(stream);   //int
        strcpy(row.type_of_video_controller,readString(stream));//string
        row.size_of_video_buffer = readInt(stream);   //int
        strcpy(row.type_of_hard_disk,readString(stream));//string
        row.number_of_hard_disk  = readInt(stream);   //int
        strcpy(row.capacity_of_hard_disk,readString(stream));//string
        row.number_of_integrated_controller = readInt(stream);//int
        row.number_of_outside_device = readInt(stream);//int
        strcpy(row.operational_system,readString(stream));//string
        addRow(row, table);
    }
}
 
void writeTable(FILE* stream, struct dataTable table)
{
    writeInt(stream, table.RowNumber);
    for(int i = 0; i < table.RowNumber; i++)
    {
        writeInt(stream,    table.Rows[i].id);
        writeString(stream, table.Rows[i].surname_owner);
        writeInt(stream,    table.Rows[i].number_of_processors);
        writeString(stream, table.Rows[i].type_of_processors);
        writeInt(stream,    table.Rows[i].size_memory);
        writeString(stream, table.Rows[i].type_of_video_controller);
        writeInt(stream,    table.Rows[i].size_of_video_buffer);
        writeString(stream, table.Rows[i].type_of_hard_disk);
        writeInt(stream,    table.Rows[i].number_of_hard_disk);
        writeString(stream, table.Rows[i].capacity_of_hard_disk);
        writeInt(stream,    table.Rows[i].number_of_integrated_controller);
        writeInt(stream,    table.Rows[i].number_of_outside_device);
        writeString(stream, table.Rows[i].operational_system);
    }
}
 
void printTable(struct dataTable table)
{
    if( (file = fopen("KR.txt", "rb")) )
    {
        for(int i = 0; i != feof(file); i++)
        {
            struct dataTable table;
            struct dataRow row;
            fread (&row, 1,sizeof(struct dataRow), file);
            printRow(table.Rows[i]);
        }
        fclose(file);
    }
    else
        printf("Oshibka otkritiya KR.txt");
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru