30/09/2018, 18:14

Hỏi về dấu nháy và FILE trong C

Ví dụ như em đang có file test.txt như thế này:

10
200
5000

Em muốn thay đổi số 200 thành số khác nhưng không biết cách nào, em để chế độ “r+”, cho dấu nháy tới dòng đó rồi nhưng vẫn không xử lý được , bí quá em lên đây hỏi các anh giúp dùm, thanks!

edit ở #3

Đỗ Văn Chanh viết 20:17 ngày 30/09/2018

chưa học về phần này bao giờ nhưng mục đích bài toán là chỉ cần đổi thành số khác là đc hay phải làm theo thuật toán

Huy viết 20:22 ngày 30/09/2018

Chỉ cần đổi số là được bạn nhưng đây là thao tác với File nên mình chẳng biết làm cách nào, vd như:

  FILE *tientk = NULL;
  int s=0;
  int kyTuhientai=0;
            tientk = fopen("tientk.txt","r+");
            if(tientk == NULL){
                printf("Khong the mo file tientk.txt");
                return 0;
            }
            s=2;
            //Dua dau nhay den vi tri dau dong thu 2
            while(s > 1){
                kyTuhientai = fgetc(tientk);
                if(kyTuhientai == '\n')
                    s--;
            }

Ví dụ như mình thêm biến int i=300, muốn thay đổi con số 200 thành 300 trong file test như sau:

test.txt input
10
200
5000

–>

test.txt output 
10
300
5000

thì phải làm sao

*grab popcorn* viết 20:20 ngày 30/09/2018

Dùng fseek(file, offset, origin)
http://www.cplusplus.com/reference/cstdio/fseek/

Muốn seek tới 1 dòng tính từ đầu file thì dùng fseek(file,n*x+2,SEEK_SET)
Với n là số dòng cần trỏ tới, bắt đầu từ 0, x là kí tự trên dòng n-1. +2 là số kí tự ẩn, cụ thể ở đây là \r\n hay \n\r nếu bạn xài Window và nhập file bằng tay, nhấn phím enter để xuống hàng)
(Cụ thể hơn thì x = số byte của dòng đó đó :P, mà char chỉ lưu bằng 1 byte nên coi như là số ký tự )
Còn nếu muốn seek tới 1 dòng tính từ con trỏ hiện hành thì thay SEEK_SET bằng SEEK_CUR;

Như ví dụ trên thì fseek(tientk,1*2+2,SEEK_SET); thì nó sẽ trỏ tới vị trí như thế này |200

Lưu ý là nó sẽ ghi theo cơ chế ghi đè, tức là nếu bạn ghi 3000
thì file out của bạn sẽ thành

10
30005000

Do số 0 đã ghi đè kí tự xuống dòng.

Huy viết 20:17 ngày 30/09/2018

cảm ơn bạn, để mai thử test lại, đi ngủ đã

Đỗ Văn Chanh viết 20:21 ngày 30/09/2018

mình không học thuật toán nên không biết phần này, nhưng đổi thì có thể dùng các hàm liên quan đến file trong C để lấy ra r sửa và lưu lại, mình chỉ biết cách làm này thôi :3

Bài liên quan
0