Nội Dung Tập Tin Tapnhiphan.data Được Mở Bằng Wordpad.

foreach ( string chuoicon in s1.Split(mangphancach) )

{

chuoiketqua += ctr++; chuoiketqua += ": "; chuoiketqua += chuoicon; chuoiketqua += "n";

}// end foreach Console.WriteLine(chuoiketqua); Console.ReadLine();

}

}

}

Kết quả chương trình:

Hình 3 7 Kết quả chương trình ví dụ 3 7 Đoạn chương trình bắt đầu bằng 1

Hình 3.7: Kết quả chương trình ví dụ 3.7

Đoạn chương trình bắt đầu bằng việc tạo một chuỗi để minh họa việc phân tích:

string s1 = “Mot, hai, ba Trung Tam Dao Tao CNTT”;

Hai ký tự khoảng trắng và dấu phẩy được dùng làm các ký tự phân cách. Sau đó phương thức Split() được gọi trong chuỗi này và truyền kết quả vào mỗi vòng lặp:

foreach ( string chuoicon in s1.Split(delimiters) )

Chuỗi chuoiketqua chứa các chuỗi kết quả được khởi tạo là chuỗi rỗng. Ở đây chuỗi chuoiketquađược tạo ra qua bốn bước. Đầu tiên là nối giá trị của biến đếm ctr, tiếp theo là thêm dấu hai chấm, rồi đưa chuỗi được chia ra từ chuỗi ban đầu và cuối cùng là thêm ký tự qua dòng mới. Và bốn bước trên cứ được lặp đến khi nào chuỗi không còn chia ra được.

3.3. Xử lý tập tin

Khả năng để lưu thông tin vào trong một tập tin hay đọc thông tin từ trong một tập tin có thể làm cho chương trình có nhiều hiệu quả hơn. Phần tiếp sau sẽ tìm hiểu những đặc tính cơ bản của việc thao tác trên tập tin.

Làm việc với tập tin dữ liệu

Việc thực hiện trên tập tin là đọc và viết những thông tin từ tập tin. Trong phần này sẽ tìm hiểu về luồng nhập xuất và cách tạo mới một tập tin để ghi hay mở một tập tin đã tồn tại để đọc thông tin.

Luồng nhập xuất


Thuật ngữ tập tin thì nói chung là liên quan đến những thông tin lưu trữ bên trong ỗ đĩa hoặc trong bộ nhớ. Khi làm việc với tập tin gắn liền với việc sử dụng một luồng. Nhiều người nhầm lẫn về sự khác nhau giữa tập tin và luồng. Một luồng đơn giản là luồng của thông tin, chứa thông tin sẽ được chuyển qua, còn tập tin thì để lưu trữ thông tin. Một luồng được sử dụng để gởi và nhận thông tin từ bộ nhớ, từ mạng, web, từ một chuỗi,... Một luồng còn được sử dụng để đọc và ghi ra một tập tin dữ liệu.


Thứ tự của việc đọc một tập tin

Khi đọc hay ghi dữ liệu lên một tập tin, cần thiết phải theo một trình tự xác định. Đầu tiên là phải thực hiện công việc mở tập tin. Nếu tạo mới tập tin thì việc mở tập tin cùng lúc với việc tạo ra tập tin đó. Khi một tập tin đã mở, cần thiết phải tạo cho nó một luồng để ghi thông tin vào trong một tập tin hay là lấy thông tin ra từ tập tin. Khi tạo một luồng, cần thiết phải chỉ ra thông tin trực tiếp sẽ được đi qua luồng. Sau khi tạo một luồng gắn với một tập tin thì lúc này có thể thực hiện việc đọc ghi các dữ liệu trên tập tin. Khi thực hiện việc đọc thông tin từ một tập tin, cần thiết phải kiểm tra xem con trỏ tập tin đã chỉ tới cuối tập tin chưa, tức là đã đọc đến cuối tập tin hay chưa. Khi hoàn thành việc đọc ghi thông tin trên tập tin thì tập tin cần phải được đóng lại.

Tóm lại các bước cơ bản để làm việc với một tập tin là:

- Bước 1: Mở hay tạo mới tập tin

- Bước 2: Thiết lập một luồng ghi hay đọc từ tập tin

- Bước 3: Đọc hay ghi dữ liệu lên tập tin

- Bước 4: Đóng lập tin lại

Các phương thức cho việc tạo và mở tập tin

Có nhiều kiểu luồng khác nhau. Việc sử dụng các luồng và các phương thức khác nhau phụ thuộc vào kiểu dữ liệu bên trong của tập tin. Trong phần này sẽ giới thiệu việc đọc/ghi dữ liệu trên tập tin văn bản và phần kế tiếp là trên tập tin nhị phân.

Để mở một tập tin trên đĩa cho việc đọc và viết tập tin văn bản, cần phải sử dụng một trong hai lớp File và FileInfo. Một vài phương thức có thể sử dụng trong những lớp này. Các phương thức này bao gồm:

Phương thức

Mô tả

AppendText

Tạo luồng StreamWriter sử dụng để ghi dữ liệu vào tập tin văn bản đã có, hoặc một tập tin mới tạo nếu tập tin đó không tồn

tại.

Create

Tạo mới một tập tin

CreateText

Tạo hoặc mở một tập tin văn bản.

Có thể bạn quan tâm!

Xem toàn bộ 212 trang tài liệu này.


Open

Mở một tập tin để đọc/ghi.

OpenRead

Mở một tập tin để đọc

OpenText

Mở một tập tin văn bản để đọc.

OpenWrite

Mở một tập tin văn bản đã có hoặc tạo mới một tập tin văn bản

để ghi dữ liệu lên tập tin đó

Bảng 3.3: Một số phương thức mở tập tin

Lớp File chứa tất cả các phương thức tĩnh, thêm vào đó lớp File tự động kiểm tra quyền trên một tập tin. Trong khi đó nếu muốn dùng lớp FileInfo thì phải tạo thể hiện của lớp này. Nếu muốn mở một tập tin chỉ một lần thì tốt nhất là sử dụng lớp File, còn nếu tổ chức việc sử dụng tập tin nhiều lần bên trong chương trình, tốt nhất là dùng lớp FileInfo.

Viết vào một tập tin văn bản

Cách tốt nhất để nắm vững cách thức làm việc với tập tin là tìm hiểu một ví dụ minh họa việc tạo ra một tập tin văn bản rồi sau đó viết lại thông tin vào nó.

Ví dụ 3.8: Viết dữ liệu vào tập tin văn bản

namespace Vidu3_8{ class Program

{

static void Main(string[] args)

{

StreamWriter teptin = File.CreateText( @"E:taptin.txt"); teptin.WriteLine("Khong co viec gi kho");

teptin.WriteLine("Chi so long khong ben"); teptin.WriteLine("Dao nui va lap bien"); teptin.WriteLine("Quyet chi at lam nen");

for(int i=0; i < 10; i++)

{

teptin.Write("{0} ",i);

}

teptin.Close();

Console.ReadLine();

}

}

}

Kết quả chương trình:


Hình 3 8 Kết quả chương trình ví dụ 3 8 Chương trình thực hiện việc tạo 2

Hình 3.8: Kết quả chương trình ví dụ 3.8

Chương trình thực hiện việc tạo tập tin mới theo đường dẫn ―E:taptin.txt‖ và tập tin văn bản mới được tạo ra có nội dung như sau:

Khong co viec gi kho Chi so long khong ben Dao nui va lap bien Quyet chi at lam nen

0 1 2 3 4 5 6 7 8 9

Phương thức CreateText của lớp File được gọi để tạo ra một đối tượng StreamWriter mới gọi là teptin. Tham số được truyền cho hàm là tên của tập tin sẽ được tạo. Kết quả là tạo ra một tập tin văn bản mới. Dữ liệu sẽ được đưa vào tập tin thông qua StreamWriter với thể hiện của nó là teptin. Khi một luồng được thiết lập và chỉ đến một tập tin thì dữ liệu có thể được ghi vào trong luồng và nó sẽ được ghi vào tập tin:

teptin.WriteLine(“Khong co viec gi kho”);

Dòng lệnh trên ghi một chuỗi vào trong tập tin, việc ghi này giống như là hiển thị ra màn hình console. Sau khi thực hiện toàn bộ công việc, cần thiết phải đóng luồng lại bằng cách gọi phương thức Close.

Đọc tập tin văn bản

Đọc dữ liệu từ tập tin văn bản cũng tương tự như việc ghi thông tin vào tập tin. Ví dụ minh họa tiếp sau đây thực hiện việc đọc tập tin được tạo ra từ chương trình minh họa 3.8 trước.

Ví dụ 3.9: Đọc một tập tin văn bản.

namespace Vidu3_9

{

class Program

{

static void Main(string[] args)

{

string chuoi;

StreamReader teptin = File.OpenText(@"E:taptin.txt"); while ((chuoi = teptin.ReadLine()) != null)

{


}

teptin.Close();


Console.WriteLine(chuoi);

Console.ReadLine();

}

}

}

Kết quả chương trình:

Hình 3 9 Kết quả chương trình ví dụ 3 9 Đầu tiên là khai báo một chuỗi dùng 3

Hình 3.9: Kết quả chương trình ví dụ 3.9.

Đầu tiên là khai báo một chuỗi dùng để lưu thông tin đọc từ tập tin. Để mở tập tin văn bản sử dụng phương thức OpenText. Phương thức này được truyền vào tên của tập tin văn bản cần mở ―E:taptin.txt‖. Một lần nữa một luồng tên teptin được tạo ra gắn với tập tin đã cho, luồng này có kiểu là StreamReader. Phương thức ReadLine() của teptin thực hiện việc đọctừng dòng trong tập tin và sau đó được xuất ra màn hình console. Việc đọc này kết hợp vớiviệc kiểm tra là đã đọc đến cuối tập tin chưa, nếu đọc đến cuối tập tin, tức là hàm ReadLine()trả về chuỗi rỗng, lúc này chương trình sẽ kết thúc việc đọc. Cuối cùng hàm Close được gọiđể đóng tập tin lại và chương trình chấm dứt.

Viết thông tin nhị phân vào tập tin

Nếu sử dụng một tập tin văn bản thì khi lưu dữ liệu kiểu số thì phải thực hiện việc chuyển đổi sang dạng chuỗi ký tự để lưu vào trong tập tin văn bản và khi lấy ra cũng lấy được giá trị chuỗi ký tự do đólại phải chuyển sang dạng số. Đôi khi muốn có cách thức nào đó tốt hơn để lưu trực tiếp giá trị vào trong tập tin và sau đó đọc trựctiếp giá trị ra từ tập tin. Ví dụ khi viết một số lượng lớn các số integer vào trong tập tin như lànhững số nguyên thì khi đó có thể đọc các giá trị này ra như là số integer. Để làm điều đó, có thể gắn một kiểu luồng nhị phân BinaryStream vào trong một tập tin,rồi sau đó đọc và ghi thông tin nhị phân từ luồng này.Hãy xem ví dụ 3.10 minh họa việc đọc viết dữ liệu nhị phân vào một tập tin.

Ví dụ 3.10: Lập chương trình lưucác số nguyên từ 0 đến 99 vào một tập tin nhị

phân.

namespace Vidu3_10

{

class Program

{

static void Main(string[] args)

{

FileStream teptin = new FileStream(@"E:tapnhiphan.data", FileMode.CreateNew);

BinaryWriter bwTep = new BinaryWriter(teptin); for (int i = 0; i < 100; i++)

{

bwTep.Write(i);

}

bwTep.Close(); teptin.Close();

}

}

}

Hình 3 10 Nội dung tập tin tapnhiphan data được mở bằng WordPad Nếu mở tập tin 4

Hình 3.10: Nội dung tập tin tapnhiphan.data được mở bằng WordPad.

Nếu mở tập tin và xem thì chỉ thấy các ký tự mở rộng đựơc hiện thị, sẽ không thấy những số đọc được như hình 3.9. Trong chương trình này thực hiện việc tạo và mở tập tin khác với việc mở tập tin văn bản. Lệnh trên tạo một đối tượng FileStream gọi là teptin. Luồng này được gắn với tập tin thông qua bộ khởi dựng. Tham số đầu tiên của bộ khởi dựng là tên của tập tin được tạo ra ―E:tapnhiphan.data‖, tham số thứ hai là thể hiện chế độ mở tập tin. Tham số này là giá trị kiểu liệt kêFileMode, trong chương trình thì do thực hiện việc tạo mới để ghi nên sử dụng giátrị FileMode.CreateNew. Bảng 3.4 sau liệt kê những giá trị khác trong kiểu liệt kêFileMode.


Giá trị

Giải thích

Append

Mở một tập tin hiện hữu hoặc tạo một tập tin mới

Create

Tạo một tập tin mới. Nếu một tập tin đã hiện hữu,

nó sẽ bị xóa và một tập tin mới sẽ được tạo ra với cùng tên.

CreateNew

Tạo một tập tin mới. Nếu một tập tin đã tồn tại thì

một ngoại lệ sẽ được phát sinh.

Open

Mở tập tin hiện hữu.

OpenOrCreate

Mở tập tin hay tạo tập tin mới nếu tập tin chưa tồn

tại

Truncate

Mở một tập tin hiện hữu và xóa nội dung của nó.

Bảng 3.4: Giá trị của FileMode

Sau khi tạo ra FileStream, cần thiết phải thiết lập để nó làm việc với dữ liệu nhị phân. Dòng lệnh tiếp theo:

BinaryWriter bwTep = new BinaryWriter(teptin);

Dòng này thiết lập một kiểu viết dữ liệu nhị phân vào trong luồng bằng cách khai báo kiểuBinaryWrite. Đối tượng thể hiện của BinaryWrite là bwTepđược tạo ra.Đối tượng teptin được truyềnvào bộ khởi dựng BinaryWrite, nó sẽ gắn bwTepvới teptin.

for (int i=0; i < 100; i++)

{

bwTep.Write(i);

}

Vòng lặp này thực hiện việc ghi trực tiếp giá trị của biến i vào trong BinaryWrite bwTep bằng cách sử dụng phương thức Write. Dữ liệu được ghi có thể là các kiểu dữ liệu khác. Trong chương trình này là giá trị kiểu integer. Khi thực hiện xong các công việc ghi dữ liệu vào tập tin, cần thiết phải đóng luồng đã mở.

Đọc thông tin nhị phân từ tập tin

Trong phần trước đã thực hiện việc ghi thông tin nhị phân vào trong tập tin và bây giờ sẽ thực hiện đọc các thông tin đã ghi vào trong tập tin. Việc đọc thông tin cũng khá đơn giản như là việc ghi dữ liêu. Chương trình 3.11sau minh họa cho công việc này.

Ví dụ 3.11: Lập chương trình đọc thông tin từ tập nhị phân được tạo ra từ ví dụ

3.10.

namespace Vidu3_11

{

class Program

{

static void Main(string[] args)

{

FileStream teptin = new FileStream( @"E:tapnhiphan.data", FileMode.Open);

BinaryReader brTep = new BinaryReader(teptin);

// đọc dữ liệu

Console.WriteLine("Dang doc tap tin...."); while (brTep.PeekChar() != -1)

{

Console.Write("<{0}>", brTep.ReadInt32());

}

Console.WriteLine("....Doc xong"); brTep.Close();

teptin.Close();

Console.ReadLine();

}

}

}

Kết quả chương trình:

Hình 3 11 Kết quả chương trình ví dụ 3 11 Với ứng dụng này thực hiện đọc 5

Hình 3.11: Kết quả chương trình ví dụ 3.11

Với ứng dụng này, thực hiện đọc dữ liệu mà đã được ghi trong ví dụ 3.10. Trong ví dụ này tạo ra luồng FileStream. Lúc này, mode thao tác của tập tin được sử dụng là mode FileMode.Open. Sau đó thực hiện việc gắn luồng này với luồng BinaryReader trong dòng tiếp sau, luồng này sẽ giúp cho việc đọc thông tin nhị phân:

FileStream teptin = new FileStream( args[0], FileMode.Open); BinaryReader brTep = new BinaryReader(teptin);

Sau khi tạo ra luồng giúp cho việc đọc thông tin nhị phân từ tập tin, chương trình bắt đầu đọc thông qua vòng lặp:

while (brTep.PeekChar() != -1)

{

Console.Write(“<{0}>”, brTep.ReadInt32());

..... Xem trang tiếp theo?
⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 03/07/2022