Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Cách đọc dữ liệu từ 1 file vào mảng cấu trúc?

  1. #1
    Ngày gia nhập
    01 2010
    Nơi ở
    Hà Nội
    Bài viết
    37

    Mặc định Cách đọc dữ liệu từ 1 file vào mảng cấu trúc?

    Mình có một bài tập thế này

    Tạo một file văn bản nội dung là danh sách lóp cỉa sinh viên, Mỗi dòng gồm 3 trường sau:
    STT Mã số SV Họ và Tên
    sau đó đọc các thông tin này từ file vào một mảng cấu trúc.
    Làm sao để đọc từng loại dữ liệu vào struct? Dùng đọc theo dòng hay đọc theo ký tự?

    Cảm ơn!
    Cám ơn mỗi sớm mai thức dậy
    Ta có thêm ngày nữa để yêu thương

  2. #2
    Ngày gia nhập
    04 2010
    Nơi ở
    Recycle Bin
    Bài viết
    358

    Đầu tiên bạn phải tạo struct gồm {STT Mã số SV Họ và Tên} tạm đặt là ten_bien

    1.Dùng lệnh fread để đọc. Cú pháp:
    C Code:
    1. int fread(&ten_bien, sizeof(ten_bien), 1, con_tro_file);
    giá trị của hàm fread != 1 là kết thúc file.

    2.Đọc bằng fread thì khi ghi file bạn nên dùng hàm fwrite. Cú pháp:
    C Code:
    1. int fwrite(&ten_bien, sizeof(ten_bien), 1, con_tro_file);
    YH : lobuocphuudu_218
    Phone : 0126 463 5095

    http://forums.congdongcviet.com/signaturepics/sigpic55872_2.gif

  3. #3
    Ngày gia nhập
    01 2010
    Nơi ở
    Hà Nội
    Bài viết
    37

    Trích dẫn Nguyên bản được gửi bởi conrongchautien Xem bài viết
    Đầu tiên bạn phải tạo struct gồm {STT Mã số SV Họ và Tên} tạm đặt là ten_bien

    1.Dùng lệnh fread để đọc. Cú pháp:
    C Code:
    1. int fread(&ten_bien, sizeof(ten_bien), 1, con_tro_file);
    giá trị của hàm fread != 1 là kết thúc file.

    2.Đọc bằng fread thì khi ghi file bạn nên dùng hàm fwrite. Cú pháp:
    C Code:
    1. int fwrite(&ten_bien, sizeof(ten_bien), 1, con_tro_file);
    int fread(&ten_bien, sizeof(ten_bien), 1, con_tro_file);

    Cái ten_bien mình tô đỏ là là tên biến struct hả bạn, nhưng làm sao để đọc từng yếu tố một, ví dụ một dòng có STT Mã số SV Họ và tên thì tách STT ra ten_bien.stt, mã số SV ra ten_bien.masv, còn tên thì ra ten_bien.hoten?
    Cám ơn mỗi sớm mai thức dậy
    Ta có thêm ngày nữa để yêu thương

  4. #4
    Ngày gia nhập
    10 2007
    Bài viết
    12

    Lệnh fread chỉ đọc được các cấu trúc cố định trong khi cấu trúc chứa thông tin sinh viên của bạn có chứa dữ liệu có độ dài thay (tên sinh viên).

    Bạn nên dùng lệnh strtoken. Chương trình sẽ đọc từng dòng dữ liệu, truyền vào lệnh strtoken cùng với dấu phân cách là kí tự space, ta sẽ được từng thành phần của cấu trúc.

  5. #5
    Ngày gia nhập
    04 2010
    Nơi ở
    Recycle Bin
    Bài viết
    358

    Một ví dụ về cách đọc ghi 1 struct trên file
    C++ Code:
    1. struct DATE
    2. {
    3.     int ngay;
    4.     int thang;
    5.     int nam;
    6. };
    7.  
    8. typedef struct Sach
    9. {
    10.     char MaSach[8] ;
    11.     char TuaSach[50] ;
    12.     char TacGia[50];
    13.     int SoTrang;
    14.     DATE ThoiGianXB;
    15.     int TongSL,SLHienTai;
    16.     int Tu,Ke,Ngan;
    17. }ListSach[100];
    18.  
    19. ListSach a;
    20. int n=0 ;
    21.  
    22. void GhiDuLieu()
    23. {
    24.     FILE *f;
    25.     f=fopen("Sach.DAT","wb");
    26.     fwrite(&n,sizeof(int),1,f);
    27.     for(int i=0;i<n;i++)
    28.         fwrite(&a[i],sizeof(Sach),1,f);
    29.     fclose(f);
    30. }
    31. void DocDuLieu()
    32. {
    33.     FILE *f;
    34.     f=fopen("Sach.DAT","rb");
    35.     if (f==NULL )
    36.     {
    37.         printf("Khong tim thay file");
    38.         getch();
    39.     }
    40.     else
    41.     {
    42.         fread(&n,sizeof(int),1,f);
    43.         for (int i=0;i<n;i++)
    44.             fread(&a[i],sizeof(Sach),1,f);
    45.         fclose(f);
    46.     }
    47. }
    Mình thấy cách này đơn giản nhất.
    Bạn cũng có thể ghi từng thành phần của struct vào file. Và đọc ra theo đúng thứ tự và đúng định dạng ghi vào file. Nhưng code khá vất vả và khó hiểu.
    YH : lobuocphuudu_218
    Phone : 0126 463 5095

    http://forums.congdongcviet.com/signaturepics/sigpic55872_2.gif

  6. #6
    Ngày gia nhập
    01 2010
    Nơi ở
    Hà Nội
    Bài viết
    37

    Mặc định Cách đọc dữ liệu từ 1 file vào mảng cấu trúc?

    Trích dẫn Nguyên bản được gửi bởi conrongchautien Xem bài viết
    Mình thấy cách này đơn giản nhất.
    Bạn cũng có thể ghi từng thành phần của struct vào file. Và đọc ra theo đúng thứ tự và đúng định dạng ghi vào file. Nhưng code khá vất vả và khó hiểu.
    Nhưng mà đề bài của mình ra là cho một file văn bản có sẵn, mỗi dòng của văn bản có 3 yếu tố, đọc file văn bản và lưu vào một mảng struct

    Trong ví dụ của bạn là ghi một struct ra một file văn bản thì phải
    Cám ơn mỗi sớm mai thức dậy
    Ta có thêm ngày nữa để yêu thương

  7. #7
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Trích dẫn Nguyên bản được gửi bởi piavg Xem bài viết
    int fread(&ten_bien, sizeof(ten_bien), 1, con_tro_file);

    Cái ten_bien mình tô đỏ là là tên biến struct hả bạn, nhưng làm sao để đọc từng yếu tố một, ví dụ một dòng có STT Mã số SV Họ và tên thì tách STT ra ten_bien.stt, mã số SV ra ten_bien.masv, còn tên thì ra ten_bien.hoten?
    Học đến file rồi chắc biết là có 2 dạng file lưu là file text và file nhị phân chứ nhỉ ?
    Và cũng biết thêm cách đọc theo từng từ/dòng và đọc theo từng Khối/Cục (block) chứ ?

    Tự ngẫm nghĩ xem cách người ta bày cho bạn là loại nào ?
    Um Mani Padme Hum...!!

  8. #8
    Ngày gia nhập
    01 2010
    Nơi ở
    Hà Nội
    Bài viết
    37

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    Học đến file rồi chắc biết là có 2 dạng file lưu là file text và file nhị phân chứ nhỉ ?
    Và cũng biết thêm cách đọc theo từng từ/dòng và đọc theo từng Khối/Cục (block) chứ ?

    Tự ngẫm nghĩ xem cách người ta bày cho bạn là loại nào ?
    Mình mới học đọc từng ký tự (fgetc) và đọc từng dòng (fgets) thôi, còn đọc từng từ hay từng khối/cục thì mình chưa biết
    Cám ơn mỗi sớm mai thức dậy
    Ta có thêm ngày nữa để yêu thương

  9. #9
    Ngày gia nhập
    02 2012
    Bài viết
    4

    Bạn có thể sử dụng hàm sscanf và fscanf, tương tự scanf nhưng thao tác trên chuỗi hoặc file
    http://www.cplusplus.com/reference/c...cstdio/fscanf/
    http://www.cplusplus.com/reference/c...cstdio/sscanf/

Các đề tài tương tự

  1. Algorithm Nhập 2 file XML khác cấu trúc thành 1 file XML
    Gửi bởi lenovi trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 08-07-2013, 11:24 AM
  2. ADO.NET Có thể lưu file ảnh vào file text có cấu trúc ?
    Gửi bởi dongtrien trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 22-11-2012, 09:50 AM
  3. Bài tập C Cần hướng dẫn đọc tệp dữ liệu cấu trúc từ file
    Gửi bởi Thien Phuc trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 14-03-2011, 07:22 PM
  4. Bài tập C++ lập danh sách bằng text file và tạo cấu trúc để đọc file đó
    Gửi bởi journo trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 09-02-2011, 08:51 PM
  5. Cấu trúc file excel | Cấu trúc file xls. Giúp mình với?
    Gửi bởi knightofit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 02-04-2009, 10:44 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn