You are on page 1of 8

KHOA CÔNG NGHỆ THÔNG TIN

BÀI 10
XỬ LÝ FILE VĂN BẢN VÀ NGOẠI LỆ
BIÊN SOẠN: HUỲNH THÀNH LỘC

Cập nhật: 26/09/2021

NỘI DUNG

§ Ghi dữ liệu vào File


§ Đọc dữ liệu từ File
§ Xử lý Ngoại lệ

Bài 10. Xử lý File văn bản và Ngoại lệ 2

FILE VĂN BẢN


§ Trong quá trình thực thi,
dữ liệu của chương
trình được lưu trữ trong
bộ nhớ chính (RAM) của
máy tính
§ Khi chương trình kết
thúc, các dữ liệu này
cũng sẽ biến mất
àFile văn bản là một cách
để lưu trữ lâu dài dữ
liệu của chương trình
sau khi thực thi xong

Bài 10. Xử lý File văn bản và Ngoại lệ 3

3
FILE VĂN BẢN

§ File được lưu trữ trong bộ nhớ ngoài của máy


tính và do hệ điều hành quản lý
§ C# cung cấp thư viện System.IO để tạo luồng
kết nối giữa chương trình và file (stream)

C# File in
program Windows
stream

Bài 10. Xử lý File văn bản và Ngoại lệ 4

LUỒNG GHI FILE – StreamWriter

§ Khai báo: StreamWriter sw;

§ Khởi tạo: sw = new StreamWriter(filePath);


ú filePath là một chuỗi (string)
Đường dẫn tuyệt đối đến file: @“C:\MyData\Output.txt”
Tên file: @“Output.txt” (file nằm trong thư mục làm việc hiện tại
của chương trình: …\bin\debug)
Lấy thư mục làm việc hiện tại: Directory.GetCurrentDirectory()
ú Nếu file đã tồn tại, chương trình ghi đè lên file cũ.
Ngược lại, tạo ra file mới

Bài 10. Xử lý File văn bản và Ngoại lệ 5

LUỒNG GHI FILE – StreamWriter

§ Ghi dữ liệu vào vùng đệm (buffer) của luồng: Sử


dụng hàm Write(…) hoặc WriteLine(…) tương tự
như khi in ra cửa sổ Console
static void Main(string[] args) {
Console.Write("a = "); //In ra cửa sổ Console
int a = int.Parse(Console.ReadLine());
Console.Write("b = "); //In ra cửa sổ Console
int b = int.Parse(Console.ReadLine());

int sum = a + b;

StreamWriter sw = new StreamWriter("Output.txt");


sw.WriteLine($"Sum = {sum}"); //Ghi vào buffer
sw.Close();
}
Bài 10. Xử lý File văn bản và Ngoại lệ 6

6
LUỒNG GHI FILE – StreamWriter

§ Đóng luồng ghi File


sw.Close();

ú Khi quá trình ghi dữ liệu hoàn tất, phải gọi hàm Close()
để ghi dữ liệu từ buffer vào file và đóng luồng
ú Nếu thiếu thao tác này:
Dữ liệu sẽ không được ghi vào file mà chỉ nằm trong buffer
Các chương trình khác sẽ không thể thao tác lên file vì file vẫn còn
đang liên kết với stream

Bài 10. Xử lý File văn bản và Ngoại lệ 7

LUỒNG ĐỌC FILE – StreamReader

§ Các thao tác tương như như StreamWriter


static void Main(string[] args) {
StreamReader sr = new StreamReader(“Input.txt");
int a = int.Parse(sr.ReadLine());
int b = int.Parse(sr.ReadLine());
sr.Close();

int sum = a + b;

StreamWriter sw = new StreamWriter("Output.txt");


sw.WriteLine($"Sum = {sum}"); //Ghi vào buffer
sw.Close();
}

Bài 10. Xử lý File văn bản và Ngoại lệ 8

LUỒNG ĐỌC FILE – StreamReader

§ Đọc lần lượt các dòng cho đến hết file


ú Cách 1:
StreamReader sr = new StreamReader(“Input.txt");
string line;

while((line = sr.ReadLine()) != null)


{
//Xử lý giá trị line
}

sr.Close();

Bài 10. Xử lý File văn bản và Ngoại lệ 9

9
LUỒNG ĐỌC FILE – StreamReader

§ Đọc lần lượt các dòng cho đến hết file


ú Cách 2:
StreamReader sr = new StreamReader(“Input.txt");
string line;

while (sr.EndOfLine == false)


{
line = sr.ReadLine();
//Xử lý giá trị line
}

sr.Close();

Bài 10. Xử lý File văn bản và Ngoại lệ 10

10

VẬN DỤNG

Viết chương trình đọc số nguyên n và dãy a gồm n


số nguyên từ file “Input.txt”. Hãy cho biết có bao
nhiêu số chẵn trong dãy a và đó là những số nào?
Kết quả được ghi vào file “Output.txt”
§ Input.txt
ú Dòng đầu tiên số nguyên dương n Input.txt Output.txt

ú Dòng thứ 2: n số nguyên của dãy a 5 3


42763 426
§ Ouput.txt
ú Dòng đầu tiên: Số lượng số chẵn trong dãy a
ú Dòng thứ 2: các số chẵn trong dãy a, mỗi số cách nhau bởi
dấu khoảng trắng

Bài 10. Xử lý File văn bản và Ngoại lệ 11

11

NGOẠI LỆ - Exception

§ Có 2 dạng lỗi khi viết một chương trình


§ Lỗi biên dịch (Compilation error):
§ Mã nguồn viết chưa đúng các quy định của ngôn ngữ lập trình
§ Trình biên dịch sẽ thông báo và bắt buộc phải sửa lỗi để chương
trình có thể thực thi được à Dễ phát hiện và xử lý
§ Lỗi thực thi (Run time error):
§ Phát sinh trong quá trình thực thi chương trình
§ Chương trình sẽ bị dừng đột ngột (crash) nếu như không được dự
đoán và xử lý trước à Xử lý ngoại lệ (Exception)

Bài 10. Xử lý File văn bản và Ngoại lệ 12

12
NGOẠI LỆ - Exception

§ Một số exception thường gặp:


§ Chuyển đổi dữ liệu từ chuỗi có định dạng không hợp lệ
int a = int.Parse(“a”);
§ Truy cập phần tử có chỉ số vượt khỏi phạm vi chỉ số của mảng
int[] a = new int[5];
a[5] = 10;
§ Truy cập đến file không tồn tại trong máy tính
StreamReader sr = new StreamReader(“Input.txt");
//Lỗi nếu file “Input.txt” không tồn tại trong
thư mục làm việc hiện tại của chương trình

Bài 10. Xử lý File văn bản và Ngoại lệ 13

13

NGOẠI LỆ - Exception

§ Exception là một vấn đề xảy ra trong quá trình


thực thi chương trình
§ C# có hỗ trợ phát hiện các exception để xử lý
§ Nếu không xử lý exception chương trình sẽ bị
dừng đột ngột (crash)

Bài 10. Xử lý File văn bản và Ngoại lệ 14

14

NGOẠI LỆ - Exception

§ Phát hiện Exception


try
{
int a = int.Parse(“a”);
}
catch
{
Console.WriteLine(“Invalid number”);
}
§ Nếu các câu lệnh trong khối try phát sinh exception,
chương trình sẽ chuyển sang xử lý các câu lệnh trong
khối catch

Bài 10. Xử lý File văn bản và Ngoại lệ 15

15
NGOẠI LỆ - Exception

§ Nên đặt các câu lệnh dễ phát sinh exception


trong khối try để chương trình không bị dừng
đột ngột
§ Có thể sử dụng cấu trúc lặp để thực hiện lại
đoạn lệnh phát sinh exception
§ Có thể hiển thị hoặc ghi lại thông tin của
exception (log file) để dễ phân tích và xử lý lỗi

Bài 10. Xử lý File văn bản và Ngoại lệ 16

16

NGOẠI LỆ - Exception

try
{
int a = int.Parse(Console.ReadLine());
}
catch (Exception e)
{
//Hiển thị thông tin chi tiết của exception
Console.WriteLine(e.Message);

//Hiển thị chuỗi cho biết vị trí trong


chương trình phát sinh exception
Console.WriteLine(e.StackTrace);
}

Bài 10. Xử lý File văn bản và Ngoại lệ 17

17

NGOẠI LỆ - Exception
§ Một số cách Xử lý Exception
§ Cách 1: Xử lý exception ngay khi phát hiện
static int Input() static void Main(string[] args)
{ {
int a = 0; int a = Input();
bool failedToRead = false; Console.WriteLine(a);
do { }
try
{
a = int.Parse(“a”);
failedToRead = false;
}
catch (Exception e)
{
Console.WriteLine(“Invalid number”);
failedToRead = true;
}
} while (failedToRead == true);
return a;
}

Bài 10. Xử lý File văn bản và Ngoại lệ 18

18
NGOẠI LỆ - Exception

§ Một số cách Xử lý Exception


§ Cách 2: Ném exception cho nơi gọi hàm xử lý. Sử dụng
từ khóa throw

static int Input() static void Main(string[] args)


{ {
try try
{ {
int a = int.Parse(“a”); int a = Input();
return a; }
} catch (Exception e)
catch (Exception e) {
{ Console.WriteLine(e.Message);
throw e; }
}
} }

Bài 10. Xử lý File văn bản và Ngoại lệ 19

19

NGOẠI LỆ - Exception

§ Các loại Exception trong C#


E xce p tio n

S yste m E xce p tio n A p p lica tio n E xce p tio n

A rg u m e n tE xce p tio n In d e xO u tO fR a n g e E xce p tio n


F ile Lo a d E xce p tio n

F ile N o tF o u n d E xce p tio n

D ivid e B yZ e ro E xce p tio n IO E xce p tio n

E n d O fS tre a m E xce p tio n

N u llR e fe re n ce E xce p tio n ...

Bài 10. Xử lý File văn bản và Ngoại lệ 20

20

VẬN DỤNG

Viết chương trình đọc dãy a gồm n số nguyên từ


file “Input.txt”. Hãy cho biết có bao nhiêu số
chẵn trong dãy a và đó là những số nào? Kết quả
được ghi vào file “Output.txt”
Xử lý các ngoại lệ sau:
§ File “Input.txt” không tồn tại
§ Lỗi chuyển đổi các giá trị của dãy a, giá trị nào
không hợp lệ chuyển về 0
Input.txtp Output.txt
4h763 3
406

Bài 10. Xử lý File văn bản và Ngoại lệ 21

21
Bài 10. Xử lý File văn bản và Ngoại lệ 22

22

TỔNG KẾT

§ Biết được kỹ thuật đọc và ghi file


văn bản
§ Nắm được kỹ thuật Xử lý ngoại lệ

Bài 10. Xử lý File văn bản và Ngoại lệ 23

23

You might also like