Bài tập C sửa thông tin trên file

Em có bài tập như thế này :

Viết chương trình C, quản lí thông tin sv :

  1. mã sinh viên là số nguyên tự động tăng.
  2. tên sinh viên.
  3. điểm sinh viên là số thực gồm điểm môn A, môn B, môn C.

Với các chức năng nhập , sửa và hiển thị. E đã làm biết được cách nhập thông tin vào file nhưng hiện đang gặp khó khăn trong trong việc sửa thông tin trên file, do chưa hiểu rõ cách hoạt động của đọc ghi file nên em đang mông lung quá ạ .

e đang có file .txt chứa thông tin sau :

1 nguyen van A  6 6 6 
2 nguyen van B  7 7 7

bây giờ e muốn sửa thông tin của người thứ 2 để file thành :

1 nguyen van A  6 6 6
2 tran van B  8 8 8

Mong được các bác giúp đỡ . Chúc mọi người buổi chiều mát mẻ !

merged to the #1 post by noname00

Dùng text file thì chỉ có load/save thôi bạn chứ seek lại khó lắm.

3 Likes

bạn có thể nói cụ thể hơn cách giải quyết bài này được k ạ

Ý bạn đó nói là nếu bạn save, load file kiểu đó thì hơi khó để xử lí dữ liệu. Cách đơn giản nhất để giải quyết vấn đề trên là tự tạo một cái format riêng, ví dụ như “Mã sinh viên;Họ và tên;Điểm môn A;Điểm môn B;Điểm môn C\n”. Muốn lấy dữ liệu chỉ việc split chuỗi là được. Còn có cách tốt hơn là dùng json để chứa dữ liệu, nếu bạn chịu khó sài cách này thì việc đọc, quản lí dữ liệu sẽ trở nên cực kì dễ. Mà mình cũng không biết là C có hỗ trợ json hay không chứ khi sài json bên javascript, nodejs nó sướng thế chứ.

Để nội dung file kiểu đó thì chúc bạn xử lí chuỗi bằng regex vui vẻ :slightly_smiling_face:

1 Like

2 posts were merged into an existing topic: Topic lưu trữ các post off-topic - version 3

cám ơn bạn, mặc dù chưa hiểu lắm nhưng mình sẽ tìm hiểu thêm :slight_smile:

Mình cũng tạo một cái struct gồm : Mã sinh viên;Họ và tên;Điểm môn A;Điểm môn B;Điểm môn C rồi đó ạ
Nhưng vấn đề ở đây là mình không biết cách để sửa thông tin đó ạ, bởi vì các thao tác với File thì chỉ có thể đọc , ghi đè và ghi append thôi.

Welcome to DNH.

Như @rogp10 đã đề cập, cậu có thể thực hiện load/save nội dung lại. Tớ nghĩ là cậu đã hiểu nhầm ý của cậu ấy về việc đó.
Thao tác load/save có mấy bước đơn giản như sau:

  1. Cậu mở file với quyền đọc, rồi đọc file từng dòng một, và lưu dữ liệu cậu đã lấy ra vào 1 mảng mà cậu tự định nghĩa, rồi đóng file lại (phần này đơn giản vừa đủ để cậu tự làm được).
  2. Cậu sửa đổi dữ liệu trên mảng mà cậu đã lấy ra, thêm, sửa, xóa tùy cậu (Phần này cũng đủ đơn giản để cậu tự làm được)
  3. Cậu mở lại file với quyền ghi (nó sẽ clear hết toàn bộ content trước của file), rồi sau đó ghi lại mảng cậu vừa thao tác ra file với format cũ (phần này cũng đơn giản, cậu hoàn toàn có thể làm được).

Tớ nghĩ solution kia sẽ giúp cậu giải quyết được vấn đề.

4 Likes

Và nên phân cách bằng dấu ; cho dễ làm.

2 Likes

2 ý đầu của @rogp10@HR16 là:

  • Nội dung của tập tin văn bản định dạng phân cách theo: Mã sinh viên;Họ và tên;Điểm môn A;Điểm môn B;Điểm môn C\n.
    Vì sao lại là kí tự chấm phẩy (;) mà không phải là dấu cách ( )?
    Vì để dễ dàng tách tên.
    Ví dụ:
1;Nguyen Van A;6;6;6
2;Tran Thi B;7;7;7
...
  • Muốn sửa sinh viên bất kì thì bạn đọc hết cả tập tin lưu vào mảng cấu trúc của bạn, sửa sinh viên mà bạn muốn. Sau đó ghi tất cả trở lại tập tin.
2 Likes

cám ơn mọi người mình hiểu rồi :sweat_smile:

Cảm ơn bạn đã giúp mình giải thích :grinning:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?