Xin chào, và chào mừng trở lại.
Trong bài giảng này, tôi sẽ cung cấp một minh chứng cho thách thức trước đây của
chúng ta, đó là in nội dung của một tệp theo thứ tự ngược lại.
Vì vậy, bạn sẽ cần phải hiểu phương thức ftel và phương thức fseek.
Hãy đưa ra các khối mã và tạo một dự án mới.
Và dự án này sẽ là một ứng dụng console.
Chúng tôi sẽ
chỉ đặt tên nó ngược lại nội
dung tệp in.
Và trước tiên chúng ta sẽ tạo tệp của mình có một số dữ liệu trống trong
đó vì chúng ta cần đọc từ đó. Vì vậy, tôi sẽ quay lại thư mục tải xuống của mình, đó
là nơi chứa các dự án khối mã của tôi.
Và tôi sẽ đi đến dự
án mà
tôi vừa tạo, có tên là nội dung tệp in.
Vì vậy, nó ở ngay đây. Tôi sẽ tạo một tệp mới, tệp văn bản.
Chúng tôi sẽ nói tài liệu văn bản mới. Chúng tôi sẽ đặt tên cho nó là thử nghiệm. chữ.
Và sau đó bên trong đây, tôi sẽ chỉ làm
thông thường xin chào tên
tôi là Jason, bạn có khỏe không, tôi đang làm tốt.
Và điều này sẽ làm được gì, tôi sẽ lưu nó, và sau đó chúng ta sẽ bắt đầu in ra phần cuối.
Vì vậy, nó sẽ in ra gniod khoảng trắng enif, v.v. cho đến khi về đầu.
Vì vậy, chúng ta sẽ quay lại các khối mã và chúng ta
sẽ cần bao gồm IO tiêu chuẩn của chúng ta vì nó
chứa tất cả các chức năng của chúng ta. Chúng ta sẽ tạo một hằng
số, trong trường hợp này là xác định.
Và đây sẽ được gọi là tên tệp, nó sẽ được gọi là thử nghiệm. chữ.
Và tôi sẽ cần tạo con trỏ tệp của mình trước, vì vậy tất cả viết
hoa FILE star fp và tôi sẽ đặt nó bằng null, khởi tạo nó.
Và sau đó, tôi cũng sẽ tạo một vài bộ đếm và một
cái gì đó để đại diện cho những gì được trả về từ đó - tôi sẽ thực
hiện bộ đếm cho vòng lặp của mình
và sau đó là số lượng byte thực tế được trả về từ ftell.
Vì vậy, tôi sẽ nói rằng nó đếm bằng 0 và sau
đó một biến điều khiển vòng lặp thành I bằng 0.
Tôi sẽ làm bình thường của tôi. Tôi cần mở tệp của mình. Tôi sẽ nói fp bằng
fopen, và tôi sẽ chuyển vào tên tệp. Tôi sẽ chuyển qua chỉ đọc nên chỉ r.
Tôi sẽ đảm bảo rằng điều này không rỗng. Vì vậy, tôi sẽ nói nếu fp bằng null, thì
tôi sẽ trả về giá trị âm 1.
Nếu không, tôi sẽ tìm đến cuối tệp.
Vì vậy, tôi muốn làm một fseek.
Ở đây tôi sẽ gọi hàm fseek.
Điều này sẽ thay đổi vị trí của nơi tôi đang trỏ đến. Tôi sẽ chuyển vào con trỏ tệp của mình.
Tôi sẽ chuyển bằng 0 cho tham số thứ hai của chúng ta.
Đối với thông số thứ ba, tôi sẽ nói rằng hãy tìm kiếm đến cùng.
Vì vậy, tôi sẽ sử dụng kết thúc tìm kiếm liên tục đó.
Và điều đó sẽ đặt con trỏ tệp của tôi ở cuối fp, đó
là thử nghiệm. chữ.
Sau khi kết thúc, tôi muốn đặt bộ đếm thực tế của mình thành bộ
đếm mà nó trỏ tới là ftell. Vì vậy, tôi muốn trở lại vị trí của tôi.
Vì vậy, ở đây tôi sẽ lấy vị trí của con trỏ tệp.
Và fseek thực sự đã thay đổi vị
trí, vì vậy nó di chuyển con trỏ tệp đến cuối tệp.
Vì vậy, tôi di chuyển nó trước và sau đó tôi nhận được vị trí. Tôi có thể nhận được vị trí bằng cách sử dụng ftell.
Đối với ftell, nó trả về vị trí, vì vậy nó sẽ được lưu trữ trong
bộ đếm và tôi sẽ nói f count bằng f tell và sau đó chuyển nó vào con trỏ tệp.
Khi tôi đã có vị trí, sau đó tôi có thể viết một vòng
lặp while cho biết đi từ vị trí hoặc bộ đếm mà tôi là biến điều khiển vòng lặp của tôi đến cuối cùng.
Vì vậy, ở đây tôi có thể nói trong khi tôi chưa đếm được
vì tôi muốn đọc về cơ bản mọi thứ từ cuối đến đầu.
Và vì vậy bên trong đây, tôi muốn nói rằng hãy tăng biến I của tôi.
Và sau đó tôi muốn tìm kiếm, tôi muốn thay đổi nơi tôi đang chuyển đến. Vì vậy, tôi muốn nói fseek, và
tôi muốn trỏ đến fp.
Tôi muốn chỉ ra một tiêu cực của tôi bởi vì
tôi đang đi từ đầu trở lại và tôi muốn nói rằng hãy tìm kiếm kết thúc.
Vì vậy, tiêu cực, tôi sẽ có rất nhiều byte từ cuối.
Vì vậy, đầu tiên tôi có thể di chuyển đến cuối và
sau đó tôi muốn thay đổi vị trí của mình để có thể bắt đầu đọc từng ký tự.
Một khi tôi đã thực sự tìm kiếm đến cùng, thì tôi chỉ có
thể in ra ký tự, đọc ký
tự và in ra. Vì vậy, ở đây tôi chỉ có thể
nói phần trăm c, và sau đó tôi có thể nói fgetc
và con trỏ tệp của tôi.
Vì vậy, một lần nữa, những gì tôi đang làm ở đây là trên dòng 22 hoặc dòng 19, đầu tiên, tôi
đang di chuyển con trỏ của mình đến cuối.
Sau đó, tôi nhận được bộ đếm của mình vì điều đó sẽ cho tôi biết tôi phải đọc bao lâu trong mỗi byte
bằng cách sử dụng ftell.
Sau đó, vòng lặp while của tôi sẽ đi từ 0 đến hết
để đếm xem tôi muốn đọc bao nhiêu byte.
Ở dòng 26, tôi sẽ tăng bộ đếm.
Sau đó, tôi sẽ tìm kiếm rất nhiều byte từ
cuối, trừ I từ cuối. Và dòng 28, tôi sẽ đọc ký tự đó và in ra.
Và đó là logic chính của chương trình.
Điều duy nhất tôi phải làm là tôi muốn in ra một nguồn cấp dữ liệu
dòng ở cuối, chỉ để dễ đọc hơn. Tôi muốn đóng con trỏ tệp của mình.
Vì vậy, tôi muốn nói fp, và sau đó tôi chỉ muốn quay
lại, và có lẽ tôi muốn đặt fp bằng null.
Vì vậy, chúng ta hãy thử biên dịch nó, và những gì chúng ta
sẽ thấy hy vọng là tệp in theo thứ tự ngược lại.
Chúng tôi không thay đổi nội dung của tệp,
chúng tôi chỉ đọc nó từ cuối đến đầu bằng cách sử dụng các chức năng vị trí của chúng tôi.
Vì vậy, khi chúng ta chạy điều này, chúng ta sẽ thấy
điều ngược lại hoặc thứ tự ngược lại. Và những gì bạn sẽ nhận thấy ở đây là chúng ta thấy thứ tự ngược lại.
Vì vậy, lần đầu tiên chúng tôi in ra tệp cuối cùng.
Và nếu chúng tôi hiển thị tệp đó trong thư mục tải xuống của mình,
bạn sẽ nhận thấy
rằng tệp đang in ra dưới dạng đầu ra.
Nó in ra
gniod không gian enif, v.v.
Dòng cuối cùng được in ra là xin chào, ngược lại tên tôi là Jason.
Vì vậy, nó chỉ là một chương trình nhỏ gọn
gàng sẽ sử dụng các con trỏ tệp để bắt đầu ở cuối
và sau đó đi đến đầu và in ra nội dung theo thứ tự ngược lại.
Vì vậy, hãy chú ý cách chúng ta sử dụng fseek, chú ý cách chúng ta sử dụng ftell.
Fseek di chuyển con trỏ tệp, ftell thực sự nhận được vị
trí của bạn ở vị trí của tệp.
Vì vậy, bây giờ bạn có thể sử dụng số đếm để đi ngược lại.
Và sau đó, sử dụng I phủ định để nói có bao nhiêu byte từ cuối
và fgetc với một con trỏ tệp.
Tôi sẽ cung cấp mã nguồn này như một giải pháp, và bạn có thể so sánh nó và xem
xét nó và phân tích nó chi tiết hơn. Hy vọng điều này sẽ giúp. Cảm ơn bạn.