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

Đề tài: Trong C có file định kiểu như pascal không ạ? mong được chỉ giáo

  1. #1
    Ngày gia nhập
    08 2011
    Bài viết
    36

    Mặc định Trong C có file định kiểu như pascal không ạ? mong được chỉ giáo

    Mình giờ mơí học tới xử lý file trong C nên chưa có chút khái niệm nào cả, qua nghiên cứu sơ sơ thì mình thấy mới có file văn bản dạng text và cũng chỉ đọc text mà thôi.
    ngày trước mình học pascal mình có thể định dạng file theo 1 kiểu nào đó, ví dụ bản ghi rùi ghi cả bản ghi vào file. gần giống kiểu struct ở C thì phải. Vậy mình muốn hỏi trong C có thể làm được việc này không.

    Chả là mình đang làm 1 cái bài tập về quản lý thông tin sinh viên và xử lý trên file, mình định lưu mỗi sinh viên vào 1 bản ghi rùi lưu lên file và xử lý nó, ko biết có thể thực hiện được không? nếu ko thì mình cũng ko biết làm thế nào nữa? các bạn chỉ giáo cho mình biết phương án nào làm được việc này. Lưu ý là mình xử lý trên file nhé, đừng hướng dẫn mình dùng mảng.

    Cảm ơn các Pro nhiều lắm!

  2. #2
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Trích dẫn Nguyên bản được gửi bởi tuansaker3291 Xem bài viết
    Mình giờ mơí học tới xử lý file trong C nên chưa có chút khái niệm nào cả, qua nghiên cứu sơ sơ thì mình thấy mới có file văn bản dạng text và cũng chỉ đọc text mà thôi.
    ngày trước mình học pascal mình có thể định dạng file theo 1 kiểu nào đó, ví dụ bản ghi rùi ghi cả bản ghi vào file. gần giống kiểu struct ở C thì phải. Vậy mình muốn hỏi trong C có thể làm được việc này không.

    Chả là mình đang làm 1 cái bài tập về quản lý thông tin sinh viên và xử lý trên file, mình định lưu mỗi sinh viên vào 1 bản ghi rùi lưu lên file và xử lý nó, ko biết có thể thực hiện được không? nếu ko thì mình cũng ko biết làm thế nào nữa? các bạn chỉ giáo cho mình biết phương án nào làm được việc này. Lưu ý là mình xử lý trên file nhé, đừng hướng dẫn mình dùng mảng.

    Cảm ơn các Pro nhiều lắm!
    Ối. c là ngôn ngữ bậc cao hơn pascal nên hoàn toàn bạn có thể làm điều này dễ dàng hơn pascal rồi
    Với yêu cầu bạn phải nắm được cách xử lý xâu kí tự, biết cách duyệt, đọc, ghi file
    xử lý xâu: http://cplusplus.com/reference/clibrary/cstring/ bạn cần nắm các hàm cắt, copy, tách xâu
    Đọc ghi file: http://cplusplus.com/reference/clibrary/cstdio/: hàm nào có chữ f ở đầu là làm việc với file
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

  3. #3
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Dạng bản đọc, bản ghi là khả năng cung cấp của các hàm thư viện I/O.

    Cái bạn muốn, trong nghề IT gọi là record I/O, tức là ghi và đọc nguyên một mảng dữ liệu có định dạng trước

    Theo chỗ tôi biết thì hàm thư viện của C không có cái tương đương với Pascal để làm. Trong đống hàm thư viện của C++ có thể có (hàm thư viện của C++ nhiều lắm, tôi không biết hết).

    Cách dễ nhất hiện tại là dùng cách read/write binary data với hàm fread và fwrite như sau:

    C Code:
    1. /*
    2.   Lưu ý là nếu struct chứa một mảng động, tức là một con trỏ và cấp phát bộ nhớ động thì sẽ không dùng được.
    3.   vì trên thực tế, struct chỉ chứa con trỏ và lúc chép, chỉ có con trỏ được chép vào file.
    4. */
    5.  
    6. /* Our structure */
    7. struct rec
    8. {
    9.   int x,y,z;
    10. };
    11.  
    12. fwrite(&my_record, sizeof(struct rec), 1, ptr_myfile); // ghi
    13.  
    14. fread(&my_record, sizeof(struct rec), 1, ptr_myfile); // đọc

  4. #4
    Ngày gia nhập
    08 2011
    Bài viết
    36

    cảm ơn các pro nhiều nhưng đúng là vẫn còn mơ hồ quá, mình chưa hiểu rõ lắm.
    Có ai có thể demo cho mình 1 ví dụ thế này, có nhiều bản ghi, mỗi bản ghi gồm họ tên kiểu char[50], tuổi kiểu int. ghi cả bản ghi vào 1 file kiểu gì ạ và đọc cả nó ra kiểu gì ạ, và ai có thể cung cấp các hàm liên quan giúp mình với, ví dụ như hàm tìm kiếm, kiểm tra xem có về cuối file hay chưa..vv

    cảm ơn các pro nhiều lắm.

    // ----

    một cách cóp nhặt thì em xin mạn phép đưa ra đây 1 ví dụ để các Pro giúp đỡ cho dễ:

    Code:
     #include<stdio.h>
     #include<conio.h>
     #include<string.h>
     
    struct tt{
      	char ten[50];
      	int tuoi;
      };
    struct tt mang[10];
    int i;
    FILE *f;
    
    main (){
    	char s[200]="dulieu.txt";
    	f=fopen(s,"w");
    // dua vao 1 file ne
    
        for (i=0; i<3; i++) {
    	  printf("thong tin thu %d \n", i);
    	  printf("ten : "); gets(mang[i].ten);
    	  printf("tuoi: "); scanf("%d", &mang[i].tuoi);
    	
    	  fwrite(&mang[i], sizeof(struct tt), 1, f); // ghi
    }
    }
    Thực sự thì em cũng ko hiểu f=fopen(s,"w"); nó là cái gì, chỉ tạm hiểu nó là mở cái file đó ra... hix, bạn em bảo thế thôi chứ em cũng ko rành, ai biết chỉ em luôn, chạy thì chạy được nhưng mà nó bỏ qua bước hỏi tên rùi hỏi tuổi luôn nhưng thực ra nó lưu tên, em cũng chả hiểu ra làm sao nữa. hix

    Mong các Pro giúp đỡ xem em sai chỗ nào ạ, qua ải này là em có thể có hướng cho cái bài tập lớn quản lý sinh viên em đang làm...hix

    //---------

    hi. ra là em thiếu 1 lệnh fflush(stdin); trước khi nhập thông tin sinh viên, giờ chỉ còn chỗ cái chữ "w" là cái gì em thực sự chưa có tượng tận, mong các Pro chỉ giáo...

    Hàm fopen em thấy hình như là nó mỗi lần được gọi thì nó sẽ xóa sạch file đó và ghi lại từ đầu phải không ạ? cho em hỏi muốn xuống cuối file ghi tiếp thì làm thế nào và kiểm tra có phải cuối file hay chưa thì làm thế nào ạ? và một vấn đề nữa là nếu mở ra chỉ để đọc thì sử dụng lệnh gì các pro nhỉ? (để sử dụng lệnh fread mà Pro VoTichSu đã nói ở trên)


    chú ý lần sau không gửi nhiều bài liên tiếp
    beautifulsoul84hung
    Đã được chỉnh sửa lần cuối bởi beautifulsoul84hung : 28-10-2011 lúc 04:29 PM. Lý do: làm liền bài viết

  5. #5
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    FILE *ptr_myfile;
    ptr_myfile = fopen(str_MyFileName, "ab");

    // a = append, ghi thêm vào sau file
    // b = binary, phải có cái này mới record I/O được

    Tuy nhiên, nếu bạn ghi vào thì record mới sẽ chồng lên các records cũ. Muốn ghi thêm ở cuối thì phải có cách 'seek' tới cuối file.

    Prototype của hàm fseek như sau:

    int fseek(FILE * stream, long int offset, int whence);

    Nếu chỉ cần đi đến cuối file:

    fseek(ptr_myfile, sizeof(struct rec), SEEK_END);

    SEEK_END là một macro đã được cho sẵn trong stdio.h
    Đã được chỉnh sửa lần cuối bởi VoTichSu : 28-10-2011 lúc 10:34 AM.

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

  1. Bài tập C Mình chưa hiểu về FILE có bài nay mong Giúp đỡ
    Gửi bởi hoangdatjunior trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 27-11-2013, 07:30 AM
  2. lỗi in tam giác pascal trong C#?
    Gửi bởi dauhoi_8x trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 3
    Bài viết cuối: 20-03-2012, 10:05 AM
  3. Bài tập C++ tam giac pascal trong lập trình C++?
    Gửi bởi quan92_cn2 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 18-11-2010, 02:56 PM
  4. Lập trình C++| Lỗi không nhập được giữ liệu vào file. Mong các bạn giúp đỡ?
    Gửi bởi duybinh.ptit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 04-06-2009, 03:18 PM
  5. Thắc mắc số kĩ thuật trên file, mong anh em vô chỉ giúp
    Gửi bởi chanphat01001 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 22-11-2007, 05:07 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