Xin chào, và chào mừng trở lại.
Trong bài giảng này, tôi muốn để nói về
cách chúng ta có thể đọc văn bản từ một tệp.
Hiện tại, chúng ta sẽ tập trung đọc các tệp văn bản.
Vì vậy, nếu chúng ta muốn đọc ký tự từ một tệp văn bản, chúng
ta sẽ sử dụng một vài hàm.
Đầu tiên sẽ là fgetc.
Thao tác này sẽ đọc một ký tự từ văn bản tệp đã được mở để đọc.
Hãy nhớ rằng, chúng ta luôn phải mở up tệp trước khi chúng tôi có thể
thực hiện bất kỳ thao tác nào với tệp đó trừ khi đó là đổi
tên hoặc xóa và sau đó không thể mở tệp.
Nhưng nếu bạn muốn đọc và viết hoặc bổ sung,
chúng ta phải mở tệp đó.
Chúng tôi biết rằng chúng tôi có thể mở ra các tệp với các chế độ khác nhau.
Trong trường hợp này để đọc, chúng tôi sẽ có để mở dấu cộng r hoặc r, và
sau đó chúng ta có thể bắt đầu gọi fgetc.
Hàm fgetc có con trỏ tệp làm đối số duy nhất của
nó và nó sẽ trả về ký tự được đọc là kiểu int.
Vì vậy, đây là một ví dụ, chúng tôi tạo một mchar gõ int, và chúng tôi nói fgetc pfile.
Nó sẽ đọc một ký tự vào biến mchar với pfile
làm con trỏ tệp.
Hãy nghĩ về pfile đã được đã mở trở lại con trỏ tệp.
Mchar thuộc loại vì eof là ký tự đặc biệt của chúng tôi ở
cuối tệp của chúng tôi, được trả về nếu đã đạt đến phần cuối của tập tin.
Vì vậy, chúng tôi luôn có thể kiểm tra rằng số nguyên để xem nó có phải là eof không.
Và nếu có, chúng tôi không muốn để đọc
nữa, chúng tôi không muốn gọi là fgetc nữa.
Hàm fgetc, là tương đương với fgetc cũng có sẵn.
Vì vậy, getc gần giống như fgetc, bạn chỉ muốn sử dụng fgetc.
Tôi nghĩ nó có một số nhiều bảo vệ hơn trong đó.
Với getc, nó yêu cầu một đối số of type file star và trả về và
trả về ký tự màu đỏ như kiểu int.
Nó gần như giống hệt với fgetc.
Sự khác biệt duy nhất giữa chúng là getc có thể được triển khai dưới dạng
macro và chúng tôi thậm chí không biết macro bây giờ là gì.
Vì vậy, chúng tôi sẽ gắn bó với sử dụng fgetc làm chức năng của chúng tôi để
đọc các ký tự.
Bạn có thể đọc nội dung của một tệp.
Một lần nữa, khi cần thiết, bạn có thể sử dụng chức năng tua lại này định
vị tệp được chỉ định bởi tệp con trỏ đến đầu tệp.
Vì vậy, bạn có thể sử dụng tua lại nếu bạn muốn đọc lại.
Chỉ cần nói tua lại và sau đó con trỏ tệp, khá cơ bản.
Vì vậy, đây là một ví dụ.
Bạn phải bao gồm tiêu đề io tiêu chuẩn bất cứ khi nào chúng
tôi thực hiện bất kỳ thao tác tệp nào.
Trong chức năng chính của chúng tôi, chúng tôi sẽ tạo con trỏ tệp của chúng tôi.
Nếu tôi muốn khởi tạo cái này thành null và chúng ta sẽ tạo một số nguyên.
Điều đầu tiên chúng tôi sẽ làm là chúng tôi sẽ mở
tệp bằng lệnh gọi mở và chúng tôi sẽ chỉ định tên của tệp và chúng tôi sẽ chỉ
định rằng nó để đọc.
Điều đó sẽ trả về con trỏ tệp của chúng tôi.
Vì vậy, bây giờ con trỏ fp của chúng tôi là trỏ đến một tệp hợp lệ.
Nếu nó không thể mở tệp. txt đó không phải là con
đường đúng hoặc bất cứ điều gì, nó sẽ trả về null.
Vì vậy, bạn muốn kiểm tra null, đảm bảo rằng fp không rỗng.
Nếu nó là null, hãy thoát khỏi chương trình.
Ngược lại, khi bạn thường đọc các ký tự, bạn sẽ có chúng bên
trong một vòng lặp.
Vì vậy, ở đây chúng tôi đang nói trong khi c bằng fgetc fp, đây là cách đọc một
ký tự từ tệp của chúng tôi, chuyển con trỏ tệp tới fgetc, trả
về một số nguyên.
Hãy nhớ rằng, chúng ta có thể nhảy ra khỏi vòng lặp nếu số nguyên đó được trả về là phần
cuối của tệp vì chúng tôi không muốn để đọc hết phần cuối của tệp.
Nếu không, chúng tôi chỉ có thể in ra ký tự của chúng ta bằng cách sử dụng phần trăm c và c.
Điều cuối cùng chúng tôi muốn làm là chúng tôi muốn đóng tệp, sau đó chúng tôi muốn đặt
con trỏ tệp của mình thành null, và chúng tôi có thể quay trở lại.
Hãy thử tận dụng điều này, tạo này bên trong các khối mã.
Đây là chương trình của chúng tôi bên trong các khối mã.
Nó nói, chương trình này sẽ không hoạt động trừ khi chúng ta có một tệp trên đĩa ở bất kỳ
nơi nào chương trình đang chạy.
Vì vậy, trước tiên nếu chúng ta xây dựng cái này, nó sẽ xây dựng ổn, nó
sẽ tạo ra một tệp thực thi ở đâu đó trên ổ cứng của bạn.
Tôi đã đặt tất cả các dự án của mình bên trong thư mục cho vay dot của tôi.
Vì vậy, nếu tôi chuyển đến phần tải xuống của mình thư mục và tôi
đi đến tên dự án, đây chỉ là một thử nghiệm dự án vì vậy bất cứ nơi nào bạn đang lưu trữ các dự
án của mình đang được thử nghiệm.
Nếu tôi đi kiểm tra, bạn sẽ thấy rằng bên trong thư mục bin, bên trong gỡ
lỗi là tệp thực thi của bạn.
Đây là nơi bạn tạo nộp hồ sơ nếu bạn có một người thân.
Đường dẫn nên ở đây tôi có thể tạo một tệp mới và chúng ta có thể có nó dưới dạng tệp văn bản
để tôi có thể tạo nó dưới dạng văn bản tài liệu, và nó phải được đặt tên là tệp.
Và sau đó tôi sẽ đặt một số thông tin trong đó.
Tôi sẽ đưa vào một số dữ liệu chẳng hạn như xin chào đây là nguồn cấp dữ liệu dòng của Jason.
Được rồi, không, vân vân, và tôi sẽ cứu nó.
Tệp này phải tồn tại trong để chương trình này hoạt động.
Vì vậy, tôi đã tạo tệp.
Bây giờ khi tôi chạy nó, hy vọng nó sẽ đọc những gì tôi
vừa thêm vào nó và in nó ra.
Nó báo lỗi và đang mở tệp tệp không có thư mục tệp
như vậy và đó có thể là do tôi có nó trong thư mục gỡ lỗi.
Và điều này không chạy trong gỡ lỗi.
Vì vậy, hãy thử chạy nó trong gỡ lỗi và Tôi nghĩ rằng nó có thể sẽ hoạt động ngay bây giờ.
Chúng ta có thể nói gỡ lỗi, bắt đầu.
Điều này sẽ tìm kiếm tệp thực thi trong thư mục gỡ lỗi hy vọng.
Chúng tôi muốn đảm bảo rằng nó chạy.
Vẫn chưa có, vì vậy bạn phải làm chắc chắn rằng bạn biết tệp thực thi ở đâu.
Hãy thử ở một nơi khác hoặc tốt hơn hết là tôi có thể chạy tệp thực thi bên trong trình
gỡ lỗi thư mục và nên tìm thấy nó ở đó.
Vì vậy, nếu tôi nhấp đúp vào đây, nó thực sự um không tạm dừng.
Nó nhảy ra ngoài.
Vì vậy, những gì bạn có thể làm cho
điều đó là thay vì quay lại, bạn có thể nói hệ thống tạm dừng và nó sẽ không thoát chương trình cho đến khi bạn chạy nó.
Vì vậy, bây giờ chúng ta hãy thử nó.
Vì vậy, bây giờ đã tạm dừng, không thực hiện chương trình.
Và những gì bạn thấy là, xin chào, đây là Jason.
Nó có thể tìm thấy tệp, in ra không sao, in ra nope
và sau đó nó tạm dừng.
Ngược lại, khi bạn thực hiện chương trình, nó in dữ liệu rất nhanh
và thoát khỏi chương trình mà bạn đã hoàn thành.
Vì vậy, đó là cách bạn có thể kiểm tra nó.
Nó phải được lưu trữ ở nơi thực thi được lưu trữ ở nơi mà nó đang chạy.
Nó phải được chạy từ đâu đó khác trong thư mục dự án của bạn.
Tôi không chắc nó chạy từ đâu.
Chúng tôi có thể thử di chuyển tệp mã nguồn ở đâu.
Nó có thể đang chạy nó từ đây.
Vì vậy, ở đây chúng tôi sẽ đưa nó vào đây.
Và bây giờ chúng tôi sẽ thử chạy nó từ ID và có thể nó sẽ hoạt động.
Chúng tôi không xây dựng.
Chúng tôi chạy nó, và nó có thể tìm thấy nó.
Vì vậy, có vẻ như chúng ta có để đặt tệp bên trong vị trí
của mã nguồn.
Vì vậy, miễn là chúng tôi đặt tệp đó tập tin. văn bản bên trong tệp
dự án, bạn sẽ có thể nhìn thấy nó.
Ví dụ nhanh về cách bạn có thể mở một tệp và đọc các ký tự đơn
lẻ, không phải là cách hiệu quả nhất cách đọc từ một tệp vì thông
thường bạn muốn đọc các chuỗi.
Nhưng điều này sẽ mở ra.
Bạn thấy cuộc gọi mở và bạn nhận thấy vòng lặp while.
Đó là quan trọng.
Hãy quay lại và nói về cách chúng ta có thể đọc các chuỗi từ một
tệp hiệu quả hơn nhiều.
Vì vậy, đó là đọc một ký tự duy nhất.
Làm thế nào về việc đọc một chuỗi?
Bạn có thể sử dụng chức năng fgets để đọc từ bất kỳ tệp hoặc luồng nào.
Điều này sẽ đọc một chuỗi.
Nó có một chuỗi ký tự có tham số đầu tiên.
Số lượng ký tự bạn muốn đọc và sau đó là con trỏ tệp thực tế.
Vì vậy, chức năng này sẽ đọc một chuỗi trong vùng
nhớ được trỏ bởi str.
Vì vậy, bạn phải thực sự truyền vào bộ đệm nơi
dữ liệu sẽ được lưu trữ.
Và đó là một con trỏ, vì vậy bạn phải cấp phát bộ nhớ cho nó.
Và sau đó nó sẽ đọc từ tệp được chỉ định làm tham số
thứ ba là con trỏ tệp.
Và sau đó nchar sẽ để cho biết lượng dữ liệu cần đọc.
Vì vậy, nếu bạn đặt nchars như 10, nó sẽ đọc trong 10 ký tự trừ khi nó truy
cập vào một dòng cấp dữ liệu đầu tiên.
Vì vậy, nó sẽ đọc một toàn bộ dòng hoặc nó sẽ đọc số ký
tự mà bạn chỉ định trong tham số thứ hai.
Cuối dòng được chỉ định bởi dấu gạch chéo ngược n tùy điều kiện nào xảy ra trước.
Nếu một ký tự dòng mới có màu đỏ, nó được giữ
lại trong chuỗi và dấu chấm hết null sẽ là được nối vào cuối chuỗi.
Vì vậy, nếu bạn thực sự chỉ định nhiều ký tự hơn, nó sẽ đọc đến nguồn cấp dữ
liệu dòng, và sau đó nhảy ra ngoài và sau đó nó nhận
được ký tự dòng mới đó và đặt một ký tự null ở cuối nó.
Nếu không có lỗi, fgets là sẽ trả về con trỏ,
là tham số đầu tiên.
Nó sẽ trả về một con trỏ được trả về từ hàm.
Và sau đó nó cũng sẽ để điền con trỏ str
làm tham số đầu tiên.
Nếu có lỗi thì trả về giá trị null.
Và sau đó đọc phần cuối của tệp khiến null được trả về, có nghĩa là bạn
đọc tất cả các chuỗi của mình.
Vì vậy, chúng ta hãy xem xét một ví dụ.
Ở đây chúng tôi có chính của chúng tôi và chúng tôi đang tạo con trỏ tệp của chúng
tôi, tạo một chuỗi ký tự.
Đây là một con trỏ mà chúng tôi đã không phân bổ bất kỳ dữ liệu nào cho nó, chúng tôi
chỉ tạo một mảng ký tự.
Chúng tôi mở tệp để đọc, chỉ đọc vì đó là r.
Chúng tôi đã nói nếu nó không có giá trị, hãy nhảy ra ngoài.
Nếu không, chúng tôi chỉ nói đồ dùng, chúng tôi đọc trong 60 ký tự.
Hoặc nếu nguồn cấp dữ liệu dòng là trước rằng, một nguồn cấp dữ
liệu dòng sẽ xuất hiện và sau đó nó sẽ in ra và có gì trong bộ đệm str.
Vì vậy, str là đầu tiên ký tự được chuyển vào.
Và sau đó chúng tôi đóng con trỏ tệp, đặt nó thành null và trả về 0.
Vì vậy, một lần nữa, hãy xem xét điều này bên trong mã của chúng tôi chặn IDE.
Điều duy nhất đã thay đổi trong này chương trình thực sự là dòng 14 đến 17.
Chúng tôi đang sử dụng các tiện ích để đọc chuỗi của chúng tôi trong, và sau đó chúng ta có một bộ đệm str.
Vì vậy, chúng tôi cũng cần tạo mảng ký
tự ở đây là str của chúng ta và chúng ta muốn mảng này chứa 60.
Chúng tôi đang đọc trong 60.
Chúng tôi sẽ thêm một nguồn cấp dữ liệu dòng, vì vậy nó sẽ đọc trong 59 và sau đó thêm một nguồn cấp dữ
liệu dòng vào cuối nó.
Vì vậy, chúng ta có thể nói 61.
Và sau đó các thiết bị sẽ được một câu lệnh if và nó
sẽ đọc trong từng chuỗi cho đến khi nhấn 60 ký tự hoặc một dòng mới và nó sẽ
in ra chuỗi đó.
Bạn sẽ nhận thấy điều đó không vòng lặp while, vì vậy
chúng tôi không đọc đến cuối tệp.
Chúng tôi đọc phần cuối của tệp, chúng tôi nhận được một null.
Vì vậy, nếu chúng tôi xây dựng cái này, chúng tôi muốn chắc chắn rằng chúng tôi có báo giá của chúng tôi một cách chính xác.
Bất cứ khi nào bạn sao chép từ powerpoint nó làm lộn xộn các trích dẫn.
Và chúng tôi muốn đảm bảo Chúng tôi đã tạo biến c của chúng tôi không được sử dụng,
điều đó không sao.
Vì vậy, chúng ta hãy tiếp tục và chạy điều này.
Và bạn thấy đấy, đây là Jason.
Vì vậy, thực sự hãy đọc toàn bộ dòng văn bản từ tệp.
Nó đọc ở dòng đầu tiên.
Vì vậy, bạn sẽ gọi nó một lần nữa và đọc ở dòng thứ hai.
Nếu bạn thay đổi số lượng byte đọc, nói rằng chúng tôi chỉ
muốn đọc 10, nó sẽ đọc trong 10 và sau đó sẽ trả về
10 đó thay vì đọc toàn bộ dòng.
Vì vậy, ở đây chúng tôi chỉ có nó chào tôi này.
Vì vậy, nó sẽ đọc ở số trong số các ký tự,
tham số thứ hai của bạn hoặc cho đến khi nó có một dòng nguồn cấp dữ liệu và nó lưu trữ trong str.
Str là một mảng ký tự.
Chúng tôi in nó ra fgets.
Fgets còn nhiều hơn thế nữa hiệu quả để đọc.
Bởi vì chúng tôi không đọc một ký tự và tại một thời
điểm, chúng tôi đang đọc nhiều dữ liệu hơn.
Đọc một ký tự trong một thời gian không hiệu quả.
Vì vậy, bây giờ chúng ta biết cách đọc đơn ký tự, chúng tôi biết
cách đọc trong chuỗi cho đến khi họ đọc một ký tự mới dòng hoặc một số ký tự.
Nhưng bạn cũng có thể đọc trong đầu vào được định dạng từ một tệp.
Vì vậy, chúng ta có getc, fgetc, fgets.
Và bây giờ chúng tôi có một hàm được gọi là fscanf.
Đây là đầu vào được định dạng.
Đầu vào được định dạng là dữ liệu được chỉ định bởi like có dấu phân cách hoặc có định dạng
cụ thể được liên kết với nó.
Hàm fscanf này có một tệp từ luồng và sau đó là một định dạng.
Định dạng giống như printf định dạng chỉ định mà bạn sử dụng.
Vì vậy, nếu bạn muốn đọc bằng số nguyên hoặc tăng gấp đôi, bạn có thể chỉ định
dữ liệu bên trong tệp được giới thiệu gấp đôi
và nó sẽ đọc nó cho đến khi nó giống như scanf cho đến khi nó nhìn thấy một ký tự khoảng trắng.
Vì vậy, đối số đầu tiên cho fscanf hàm là một con trỏ đến một
đối tượng tệp xác định luồng.
Chúng ta phải biết những gì tệp chúng tôi đang đọc.
Đối số thứ hai cho chức năng là định dạng.
Đây là một chuỗi c có chứa một hoặc nhiều mục sau đây.
Ký tự khoảng trắng, không có khoảng trắng ký tự, thông số định dạng.
Cách sử dụng cũng giống như scanf và printf, nhưng thay vào
đó nó từ một tệp.
Vì vậy, bên trong dấu ngoặc kép, bạn có thể đặt trong văn bản, bạn có thể đặt các ký
tự khoảng trắng hoặc không phải khoảng trắng, nhưng các chỉ định định dạng thực sự
là cách bạn sẽ đọc trong dữ liệu.
Và sau đó bạn chỉ định các biến mà bạn muốn đọc nó.
Vì vậy, hàm trả về số lượng
mục đầu vào được khớp và gán thành công.
Vì vậy, đây là những gì nó trông như thế này.
Bạn sẽ nhận thấy rằng điều chính là tạo ba mảng ký tự, str1, str2
và str3, mỗi mảng chỉ mười byte.
Chúng tôi tạo một số nguyên được gọi là năm, chúng tôi đạt được một con trỏ tệp.
Điều đầu tiên chúng tôi làm chúng tôi mở tệp.
Trong trường hợp này, chúng tôi đang mở nó lên để đọc và viết.
Nhưng chúng tôi sẽ không thực sự viết bất cứ thứ gì đối với nó, chúng tôi sẽ chỉ hiển thị
những gì chúng tôi đang đọc từ nó.
Chúng tôi kiểm tra để đảm bảo tệp con trỏ không bằng null.
Và sau đó ở đây, chúng tôi thực sự đưa một cái gì đó vào tệp fputs.
Chúng tôi chưa nói về điều đó, nhưng đây là viết một cái gì đó.
Tập trung ở đây vào fscanf.
Fscanf sẽ đọc trong dữ liệu được định dạng.
Và vì vậy những gì nó sẽ làm nó sẽ được
đọc trong ba chuỗi được phân tách bằng dấu cách.
Và vì vậy bạn thấy phần trăm as phần trăm không gian như phần trăm
không gian phần trăm không gian d.
Sau đó, chúng tôi đang nói chúng tôi đang ở đâu sẽ đọc chúng thành
mảng ba ký tự của chúng tôi và sau đó năm, và chúng tôi phải chỉ định toán
tử địa chỉ cho năm của chúng tôi.
Nhưng dữ liệu được định dạng cách cụ thể khi nó được viết.
Và khi bạn đọc một thứ gì đó được định dạng, bạn phải hiểu định dạng của
tệp cách nó được viết như thế nào.
Ở đây chúng tôi biết rằng tệp được viết bằng cách tách các chuỗi bằng khoảng trắng.
Vì vậy, đó là cách chúng tôi sẽ đọc nó trong.
Và vì vậy chúng ta có thể đọc nó với một cuộc gọi fscanf.
Chúng tôi có thể sử dụng biểu mẫu của chúng tôi làm bộ chỉ định dưới dạng đối số thứ hai của
chúng ta và sau đó là số lượng đối số thay đổi cho mỗi riêng biệt của mỗi dấu phẩy để chỉ định dữ
liệu mà chúng tôi muốn đọc nó vào.
Và sau đó chúng tôi chỉ in ra dữ liệu, ba chuỗi trong năm và sau đó
chúng tôi đóng tệp một lần nữa.
Và đây là ba cách bạn có thể đọc dữ liệu từ một tệp.
Bạn có thể đọc bằng ký tự, bạn có thể đọc trong chuỗi hoặc bạn có thể
đọc dữ liệu được định dạng.
Và bạn sẽ nhận thấy cách định dạng thực hiện nó rất giống với scanf.
Bạn sử dụng công cụ định dạng, biến để đọc vào.
Chúng tôi sẽ có một thử thách về đọc dữ liệu sẽ giúp bạn quen
thuộc hơn với điều này.
Nó khá cơ bản.
Bạn sẽ mở của bạn cuộc gọi, bạn sẽ sử dụng
con trỏ tệp của mình và bạn sẽ để sử dụng ba chức năng đó.
Cảm ơn bạn.