PDA

View Full Version : read & write file trong VC



abcIT
02-11-2002, 11:15
help help, moi nguo`i giup voi, sap phai nop do` an ro`i nhung co`n mac o cho~ na`y.

1. ha`m random trong VC la` gi` the', to' tra MSDN thi` du`ng la` rand nhu*ng cau lenh sau :
if (rand<1/2) thi` luon luon dung, k0 sao gio` sai, to' cha hieu random cai' kieu gi` nua. ok
2. to' co' 1 lop nhu* sau.

class Item{
char *key;
char *element;
Item *after;
Item *before;
}

Moi nguo`i giup cai' khoan doc va` ghi va`o file trong VC voi 1 file co' tha`nh pha`n la` 1 class nhu* tren nhe, ghi va`o file nhu* na`o, va` duyet file tu` da`u den cuoi nhu* na`o, moi nguo`i help help nhanh nhanh cai' nhe'.

Thanks.

CrazyKing
03-11-2002, 02:23
Hi U !!!
Trong VC hổng có hàm tên random mà có hàm tương tự int Rand(void)
Hàm này trả về một số kiểu int nằm trong phạm vi từ 0 đến RAND_MAX , RAND_MAX được defined trong stdlib.h với giá trị là 0x7fff .
1. Tại sao if(rand()<1/2 ) luôn đúng được , mình đã test thử và 2thấy sai rùi đó ! U xem lại xem !!!!
2. Nếu như tui hổng có lầm thì U đang học cấu trúc dữ liệu 2 phải hông nhỉ ! Thui được rùi , tui sẽ help U cái dzụ ghi đọc file này ! Hè hè , đây là basic của CTTDL2 đó U , sau này đến các thuật toán như phân rã ,trộn ,run.... kia mới khổ !
Cấu trúc Item mà U nói trên dùng để cài đặt một danh sách liên kết vòng !(Hay còn gọi là liên kết kép)
Tui có thể định nghĩa lại class U nói trên dể hiểu và gọn gàng hơn một tí nè :
Class Node
{
int info ; // thông tin của node , U có thể thay trường int bằng một trường nào đó mà U cần định nghĩa cho Node
Node*left,*right ;
}
OK !Gọn hơn rùi nhé !
Bây giờ ghi vào file :
U đọc các hàm sau và xem trong MSDN có cả code ví dụ nữa :
- fopen
- fclose
- fread
- fwrite
- feof()
Ở đây là một danh sách liên kết vòng , do vậy U phải cài đặt được các phương thức cho danh sách này gồm :
- Khởi động danh sách
- Xác định danh sách rỗng
- Xác định danh sách bị đầy
- Số phần tử trong danh sách
- Thêm vào đầu / cuối danh sách.
- Duyệt ngược /xuôi danh sách
.........
......
OK , nếu như U cài đặt được các thủ tục trên do danh sách của U thì coi như xong rùi đó , việc ghi xuống file thì quá dể rùi , và đọc từ file lên cũng vậy !!! Tất cả mọi thao tác duyệt U đều phải duyệt trên buffer chứ hổng có duyệt trực tiếp trên file ! Đọc từ file ra buffer !!!!
U cố gắng coi thêm trong MSDN hoặc coi thêm trong cuốn "cấu trúc dữ liệu , ứng dụng và cài đặt bằng C"
Vậy nhé ! chúc U sẽ hông bị die môn này !!!

abcIT
03-11-2002, 15:14
cac thao tac cua danh sach nhu* them bot, .... ti`m kiem, sap xep..... thi` mi`nh da hoc qua, co`n neu ghi va`o file du`ng cac ha`m chuan cua C nhu* fread, fwrite thi` ok, nhu*ng mi`nh muon du`ng CFile co*, cac ban help mi`nh nhe', trong MSDN thi` no' k0 noi ky~ ve` CFile nen mi`nh van chu*a lam duoc ro~, vi' du nhu* trong C chuan la` "while (!feof(f)" thi` trong CFile la` nhu* na`o, de mi`nh duyet file tu` da`u den cuoi ma`, hi` hi` co`n rand thi` mi`nh thieu da'u (), the' ma` no cha bao sai cac ban nhi?. help nhe'

Nguyen Minh
05-11-2002, 11:04
Có hai cách làm kiểm tra cuối file:
- Cách đơn giản nhất là bạn đọc một lượng byte nhất định bằng hàm Read, nếu nó báo kích thước đọc được nhỏ hơn cái ta yêu cầu thì đó là cuối file rồi.
VD:
extern CFile cfile;
char pbuf[100];
BOOL bEOF = FALSE;
UINT nBytesRead = cfile.Read( pbuf, 100 );
if (nBytesRead<100) bEOF = TRUE;

- Lấy kích thước file ngay sau khi mở (bằng hàm GetStatus) và tự biết phải đọc đến đâu.

n2v82
10-11-2002, 14:22
Dùng luồng vào ra stream trong C++ bạn có thể truy suất file trong Vissualt C, thử đọc phần này trong giáo trình xem nhé, nói dài tớ ngại lắm !