quynh_khoi
02-12-2004, 00:02
Chào các bạn,
Các bạn làm ơn giúp mình cái này chút, mình mới học C/C++ nên không biết cách làm thế nào để đọc được dữ liệu từ một file trên máy sang một mảng 1 chiều gồm các phần tử là các struct. Chẳng hạn mình có file dữ liệu (dulieu.dat) có dạng như sau:
02K1938
02T3
Ngo Ba Quynh Khoi
30
10
1983
Vietnam
7.89
Tot
Gioi
Kha
02K1939
02T3
Hoang Hanh Thao
10
10
1983
Vietnam
8.01
Tot
Gioi
Gioi
Trong file dữ liệu trên thì mỗi dòng trong 11 dòng đầu tiên là một trường của một struct gồm những thông tin về một sinh viên, mình đã khai báo struct như sau:
#define String_Limit 30
#define Array_Limit 200
typedef
char String_Type[String_Limit];
typedef
struct Date
{
unsigned char Day;
unsigned char Month;
unsigned Year;
};
typedef
struct StuInfor
{
char Maso[8];
char Lop[6];
String_Type Name;
Date Birthday;
String_Type Que_Quan;
float GPA;
char Credits[8];
char Hoc_Bong[8];
char XL_Hoc_Tap[8];
} Student_Record;
typedef
Student_Record Array_Of_Records[Array_Limit];
FILE *StuFile, *NewStuFile;
Array_Of_Records Student;
int NumRecs;
char Error;
Vậy các bạn làm ơn chỉ giúp mình cách để đọc nội dung file dulieu.dat đó vào trong từng phần tử của mảng 1 chiều Array_Of_Records, tức là phần tử 0 của mảng Array_Of_Records sẽ là một struct chứa 11 dòng đầu tiên, tiếp đến là các phần tử thứ 1, 2, 3 …Mình đã thử dùng hàm fread để đọc nhưng không thành công, không biết là bị sai ở đâu, mình đã dùng hàm fread như sau:
void Read_File(Array_Of_Records Student, int &Limit, int &NumRecs, char &Error)
{
StuFile = fopen("dulieu.dat","rb");
NumRecs = 0;
Error = FALSE;
while ((!(feof(StuFile))) && (!(Error)))
{
if (NumRecs < Limit)
{
fread(&Student[NumRecs],sizeof(Student_Record),1,StuFile);
NumRecs++;
}
else
Error = TRUE;
}
fclose(StuFile);
}
Các bạn hãy viết lại giúp mình đoạn mã trên được không, mình cảm ơn nhiều !
Các bạn làm ơn giúp mình cái này chút, mình mới học C/C++ nên không biết cách làm thế nào để đọc được dữ liệu từ một file trên máy sang một mảng 1 chiều gồm các phần tử là các struct. Chẳng hạn mình có file dữ liệu (dulieu.dat) có dạng như sau:
02K1938
02T3
Ngo Ba Quynh Khoi
30
10
1983
Vietnam
7.89
Tot
Gioi
Kha
02K1939
02T3
Hoang Hanh Thao
10
10
1983
Vietnam
8.01
Tot
Gioi
Gioi
Trong file dữ liệu trên thì mỗi dòng trong 11 dòng đầu tiên là một trường của một struct gồm những thông tin về một sinh viên, mình đã khai báo struct như sau:
#define String_Limit 30
#define Array_Limit 200
typedef
char String_Type[String_Limit];
typedef
struct Date
{
unsigned char Day;
unsigned char Month;
unsigned Year;
};
typedef
struct StuInfor
{
char Maso[8];
char Lop[6];
String_Type Name;
Date Birthday;
String_Type Que_Quan;
float GPA;
char Credits[8];
char Hoc_Bong[8];
char XL_Hoc_Tap[8];
} Student_Record;
typedef
Student_Record Array_Of_Records[Array_Limit];
FILE *StuFile, *NewStuFile;
Array_Of_Records Student;
int NumRecs;
char Error;
Vậy các bạn làm ơn chỉ giúp mình cách để đọc nội dung file dulieu.dat đó vào trong từng phần tử của mảng 1 chiều Array_Of_Records, tức là phần tử 0 của mảng Array_Of_Records sẽ là một struct chứa 11 dòng đầu tiên, tiếp đến là các phần tử thứ 1, 2, 3 …Mình đã thử dùng hàm fread để đọc nhưng không thành công, không biết là bị sai ở đâu, mình đã dùng hàm fread như sau:
void Read_File(Array_Of_Records Student, int &Limit, int &NumRecs, char &Error)
{
StuFile = fopen("dulieu.dat","rb");
NumRecs = 0;
Error = FALSE;
while ((!(feof(StuFile))) && (!(Error)))
{
if (NumRecs < Limit)
{
fread(&Student[NumRecs],sizeof(Student_Record),1,StuFile);
NumRecs++;
}
else
Error = TRUE;
}
fclose(StuFile);
}
Các bạn hãy viết lại giúp mình đoạn mã trên được không, mình cảm ơn nhiều !