1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Lập trình nâng cao: Thao tác với tệp - Trần Quốc Long

24 17 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 24
Dung lượng 99,81 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Lập trình nâng cao: Thao tác với tệp cung cấp cho người học các kiến thức: Nhập liệu từ tệp văn bản, xử lý lỗi với tệp, kỹ thuật giới thiệu các thư viện, kỹ thuật xử lý lỗi đơn giản. Mời các bạn cùng tham khảo.

Trang 1

File operations

5 - Thao tác với tệp

https://github.com/tqlong/advprogram

Trang 2

Nội dung

<fstream>, <vector>, <algorithm>

○ Xử lý lỗi đơn giản

Trang 3

Nhập liệu từ tệp (file)

Trang 4

Top-down: Sửa main để dùng file

const int M AX_BAD _G U ESSES = 7;

con st ch ar D ATA _FILE[] = "data/O gd en_P icturable_200.txt";

string guessedW ord = string(w ord.length(), '-');

- Yêu cầu chooseWord chọn từ file

- Báo lỗi và dừng game nếu file có lỗi

Trang 5

Thư viện fstream

Trang 6

Tạo file, ghi vào file với ofstream

// thư viện fstream

# include < fstream >

int m ain () {

ofstream m yfile; // khai báo biếến kiếểu ofstream

m yfile.open("exam ple.txt"); //M ởể file exam ple.txt

m yfile < < "W riting this to a file.\n"; //G hi văn baển vào file

m yfile.close(); //Đ óng file lại: giaểi phóng tài nguyến, ghi vào đĩa

● Biến kiểu ofstream (out file stream)

Trang 7

Tạo file, ghi vào file với ofstream

# include < iostream >

# include < fstream >

int m ain () {

ofstream m yfile ("exam ple.txt");

if (m yf i le.is_open()) { // Kiếểm tra việc m ởể tệp có thành công?

m yfile < < "This is a line.\n";

m yfile < < "This is another line.\n";

Trang 8

Đọc file với ifstream

# include < fstream > //Thư viện fstream chứa ifstream

using nam espace std;

int m ain () {

string line;

ifstream m yfi le ("exam ple.txt"); //Mở file example.txt đã ghi ở ví dụ trước

(m yfi le.is_open()) { //Kiểm tra việc mở tệp có thành công ?

w h ile ( getline (m yfi le,line) ) { //Hàm getline đọc 1 dòng của tệp vào biến line

cout < < line < < '\n' ; // và chuyển vị trí đọc xuống dòng tiếp theo

} // Lặp đến khi getline trả về “false” (tức là không còn gì để đọc, hết tệp)

m yfi le.close(); //Đóng tệp, giải phóng tài nguyên hệ thống

}

else cout < < "Unable to open fi le";

return ;

Trang 9

Đọc từ vựng Hangman từ tệp

Từ vựng của Hangman được lưu trong một tệp văn bản:

chooseWord, hiện là main())

Trang 10

string chooseW ord(const char* fileN am e)

{

ifstream file(fileN am e); //Mở tệp có đường dẫn như trong tham số

if (file.is_open()) { // Kiểm tra tệp mở thành công

string w ord;

w hile (file > > w ord) { //Đọc từng từ đến khi không đọc được nữa

cout < < w ord < < endl; //ghi tạm ra màn hình để xem thử

}

file.close();

} else cout < < "Error opening " < < fileN am e;

}

chooseWord (thử đọc từ file)

Trang 11

Ghi dữ liệu từ file vào đâu?

Từ vựng của Hangman được lưu trong một tệp văn bản:

→ Cần kiểu dữ liệu lưu trữ số lượng từ “tùy ý”

nếu dùng mảng thông thường ta sẽ phải đọc một lần để đếm số dòng trước khi khai báo mảng, sau đó mới đọc vào mảng.

Trang 12

Thư viện vector

Trang 13

Chèn vào cuối vector

Thư viện vector

cout < < "Please enter som e integers (Ctrl-D to end):\n

w h ile (cin > > m yint) {

Sưể dụng thư viện vector

Khai báo m yvector là vector các sôế nguyến

Lặp đếế n khi không còn dữ liệu m ới Phưởng thức push_back: Thếm m yint vào cuôế i m yvector

In sôế phầầ n tưể cu ểa m yvector

Trang 14

Truy xuất các phần tử trong vector

Thư viện vector

vector<in t> m yvector (10); // 10 zero-initialized ints

// assign som e values:

un sig ned sz = m yvector.size();

for (u nsig n ed i=0; i< sz; i+ + )

m yvector.at(i)= i;

cout < < "m yvector contains:";

for (u nsig n ed i=0; i< sz; i+ + )

cout < < ' ' < < m yvector.at(i);

cout < < '\n' ;

// reverse vector using operator[]:

for (u nsig n ed i=0; i< sz/2; i+ + )

{

in t tem p;

tem p = m yvector[sz-1-i];

m yvector[sz-1-i]= m yvector[i];

m yvector[i]= tem p;

}

cout < < "m yvector contains:";

for (u nsig n ed i=0; i< sz; i+ + )

Khai báo vector có 10 phầầ n tưể Lưu kích thước vector

G án giá trị tại vị trí thứ i (tính từ 0) qua phưởng thức at

In giá trị tại vị trí thứ i qua phưởng thức at

Sưể dụng toán tưể [] truy xuầết và gán giá trị phầần tưể cu ểa vector giôếng như m a ểng tĩnh

Trang 15

string chooseW ord(const char* fi leN am e)

{

vector< strin g> w ordList; //Khai báo vector chứa các từ sẽ đọc

ifstream fi le(fi leN am e); //Mở tệp có đường dẫn như trong tham số

if (fi le.is_open()) { // Kiểm tra tệp mở thành công

string w ord;

w hile (fi le > > w ord) { //Đọc từng từ (giống cin) đến khi không đọc được nữa

w ordList.p ush_b ack(w ord); //đưa từ vừa đọc vào vector

}

fi le.close();

}

if (w ordList.size() > 0) { // nếu có dữ liệu đọc thành công

int random Index = rand() % w ordList.size();

retu rn w ordList[random Index]; // trả về một từ ngẫu nhiên trong vector

} else retu rn ""; // nếu không đọc được gì, trả về từ rỗng

}

chooseWord (đọc vào vector)

Cẩn thận trường hợp file mở thành công nhưng rỗng

Trang 17

Chuẩn hóa dữ liệu

( ==, != ) hoạt động chính xác

Trang 18

string chooseW ord(const char* fi leN am e)

{

vector< string> w ordList;

ifstream fi le(fi leN am e);

int random Index = rand() % w ordList.size();

return getLow erC aseString (w ord List[rand om Ind ex]);

} else return "";

chooseWord (chuẩn hóa dữ liệu)

Chuyển từ được chọn sang chữ thường trước khi trả về

Trang 19

string chooseW ord(const char* fi leN am e)

{

vector< string> w ordList;

ifstream fi le(fi leN am e);

int random Index = rand() % w ordList.size();

return getLow erC aseString (w ord List[rand om Ind ex]);

} else return "";

}

Chuyển từ sang chữ thường

string getLow erC aseS tring(con st string& s){

string res = s;

int sz = s.size();

for (int i = 0; i < sz; i+ + ) res[i] = tolow er(s[i]);

retu rn res;

}

Trang 20

Giới thiệu thư viện algorithm

Trang 21

Con trỏ duyệt (Iterator)

s.begin(), s.end()

là khái niệm khái

quát hóa của chỉ

Trang 22

Hoàn thành Hangman 2.1

Bài tập: Hangman 2.2 - Chọn tệp dữ liệu

● Từ tham số dòng lệnh

● Từ lựa chọn của người chơi

Trang 24

Các phiên bản sau

Bạn có thể tự làm tiếp

2.2 Cho chơi nhiều lần

2.3 Hoạt hình: giá treo cổ lắc lư sau khi thua, nếu thắng thì có một người đứng nhảy múa

Đồ họa? Đợi khi học thư viện đồ họa

Ngày đăng: 08/05/2021, 12:18

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm