Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Zapisi, ctenie struct v/iz faila / 25 сообщений из 32, страница 1 из 2
29.05.2006, 13:09
    #33757986
gda
gda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
Код: plaintext
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.
#include <stdio.h> 
 
int main(void)
{
    struct Tara {
        char denum[ 50 ];
        float aria;
        int popul;
        int scoli;
        int spitale;
        int is;
    } p;
 
    FILE *f_str;
 
    if ((f_str=fopen("str.txt","w")) == NULL)
    {
        printf("Cannot open input file.\n");
        return  1 ;
    }
                                                                       
    printf("Introdu denumirea tarii: "); scanf("%s",&p.denum); 
    printf("Intodu aria: "); scanf("%f",&p.aria);
    printf("Intodu populatia: "); scanf("%d",&p.popul);
    printf("Intodu nr. de scoli: "); scanf("%d",&p.scoli);
    printf("Intodu nr. de spitale: "); scanf("%d",&p.spitale);
    printf("Intodu nr. de institutii superiaore: "); scanf("%d",&p.is);
 
 
 
    #printf("%s\n",p.denum); 
 
    fclose(f_str);
 
 
 
    return  0 ;
}
 

nujen primer zapisi viseucazanoi structuri v fail... i sootvestveno ctenie ee
...
Рейтинг: 0 / 0
29.05.2006, 13:12
    #33757995
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
автор
fprintf, fwprintf
Print formatted data to a stream.

int fprintf( FILE *stream, const char *format [, argument ]...);


автор
fscanf, fwscanf
Read formatted data from a stream.

int fscanf( FILE *stream, const char *format [, argument ]... );
...
Рейтинг: 0 / 0
29.05.2006, 13:48
    #33758123
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
Код: plaintext
1.
2.
fwrite(&p,sizeof(p), 1 ,f_str);
fread(&p,sizeof(p), 1 ,f_str);
...
Рейтинг: 0 / 0
29.05.2006, 14:19
    #33758239
gda
gda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
Код: plaintext
1.
 fscanf(f_str,"%s%f%d%d%d%d",&arr[ 0 ].denum,&arr[ 0 ].aria,&arr[ 0 ].popul,&arr[ 0 ].scoli,&arr[ 0 ].spitale,&arr[ 0 ].is);
    printf(arr[ 0 ].denum);

soderjanie faila: f_str

Код: plaintext
1.
2.
Moldova  2 . 300000          2         43        2 
Russia   4 . 600000          2         85        6 
Ucraina  7 . 000000          5         93        4 
...
Рейтинг: 0 / 0
29.05.2006, 14:21
    #33758244
gda
gda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
printf("%s",arr[0].denum); nicego ne pocazivaet
...
Рейтинг: 0 / 0
29.05.2006, 14:38
    #33758316
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
Когда делаешь fprintf(), в строке формата между данными ставь пробел, чтобы у тебя одни данные от других отличались разделителями. Потом, когда считываешь, то же самое стовь в параметре формата функции fscanf.
...
Рейтинг: 0 / 0
29.05.2006, 14:45
    #33758336
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
А чем fread и fwrite не понравились? Через них намного удобнее работать с типизированными файлами. Чтение/запись всей структуры сразу, и не нужны дополнительные разделители данных...
...
Рейтинг: 0 / 0
29.05.2006, 14:54
    #33758359
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
Dmitrii K.А чем fread и fwrite не понравились? Через них намного удобнее работать с типизированными файлами. Чтение/запись всей структуры сразу, и не нужны дополнительные разделители данных...

Для лабораторной работы наглядность более предпочтительна, если не оговорены требования
...
Рейтинг: 0 / 0
29.05.2006, 16:19
    #33758644
Goldminer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
Dmitrii K.
Код: plaintext
1.
2.
fwrite(&p,sizeof(p), 1 ,f_str);
fread(&p,sizeof(p), 1 ,f_str);

Только тогда обратить внимание на режим открытия:
Код: plaintext
1.
2.
 
f_str = fopen("str.txt",  "wb" )
...
Рейтинг: 0 / 0
29.05.2006, 16:24
    #33758660
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
GoldminerТолько тогда обратить внимание на режим открытия
Да, совершенно верно, "без b" возможны интересные последствия ))
...
Рейтинг: 0 / 0
29.05.2006, 16:46
    #33758737
gda
gda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
Код: plaintext
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.
#include <stdio.h> 
 
int main(void)
{
    struct Tara {
        char denum[ 50 ];
        float aria;
        int popul;
        int scoli;
        int spitale;
        int is;
    } p, a[ 1000 ];
 
    FILE *f_str;
 
 
    if ((f_str=fopen("str.txt","wb")) == NULL)
    {
        printf("Cannot open input file.\n");
        return  1 ;
    }
 
    printf("Introdu denumirea tarii: "); scanf("%s",&p.denum);
    printf("Intodu aria: "); scanf("%f",&p.aria);
    printf("Intodu populatia: "); scanf("%d",&p.popul);
    printf("Intodu nr. de scoli: "); scanf("%d",&p.scoli);
    printf("Intodu nr. de spitale: "); scanf("%d",&p.spitale);
    printf("Intodu nr. de institutii superiaore: "); scanf("%d",&p.is);
 
    fprintf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",p.denum,p.aria,p.popul,p.scoli,p.spitale,p.is);
    fscanf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",&a[ 0 ].denum,&a[ 0 ].aria,&a[ 0 ].popul,&a[ 0 ].scoli,&a[ 0 ].spitale,&a[ 0 ].is);
    printf("%s",a[ 0 ].denum);
    fclose(f_str);
 
 
    return  0 ;
}
 

postavil probeli ... poliubomu ne pomoglo ...

fprintf polee dlia menea poniatnei cem fwrite ...
...
Рейтинг: 0 / 0
29.05.2006, 16:57
    #33758770
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
Код: plaintext
1.
2.
fprintf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",p.denum,p.aria,p.popul,p.scoli,p.spitale,p.is);
   fscanf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",&a[ 0 ].denum,&a[ 0 ].aria,&a[ 0 ].popul,&a[ 0 ].scoli,&a[ 0 ].spitale,&a[ 0 ].is);
Ты записал строчку в файл и указатель потока работы с файлом у тебя находится сразу за строчкой. Для того, чтобы он сместился на начало файла, надо либо воспользваться функцией fseek(), либо закрыть файл и открыть его заново. А заново, лучше его открывай в режиме для чтения
...
Рейтинг: 0 / 0
29.05.2006, 16:58
    #33758772
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
Pune intre fprintf si fscanf fseek(f_str, 0L, SEEK_SET);
gdafprintf polee dlia menea poniatnei cem fwrite ...
Nimic complicat in folosirea fwrite/fread nu-i:
fwrite(const void *ptr, size_t size, size_t n, FILE *stream);
ptr - adresa structurei cu datele
size - lungimea structurei cu datele
n - numarul de structuri pentru scriere/citire (adica poti sa citesti/scrii mai mult de o stucrura odata)
stream - fisierul, cu care lucrezi

Incearca exemplu, care am scris mai sus.
Completezi datele, inscrii (fwrite), pui curcorul la inceputul fisierului si citesti (fread)
...
Рейтинг: 0 / 0
29.05.2006, 17:02
    #33758791
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
Да, и еще:
1) В режиме доступа к файлу, при открытии, буковка b означает block. Или ты пользуешься функциями предложенными Дмитрием, и записываешь данные в файл в том виде, в котором они у тебя находятся в память или открываешь файл как текстовой, для того, чтобы fscanf и fprintf знали, что они работают с текстовым файлом (тот факт, что они работают сейчас ни о чем не говорит)
...
Рейтинг: 0 / 0
29.05.2006, 17:07
    #33758809
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
Да, забыл уточнить: block - имеется ввиду блок данных, набор всякой всячины, которая может быть чем угодно. Текстовый файл - набор данных, которые предствляются читабельным текстом с небольшим набором управляющих символов (перевод строки, табуляция, ...)
...
Рейтинг: 0 / 0
29.05.2006, 17:11
    #33758826
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
AkhДа, и еще:
1) В режиме доступа к файлу, при открытии, буковка b означает block.
Это binary :) Разница c text - в интерпретации последовательности 0D,0A
...
Рейтинг: 0 / 0
29.05.2006, 17:14
    #33758836
gda
gda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
Код: plaintext
1.
2.
3.
4.
5.
6.
   fwrite(&p,sizeof(p), 1 ,f_str);
//    fprintf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",p.denum,p.aria,p.popul,p.scoli,p.spitale,p.is);            
    fseek(f_str, 0L, SEEK_SET);
    fread(&p,sizeof(p), 1 ,f_str);
//    fscanf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",&a[0].denum,&a[0].aria,&a[0].popul,&a[0].scoli,&a[0].spitale,&a[0].is);        
    printf("%s",a[ 0 ].denum);
    fclose(f_str);

poproboval i fseek i fwrite i fread ... ni h% ne vihodit ..

A kak ispolizuia fread zaliti danie v array, potom mne s atim array nado porabotati ... otsortirovati i vivesti na ecran ...
...
Рейтинг: 0 / 0
29.05.2006, 17:20
    #33758859
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
gda
Код: plaintext
1.
2.
3.
4.
5.
6.
   fwrite(&p,sizeof(p), 1 ,f_str);
//    fprintf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",p.denum,p.aria,p.popul,p.scoli,p.spitale,p.is);            
    fseek(f_str, 0L, SEEK_SET);
    fread(&p,sizeof(p), 1 ,f_str);
//    fscanf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",&a[0].denum,&a[0].aria,&a[0].popul,&a[0].scoli,&a[0].spitale,&a[0].is);        
    printf("%s",a[ 0 ].denum);
    fclose(f_str);

poproboval i fseek i fwrite i fread ... ni h% ne vihodit ..

A kak ispolizuia fread zaliti danie v array, potom mne s atim array nado porabotati ... otsortirovati i vivesti na ecran ...
Вместо
Код: plaintext
printf("%s",a[ 0 ].denum);
поставь
Код: plaintext
printf("%s",p.denum);
...
Рейтинг: 0 / 0
29.05.2006, 17:23
    #33758869
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
gdaA kak ispolizuia fread zaliti danie v array, potom mne s atim array nado porabotati ... otsortirovati i vivesti na ecran ...
Используй массив структур. Обычно в таком случае используется либо динамический массив, либо список... Но для начала объяви статический массив достаточного размера.
...
Рейтинг: 0 / 0
29.05.2006, 17:23
    #33758870
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
gda
poproboval i fseek i fwrite i fread ... ni h% ne vihodit ..


В твоем последнем примере
Код: plaintext
1.
2.
    fprintf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",p.denum,p.aria,p.popul,p.scoli,p.spitale,p.is);
    fscanf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",&a[ 0 ].denum,&a[ 0 ].aria,&a[ 0 ].popul,&a[ 0 ].scoli,&a[ 0 ].spitale,&a[ 0 ].is);

между этих строк вставь fclose и fopen с режимом доступа "r", при первом отрытии файла (для записи) убери букву b. Все должно заработать.

Потом попробуй сделать, как написал Дмитрий - очень полезно. Заодно, когда заработает, посмотри, что у тебя в файле лежит (для сравения). Если найдешь что к чему - это будет для тебя большой шаг
...
Рейтинг: 0 / 0
29.05.2006, 17:25
    #33758875
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
Dmitrii K. AkhДа, и еще:
1) В режиме доступа к файлу, при открытии, буковка b означает block.
Это binary :) Разница c text - в интерпретации последовательности 0D,0A

Ну, бинари, так бинари. Надо было меньше слушать учителей.
...
Рейтинг: 0 / 0
29.05.2006, 17:27
    #33758884
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
Ну вот, поспешил...
a - это у тебя и есть массив структур...
Тогда организуй чтение данных в цикле до конца файла (feof()) и в fread подставляй соотв. элемент массива (&a )
...
Рейтинг: 0 / 0
29.05.2006, 17:29
    #33758890
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
AkhНадо было меньше слушать учителей. Ага, TFM смотреть надо :)
...
Рейтинг: 0 / 0
29.05.2006, 17:33
    #33758902
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
Dmitrii K. AkhНадо было меньше слушать учителей. Ага, TFM смотреть надо :)

Так, блин, похоже на правду. В, принципе, что двоичный, что блочный файл, разница не большая. Понятие только уже
...
Рейтинг: 0 / 0
29.05.2006, 17:43
    #33758927
Goldminer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zapisi, ctenie struct v/iz faila
Dmitrii K. AkhДа, и еще:
1) В режиме доступа к файлу, при открытии, буковка b означает block.
Это binary :) Разница c text - в интерпретации последовательности 0D,0A

И 1A, что немаловажно!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Zapisi, ctenie struct v/iz faila / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]