Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
zuranika
1 / 1 / 0
Регистрация: 18.04.2010
Сообщений: 45
1

Сохранение структуры в файл

03.11.2010, 20:43. Просмотров 1147. Ответов 9
Метки нет (Все метки)

Есть структура
C++
1
2
3
4
5
6
7
8
        struct Table
        {
        int Number[100];
        AnsiString Name[100];
        float S[100];
        int People[100];
        int Year[100];
        };
неоходимо сохранить её в фаил а потом считать её отдуда. Как это лучше сделать.
пытался сохранять
C++
1
2
3
4
FILE *f;
f=fopen("Table.dat","wt");
fwrite(&t,sizeof(t),1,f);
fclose(f);
ничего не получилось.Подскажите если не трудно,
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2010, 20:43
Ответы с готовыми решениями:

Сохранение в файл структуры
Здравствуйте. Никак не получается сохранить структуру в текстовый файл. Вот код программы:FILE *f;...

Сохранение структуры в файл.
Почему не сохраняет в файл структуру.void __fastcall Tmain::BitBtn1Click(TObject *Sender) { ...

Сохранение положения компонента на форме (Сохранение параметра в Ini-файл)
Не знаю верно ли назвал тему. Доброго вечера тебе, всяк сюда входящий. Подскажите пожалуйста с...

Сохранение и загрузка структуры
Делаю курсовую на тему Эллектронный органайзер, столкнулся с проблемой, которую никак не получается...

Сохранение значения структуры после перезапуска
Добрый день. Посоветуйте плиз, такой вопрос Имеется структура, одному члену которой (тип String)...

9
Lerny
56 / 56 / 10
Регистрация: 14.03.2010
Сообщений: 157
03.11.2010, 20:52 2
А где именно проблема появляется? Напишите весь код.
1
zuranika
1 / 1 / 0
Регистрация: 18.04.2010
Сообщений: 45
03.11.2010, 21:02  [ТС] 3
проблема в том что я не могу потом считать из файла в эту структуру
C++
1
2
3
FILE *in;
in=fopen("Table.dat","rb");
fread(&t,sizeof(t),1,in);
приведите пожалуста пару примеров, а я попробую сам потом разобаться.
0
Lerny
56 / 56 / 10
Регистрация: 14.03.2010
Сообщений: 157
03.11.2010, 21:21 4
Цитата Сообщение от zuranika Посмотреть сообщение
проблема в том что я не могу потом считать из файла в эту структуру


FILE *in;
in=fopen("Table.dat","rb");
fread(&t,sizeof(t),1,in);

приведите пожалуста пару примеров, а я попробую сам потом разобаться.
У меня так всё работает. У вас программа компилируется? Какие ошибки выпускает?
1
zuranika
1 / 1 / 0
Регистрация: 18.04.2010
Сообщений: 45
03.11.2010, 21:35  [ТС] 5
программа компилируется но не считывает из файла информацию
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Table t;
FILE *in;
int n;
in=fopen("Table.dat","rb");
n=fread(&t,sizeof(t),1,in);
 
for(i=1;i<=n+1; i++)
{
             StringGrid1->Cells[0][i]=IntToStr(t.Number[i-1]);
             StringGrid1->Cells[1][i]=t.Name[i-1];
             StringGrid1->Cells[2][i]=FloatToStr(t.S[i-1]);
             StringGrid1->Cells[3][i]=IntToStr(t.People[i-1]);
             StringGrid1->Cells[4][i]=IntToStr(t.Year[i-1]);
             StringGrid1->RowCount=StringGrid1->RowCount+1;
}
если быть точным вот код из структуры заполняется таблица. Код заполнения таблицы испытан и работает.
0
Lerny
56 / 56 / 10
Регистрация: 14.03.2010
Сообщений: 157
03.11.2010, 21:39 6
А вы попробуйте запихнуть на форму Edit:
C++
1
Edit1->Text=IntToStr(t.Number[0])
1
zuranika
1 / 1 / 0
Регистрация: 18.04.2010
Сообщений: 45
03.11.2010, 21:44  [ТС] 7
я как раз через Edit и ввожу данные в структуру:
C++
1
2
3
4
5
             t.Number[i-1]=StrToInt(Edit1->Text);
             t.Name[i-1]=Edit2->Text;
             t.S[i-1]=StrToFloat(Edit3->Text);
             t.People[i-1]=StrToInt(Edit4->Text);
             t.Year[i-1]=StrToInt(Edit5->Text);
0
Lerny
56 / 56 / 10
Регистрация: 14.03.2010
Сообщений: 157
03.11.2010, 21:49 8
Скажи цель работы программы. Т.к. причина видимо не в считывании из файла. Напиши весь код, сейчас глянем и вычленим ошибку.
1
zuranika
1 / 1 / 0
Регистрация: 18.04.2010
Сообщений: 45
03.11.2010, 21:54  [ТС] 9
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
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TStringGrid *StringGrid1;
        TEdit *Edit1;
        TEdit *Edit2;
        TEdit *Edit3;
        TEdit *Edit4;
        TEdit *Edit5;
        TButton *Button1;
        TButton *Button2;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
private:    // User declarations
public:
         int i;
         struct Table
        {
        int Number[100];
        AnsiString Name[100];
        float S[100];
        int People[100];
        int Year[100];
        };
 
 
        // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
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
#include <vcl.h>
#pragma hdrstop
#include "fstream.h"
#include "stdio.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
Table t;
 FILE *in;
 int n;
in=fopen("Table.dat","rb");
n=fread(&t,sizeof(t),10,in);
fclose(in);
for(i=1;i<=n+1; i++)
{
             StringGrid1->Cells[0][i]=IntToStr(t.Number[i-1]);
             StringGrid1->Cells[1][i]=t.Name[i-1];
             StringGrid1->Cells[2][i]=FloatToStr(t.S[i-1]);
             StringGrid1->Cells[3][i]=IntToStr(t.People[i-1]);
             StringGrid1->Cells[4][i]=IntToStr(t.Year[i-1]);
             StringGrid1->RowCount=StringGrid1->RowCount+1;
             }
 }
//---------------------------------------------------------------------------
 
 
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
 Table t;
 
i=StringGrid1->RowCount-1;
 if(Edit1->Modified)
    if(Edit2->Modified)
      if(Edit3->Modified)
        if(Edit4->Modified)
          if(Edit5->Modified) // проверка заполнения
           {
             t.Number[i-1]=StrToInt(Edit1->Text);
             t.Name[i-1]=Edit2->Text;
             t.S[i-1]=StrToFloat(Edit3->Text);
             t.People[i-1]=StrToInt(Edit4->Text);
             t.Year[i-1]=StrToInt(Edit5->Text);
             //присваиваем елементам структуры Table Соответствующие
             // значения Editов
 
             StringGrid1->Cells[0][i]=IntToStr(t.Number[i-1]);
             StringGrid1->Cells[1][i]=t.Name[i-1];
             StringGrid1->Cells[2][i]=FloatToStr(t.S[i-1]);
             StringGrid1->Cells[3][i]=IntToStr(t.People[i-1]);
             StringGrid1->Cells[4][i]=IntToStr(t.Year[i-1]);
              // заполняем таблицу из структуры
             StringGrid1->RowCount=StringGrid1->RowCount+1;
             // добавляем строку в таблицу
             Edit1->Clear();
             Edit2->Clear();
             Edit3->Clear();
             Edit4->Clear();
             Edit5->Clear();
            }
//работает!
}
//---------------------------------------------------------------------------
 
 
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Table t;
FILE *f;
f = fopen("Table.dat","wb");
fwrite(&t,sizeof(t),10,f);
fclose(f);
}
//---------------------------------------------------------------------------
вобщем надо вводимымые данные присвоить елементам структуры, после чего из структуры перенести в таблицу(это всё работает) потом данные из структуры записать в фаил. при загрузке программы данные из фаила считать в структуру, а из структуры заполнить таблицу.
0
PointsEqual
ниначмуроФ
842 / 526 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
03.11.2010, 22:22 10
в с++ с классами это выглядит примерно так

пусть есть класс person

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class person{
protected:
  char name[80];
  int age;
 
public:
   void showdata(){
      cout<<"ИМЯ"<<name;
      cout<<"ВОЗРАСТ"<<age;
  }
  
   void getdata(){
  //.....
  }
 
};
запись:

C++
1
2
3
4
5
6
7
8
int main(){
  person pers;
  getdata();
  ifstream infile("pers.dat", ios::binary);
  infile.read(reinterpret_cast<char*>(&pers), sizeof(pers));
  //pers.showdata();
  return 0;
}
чтение
C++
1
2
3
4
5
6
7
8
9
10
//....
file.seekg(0);
 
file.read(reinterpret_cast<char*>(&pers), sizeof(pers));
while( !file.eof() ){
   cout<<"Человек:"
pers.showdata();
file.read(reinterpret_cast<char*>(&pers), sizeof(pers));
}
//....
Добавлено через 12 минут
в записи не read а write
1
03.11.2010, 22:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2010, 22:22

Задачи: структуры, динамические массивы, сохранение
Помогите, пожалуйста. После завтра экзамен по ИС. есть задачи, которые будут на экзамене. помогите...

Сохранение в файл. Если файл указан некорректно
Здравствуйте. Есть Edit4, в котором пользователь указывает, в какой файл сохранять данные....

Сохранение в файл
Добрый вечер! Подскажите, как это (параметры, а не текст) сохранить в файл, а при необходимости...


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

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

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