Tổng quan File trong C

0
1623

Ý NGHĨA CỦA VIỆC SỬ DỤNG FILE

    • Nhập dữ liệu một lần và sử dụng được nhiều lần
    • Phù hợp với thực tế: người dung không thể lúc nào cũng nhập dữ liệu mà sẽ ghi dữ liệu đó vào file và gửi cho lập trình viên để chạy chương trình
    • Lưu trữ kết quả chương trình việc lâu dài, dễ kiểm tra

CÁC BƯỚC KHI LÀM VIỆC VỚI FILE TRONG NGÔN NGỮ C:

  1. Khai báo biến file
  2. Gán biến file đã khai báo với một file vật lý (file trên ổ cứng,…)
  3. Xử lý file (đọc, ghi file)
  4. Đóng file

CÚ PHÁP

  1. Khai báo biến file
  2. FILE* <tên biến file>;
    • Kiểu dữ liệu của file là kiểu FILE*
    • <tên biến file>: cách đặt tên biến file theo yêu cầu đặt tên của ngôn ngữ C

    VD:

    FILE * f1; //khai báo một biến file
    FILE * f2, * f3;//Khai báo nhiều biến file
    
    1. Gán biến file (đã khai báo) với một file vật lý

    <tên biến file>=fopen(<duong dan file>, <cách mở file>);

    • fopen la hàm mở file
    • <duong dan file>: là chuỗi chứa đường dẫn tới file bạn muốn mở. VD: bạn muốn mở file txt trong ổ đĩa thư mục LapTrinhC của ổ đĩa E thì <duong dan file> chính là “E:\\LapTrinhC\\dulieu.txt”. Lưu ý ta phải dùng \\ thay vì \ trong chuỗi <duong dan file>
    • <cách mở file> : là một chuỗi qui định mục đích cho việc sử dụng file có thể sử dụng một trong các giá trị sau:
      • “w”: mở file để ghi, nếu file muốn mở chưa có thì chương trình sẽ tự động tạo ra file đó. Nếu file muốn mở đã có sẵn thì file sẽ được mở, tuy nhiên dữ liệu trong file nếu có sẽ bị xóa hết trở thành file trống
      • “r”: mở file để đọc, nếu file chưa có thì chương trình sẽ báo lỗi. Nếu file đã tồn tại thì chương trình sẽ mở file. Dữ liệu trong file sẽ không thay đổi.
      • “a”: mở file để ghi thêm, cách hoạt động giống “w”, tuy nhiên nếu file đã có dữ liệu thì chương trình sẽ không xóa dữ liệu có trước mà sẽ ghi tiếp vào phía sau
      • “r+”, “w+”: mở file, cho phép đọc và ghi file.

    VD: ta muốn gán biến f1 cho file ở đường dẫn “E:\LapTrinhC\dlmatran.txt”  để có đọc thong tin từ file này ta dùng câu lệnh:

    f1=fopen(“E:\\LapTrinhC\\dlMatran.txt”,”r”);

    VD: ta muốn gán biến f2 cho file “D:\ketqua.txt” để ghi kết quả thực hiện công việc ta dùng câu lệnh:

    f2=fopen(“D:\\ketqua.txt”, “w”);

    1. Xử lý file

    Thao tác cơ bản khi làm việc với file trong ngôn ngữ C là đọc và ghi file. Cú pháp đọc và ghi file trong C tương tự với cú pháp đọc và ghi dữ liệu từ màn hình

    STT Câu lện trên màn hình Câu lệnh với file
    1 printf(“… dịnh dạng…”,<biến>); fprintf(<biến file>,(“… dịnh dạng…”,<biến>)
    2 scanf(“định dang”,&<biến>); fscanf(<biến file>, “định dang”,&<biến>);
    3 gets(<tenchuoi>); fgets(<tenchuoi>, <kích thuoc>,<biến file>);

    Nhận xét:

    • Hàm xử lý trên file sẽ có thêm ký tự f so với hàm xử lý trên bàn phím và màn hình: ví dụ từ printf => fprintf, scanf => fscanf, gets => fgets
    • Các tham số trong câu lệnh xử lý trên file sẽ nhiều tham số hơn câu lệnh xử lý trên bàn phím và màn hình <biến file> để xác định mình đang làm việc với file nào

    Ví dụ: Để gán giá trị người dùng từ bàn phím vào biến số nguyên a và xuất giá trị đó ra màn hình ta dùng đoạn lệnh sau

    int a;
    	printf("nhap vao mot so nguyen: ");
    	scanf("%d", &a);
    printf("so ban vua nhap la %d ", a);
    

    Và để gán giá trị từ biến file f1 vào biến nguyên a rồi ghi giá trị của a vào biến file f2 ta sử dụng đoạn lệnh:

    int a;
    fscanf(f1,"%d",&a);
    fprintf(f2,"so ban vua nhap la %d ", a);
    

    Lưu ý: Để kiểm tra đã ta đã đọc dữ liệu đến hết file hay chưa ta dùng một hằng số là EOF (End Of File)

    Ví du: Tính tổng dãy số có n phần tử trong file. Giả sử ta có file f được gán cho file dulieu.txt có nội dung nhu sau:

    5

    2 4 10 4 13

    Trong đó dòng 1 là số n. Và dòng sau là n số nguyên liên tiếp.

    Phân tích: Trong bài này ta cần đọc được số nguyên n ở đầu file, sau đó ta đọc liên tiếp n số (lặp n lần công việc đọc từ file) và tính tổng của chúng

    B1: khai báo biến lưu tổng và gán giá trị bằng 0

    B2: đọc giá trị đầu tiên từ file cho biến n

    B3: Lặp n lần

          Công việc lặp:

               Đọc giá trị số và gán cho biến a

               Tính tổng: tong=tong +a;

    B4: xuât ra màn hình biến tổng

    Đoạn code minh họa:

    int n;
    		int a;
    		int tong=0;
    		fscanf(f,"%d",&n);
    		for(int i=0;i<n;i++)
    		{
    			fscanf(f,"%d",&a);
    			tong=tong+a;
    		}
    	printf("tong day so la %d \n", tong);
    

    Ví dụ: Cũng với bài toán đó nếu như file đã cho không cho sẵn số nguyên n mà chỉ cho dãy số.

    Phân tích: Bài này ta không có sẵn số lượng phần tử của dãy trước khi đọc dãy. Như vậy ta không biết phải đọc file bao nhiêu lần. Vậy mỗi lần đọc dữ liệu ta cần kiểm tra xem đã kết thúc file hay chưa. Nếu  kết thúc thì dừng đọc, còn nếu chưa kết thúc file ta phải đọc tiếp.

    B1: khai báo biến lưu tổng và gán giá trị bằng 0

    B2: Lặp không xác định cho tới khi đến cuối file

                      Điều kiện lặp: Đọc giá trị số và gán cho biến a

                      Công việc lặp: Tính tổng: tong=tong +a;

    B3: xuât ra màn hình biến tổng

    int a;
    		int tong=0;
    		while(fscanf(f,"%d",&a)!=EOF)//
    		{
    			tong=tong+a;
    		}
    	printf("tong day so la %d \n", tong);
    
    1. Đóng file

    Sau khi thao tác với file xong. Một điều quan trọng là cần đóng file đã mở  kết thúc quá trình làm việc với file. Ta sử dụng cú pháp

    fclose(<tên biến file>);

    VD: sau khi đọc dữ liệu xong ta muốn đóng file f1 ta dùng câu lệnh:

    fclose(f1);

This site uses Akismet to reduce spam. Learn how your comment data is processed.