1. Trang chủ
  2. » Giáo án - Bài giảng

Lập trình C# từ cơ bản đến nâng cao phần 2

20 373 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 20
Dung lượng 1,49 MB

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

Nội dung

PDF giáo trình lập trình C từ cơ bản đến nâng cao của Phạm Công Ngô Đầu thế kỷ XXI, Microsoít đite ra một bộ Visual Studio ,NET (VS 7.0),Có thể nói từ vs 2001 đến vs 2003 đã có một bước cải tiến đảng kể vểnội dung, Bộ Visual Studio 6.0 (với các ngôn ngữ Visual Basic 6.0, VisualC++ 6.0, ASP 3.0,...

Trang 1

ChươNq 8 F ì I es

giống như mọi ngôn ngữ khác Có hai cách ghi và đọc dử liệu vào íiles; kiểu file íext và kiểu file nhị phân

8. 1 G H I / Đ Ọ C F I L E T E X T

ỉ<hi viết chương trinh để luu dữ liệu vảo fi!e, ta phải thêm dòng tiêu đề;

using System.10;

8.1.1 Ghi d ữ liệu v ã o file

Cú pháp để ghi dữ liệu vào íile:

s t r in g filenaine = ” c ; \ \ C S \ \ t e s t ĩ t x t

StreamWriter sw = new StreamVỉriter (filename)

sw.Write("This i s the t e x t " ) ;

Sau khi ghi xong cần phải đóng file lại

sw.Close () ;

8.1.2 Đ ọ c dO liệu tù file

s t r in g filenaiTte “ " c : \ \ c s \ \ t e s t l txt" ;

StreamReader s r l = new StreamReader {filen am e);

s r l C l o s e O ;

^ V i à ụ S l

using System;

using System.10;

u sin g System.Text;

c i a s s PileT ext

s t a t i c s t r in g f i l e l * * ' c : \ \ t e s t f i l e t x t ” ;

s t a t i c doxible a * 123.456;

• s t a t i c i n t b * 789;

s t a t i c châr kt *

Trang 2

s t a t i c v o id Main(stríng( ] args)

{

using (StreamVỉriter sw = new StreêưnWriter ( f i l e l ) )

{

sw.Write {•'This i s a t e x t ; a “ ");

sw.W riteLine(â);

sw.WriteLine (b );

sví.VíriteLine ( k t ) ; sw.Close ();

ì

StreamReader s r l " new S tr e a m R ea đ e r (file l);

s t r in g input;

w h ile ((in p u t = srl.R ea d L in e( ) ) ! = n u ll)

C onsoĩe.W riteLine(input);

)

Console.WriteLine("Ket th u c !")!

s r l C i o s e ();

C onsole ReađLine{) ;

} }

This ỉs a text; a - 123.456

789

M

Ket thuc

Chú ý: Một cách khác đ ể ghi d ữ iiệu vào file Tniớc hếỉ phải khai

báo biến file:

StreanMriter sw;

Tạo tìle text nhờ hàm CreateYextQ:

s t a t l c s t r in g f i l e l * " c : \ \ t e s t f i l e t x t " ;

sw •= F i l e C r e a t e T e x t ( f i l e l ) ;

Trang 3

I ?

Ghi dữ liệu vào file:

sw W riteL inerT his i s a t e x t " ) ;

Sau khi ghi xong dữ liệu cần phải đóng file lại

SM.Close 0 ;

Đọc dữliệu từíiie:

Khai báo đối tưỢng file:

StreanReader s r l ;

Mở file:

s t r in g input;

s r l “ F ile O p e n T e x t ( f ile l) ;

Đọc file:

input=srl.ReadToEnd();

Hiển ữiị dữ liệu sau khi đọc:

Console.W riteLíne(input);

Ui dụ 8.2.

using System;

using System.10;

c l a s s FileT ext

{

s t a t i c s t r in g f i i e l = "c : \ \ t e s t f i l e t x t " ;

i

StreamHritec sw; / / ghi du l i e u vao f í l e

sw = F ile C r e a t e T e x t ( f iie l) ;

sw.WriteLine("This i s a t e x t " ) ;

sw.WriteLine{"Dai hoc Bach Khoa Ha N oi.");

sw.WriteLine("Trung tam Genetic Singapore.");

sw.WriteLine(123.456);

SM.Close();

StreamReader s r l ; / / doc du l i e u tu f i l e

/ / =* new StreamReader ( f i l e l ) ;

Trang 4

s t r i n g input;

s r l * F i l e O p e n T e x t ( f ile l) ; input « srl.ReadToEnđ0 ;

C on sole.W riteL in e(in p u t);

Console VíriteLine (** The end o f the stream!” );

s r l C l o s e 0 ;

C onsole ReadLine();

} }

H k ể ' í quá:

Thìs is a text Daí hoc Bach Khoa Ha Noi Trung tam Genetic Singapore

123.456

Ta cũng có th ể đọc file tíieo các dòng kế tiếp như đoạn m ã dưới đây:

StreamReader sr;

s t r in g input;

s r “ F i l e O p e n T e x t ( f i l e l ) ; while-(true)

i f ( i n p u t »» n u lĩ) break;

C onsole WriteLine(in p u t);

}

s r C lo s e O ;

s Ví dụ 8.3.

using System;

u sin g System 10; •,

u sin g System.Text;

c l a s s FileT ext

{

s t a t í c s t r in g f i l e l = " c : \ \ t e s t f i i e t x t " ;

104

Trang 5

s t a t i c doubie a * 123.456;

s t a t i c void Main (stringỉ ) args)

{

using (5treamWriter sw « new StreamVíriter (f i l e l )

I

sw.WriteLine ( a ) ;

sw.VíriteLine (b );

sw.Clos€ ();

)

StreamReaàer sr;

s t r in g input;

sr « File.OpenText ( f i l e l );

w h ile(tru e)

{

input * sr.R eadLine();

if ( i n p u t “ n u ll) break;

C onsole-W riteLine(input);

1

Console.WriteLíne (’* Ket thuc !'*);

s r.C lo s e 0 ;

C onsoie ReadLine();

quá:

This is a text; a = 123,456

789

M

Ket Ihuc.

Trang 6

8 2 G H I/Đ Ọ C FILE NHỊ PH Â N

Việc ghi/đọc dữ liệu của file nhị phân có nhiều ưu điểm hcAi ỉile text

vì bảo mật file cao hơn ở đây sỗ trình bày cách ghi/đọc dữ liệu cho một byte và cách ghi/đọc dữ liệu cho một đối tượng chúÈi nhiều trường dữ iiệu

- Ghi dữ liệu vào file kiểu byte:

+ Giả sử ta khai báo một biến mảng kiểu

byte [ ] b l = { 1, 2, 3, 4, 255} ;

+ Khai báo đối tượng để ghì dữ liệu vào file "testbin.dat" ở ổ đĩa C;

F i l e S t r e a m ( " c : \ \ t e s t b i n d a t ” , FileMode.OpenOrCreate,

P ile A c c e s s W r it e , P iỉe S h a r e N o n e );

+ Thựt hiện quá tìình ghi các phần tử của mảng số b l có kiểu byte:

fo reach (b y te bnext in b l) {

sw.W ríteByte(bnext);

} Sau khi ghi xong, ta phải đóng fiie )ại

s w C lo s e ();

- E)ọc dữ liệu từ fi)e kiểu byte;

+ Mở file để đọc:

F ile I n fo f r » new F ile I n fo r c : \ \ t e s t b i n d a t ' ' );

stream strm ■ fr.OpenReađ<);

+ Sử dụng vòng lặp để đọc:

in t i ;

w hile(true)

i - strm.ReadBỵtỹO ;

C o n s o le w r it e r { 0 ,4 ) " , i ) ;

1

+ E>óng file sau khi đọc xong:

strm C lo se{)?

Trang 7

& Ví dụ 8.4. Ví dụ này cho phép ta ghi và đọc các số có kiểu byte (giá trị 0 ^ 255)

u sin g System;

u sin g Sỵsteni.IO;

c ỉ a s s P ile b in / / c a c so kieu bỵte

{

s t a t i c v o id Main (stringl ] args)

{

P ile S tr e a m sw = new F ile S tre a m (*'c : \ \ t e s t b i n dat” ,'

foreach (b yte bnext in bl)

í

sw W riteByte(bnext);

sw.Close (>;

/ / Doc đu ĩ i e u tu f i l e

F iie I n f o f * new F ile I n fo (” c : \ \ t e s t b i n dât” );

stream strm » f OpenRead();

i n t i /

w h ile (tr u e )

i = s t r m R e a d B y t e 0 /

i f ( i « -1) breâk/

)

stm ì-C lose {) /

Consoie ReadLine()/

)

}

^ ^ K ể t quả:

255 33 44 55 66

Trang 8

Ta có thể thực hiện việc ghi/đọc dữ liệu của nhiều kiểu dữ liệu khác nhau bằng file nhị phân

- Ghi dữ liệu từ íile nhị phân;

s t r i n o f i l e l = " c : \ \ F i l e B i n l d a t " ;

FileStreâfn f i l e l ;

s t r i n g name; //d ữ l i ê u thành viên

/ / khai bảo đ6i tượng wf cho v iê c ghi vào f i l e nhị phán

/ / Các hàm Write {) để g h i từng thảnh vỉén wf,Write(name);

w f.W rite(sa la ry ) /

“ Đọc dữ liệu từ íilc nhị phân:

Khai báo file cần đọc:

riieS trea m f i l e l ; Khai báo đối tưỢng rf cho việc đọc:

BinarỵReađer r f « new B in a r y R e a d e r (filô l);

Các hàm để đọc dữ liệu nhị phân:

name “ rf^ R ead strin g{);

s a la r y « r f ReadDoiable ();

liệu khác nhâu

b y te b l ; b l * rfrP e â d B y te 0 ;

char c h l; c h l « rf.ReadChar();

decimâl d l; d l * rf.ReađDecim al();

double d2; d2 « r f ReadDoưble();

f l o a t f l ; f l » r f R e a d s in g l e 0 ;

i n t a ; a * rf,R e a d In t3 2 ();

long b; b * rf • R e a d ln t6 4 í) ;

s b y te s b l / s b l * r f •ReađSByteO;

u in t u i l ; u i l “ rf-R ead ư ln t32{);

ulong u l l ; u l l = rf.R eadU Int640 ;

108

Trang 9

Vi d ụ 8.5.

using System;

using System 10;

c l a s s FiieBin2

(

p r iv a te s t r in g name;

p r iv a te in t age;

p r iv a te double salary;

p u b lic FileBin2()

I

name “

sa la ry = ũ;

}

{

this.name = name;

t h i s a g e * age/

t h i s s â l a r y » Sâlary;

)

public void Inputo

(

Console.Vírite ("\ nNhap ten: **);

name * Console.ReadLine0 ;

Consoỉe W rite("Nhap t u o i : " );

age = Int32»Parse(Console.ReadLine ( ) ) ;

C onsole,W rite("Nhap ĩuong: ” );

sa la r y = Double Parse(ConsoÌe.ReadLine());

)

p u b lic void Show()

Console.WriteLine(’'Ten: *'+name+''; Tuoi: ’.'+age);

Trang 10

C on sole.W riteL in eL u on g: **+saLary);

)

p u b lic void SaveData(FileStream f i l e l )

wf.Write (name);

wf Vírite (a g e);

wf W r ite (sa la r y );

}

p u b lic void ReađData(FileStream f i l e l )

{

BinaryReader r f * new B i n a r ỵ R e a đ e r / name « r f ReadStringO

age * r f.R e a đ ln t3 2 0 ;

sa la rỵ * r í ReadDouble();

}

p u b lic void MenuO

{

Console • VíriteLine (" 1, Nhap du l i e u ” );

Console WriteLine <"2• Doc va xem " );

Console WriteLine (” 3 • Thoat” );

Console• WriterNhap so 1 - 3 de lua chon: " );

} )

c l a s s T e s tP ile

{

s t a t i c v o íd Main (string[ ] args)

{

FileBin2 p » new F ileB in 2 ();

Trang 11

s t r i n g filenam e = ” c : \\D a t â d a t ’* ;

w h ile (c h o ic e !» ” 3")

{

c h o ic e * Console.ReadLine0 ;

sw itch (ch o ic e)

{

Câse ” 1*’ : Console.WriteLine Save data to

EileStream fwr * new r ile S t r e a m (fiie n a m e ,

EileM ođe C rea te, r i l e A c c e s s Write^ r i l e S h a r e W r ite );

p » new F ileB in 2 ();

p SaveData(fwr);

fw r.C lose 0 ;

break;

c a se ” 2": Consoie.WriteLine ("Read dâtâ from f i l e ” );

F ile A c c e s s R e a d , r i l e S h a r e R e a đ ) /

p »,new F ileB in 2 ();

p,R eađ D ata(fr)r

p Show(>;

break;

c a se ” 3" : continue;

}

MENU

1 Nhap du lleu

Trang 12

3 Thoat

Nhap so 1 - 3 de lua chon: 1 Save daĩa to file

Nhap ten: Hoa Nhap tuoi; 22 Nhap luong: 1000

MENU

1 Nhap du líeu

2 Doc va xem

3 Thoat

Nhap so 1 - 3 de lua chon: 2 Read data from file

Ten: Hoa; Tuoi; 22 Luong: 1000

Việc ghi/đọc bằng file nhị phân có thể ử>ụt hiện cho một mảng đối íuọng Mỗi đối tuỵng lại bao gồm nhiểu kiểu dữ liệu thành phần khác nhau

Ví d ụ 8 6 Viết chutữìg trinh để lưu dử iiệu vào file

using System;

u sin g System 10;

c l a s s FileB in3

p r iv â t e s t r in g nâine;

p r iv a t e i n t age;

p r iv a t e double salary;

p u b lic FileB in3()

Trang 13

sa la r y * 0;

t

public voíd Inputo

I

C o n s o l e W r i t e c * \ n H h a p t e n : ' * ) ;

name = Console.ReadLine 0 ;

Cofisole,Write (”Tuoi: '*);

age = Int32.Parse(Consoie.ReâdLine( ) ) ;

Console,Write Luong: *');

Sâlary = Double.Pârse(Conscle.ReadLine0 ) ;

}

p u b l i c v o i d S h o w ( )

(

C o n so le M r ite L in e D o c du iie u tu

Console WriteLine("Luong: "+ sa lâ r y );

)

p u b l i c v o i d S a v e D â t a ( r ỉ i e S t r e a m

BinaryVĩriter wf = new BinarỵWriter ( f i l e l ) ;

w f W r i t e < n a m e ) ;

wf Vírite <âge);

w f.W r ite (sa la r y );

p u b l i c v o i d R e a đ D a t a ( F i l e S t r e a m f i l e l )

{

BinaryReader r f * new BinarỵReader ( f i l e l ) ;

age = rf.R e a d ln t3 2 ();

S â l a r ỵ « r f • R e a d D o u b l e { > ;

Trang 14

c l â s s T e s t r ile

s t a t i c void Main (stringC ] args)

i n t n;

Ccnsole.VíriteTNhap n *

n » Iĩìt32.Parse(Console^ReadLine( ) ) ; FileBiiì3 [] p = new FileBin3[ n) ;

s tr in g filename » ” c:\\Data.đat**;

Con$ole.WriteLineCGhi du l i e u vao f i i e ” );

FileStream fwr * new FileStream (filenam e, FileMode.Create,

F ileA ccess,W rite/ F ileS h are.w rit e ) ;

f o r ( i n t i * 0; i < n; i++)

{

i] * new FileBin3 ();

Ịi i) ,Input 0 ; f( i] SaveData (fwr);

1

fw r.C lose () /

/ /

-Console,W riteLine{’* Doc du l í e u tu f i l e ” );

FileBin3 [ ] p i “ new FileBini^ n] ; rileStream f r = new FileStream (filenam e, rileMode.Open, PileAccess.Read, r ile S h â r e Read);

f o r ( i n t i * 0; i < n; i++)

{

pK i) “ new F ile B ín 3 ();

pl[ i} ReadĐata(fr);

pl[ i] Show() ;

}

Console ReadLine ();

} )

114

Trang 15

^ ^ K ể t quả:

Nhap n = 2

Ghi du lieu vao fìle

Nhap ten: Mai

Tuoi: 22

Luong: 1000

Nhap ten: Ha

Tuoi: 35

Luong: 2000

Doc du lieu tu fìle

Ten: Mai: Tuoi: 22

Luong: 1000

Doc du lieu tu file

Ten; Ha; Tuoi; 32

Luong; 2000

G v i dụ 8 7 Xây dựng m ột menu để th ụ t hiện các thao tác: Nhập, liệt

kê, xoá, sửa tim kiêm, bổ sung

using System; //C o n so ie A p p lica tio n

c l a s s person

i

p r iv a te s t r in g narne;

p r iv a te long ID;

p r iv a te i n t age;

/ /

ĨD = 0;

/ /

Trang 16

public s t a t i c i n t n;

/ / -

-pubĩic void InputO

I

f o r ( i n t i = 0 ; i < n; Ì++)

( p( i] = new p erso n O ;

Console WriteLine ("person { 0) " , i ) ; Console.VỉriteLine ("Enter name: " );

p( i] name = Console.ReadLine 0 ; Console.WriteLine("Enter ID: ");

p( iỊ ID = Int64 Parse (Console.ReadLíne 0 ) ; Console.KriteLine("Enter age: ");

p; i] age = Int32 Parse (Console.ReađLine {)) ; ì

} / / -

-pidDlic void Show()

t

f o r ( i n t i * 0; i < n;

CcnsOÌe.WEiteLine("Name:{ 0) ; ID:{ 1} ; age: {2 }" , F<i].nairae,

p{ i] ID, ri i] age) ;

1

-public void SearchNameO

(

s tr in g namel;

Consoie.VIrite ("Enter nante t o search: ” );

namel “ Console.ReadLine();

f o r ( i n t i * 0 ; i < n; i++)

{

i f (String.Ccsnpare (namel, F( i] name) ** 0)

116

Trang 17

C o n so le.V ỉriteL in e ("Name; f CỊ ; ID: ( l } ; a g e : 12}",

p[ i] naine, p{ ij ID , p[ i] a g e );

}

)

/ / - -

-p ublic void SearchlDO

i

long id l;

C onsole.W rite("Enter ID to search: ” );

i d l = In t6 4 Parse{Consoie.ReadLine());

f o r ( i r t i = Ũ; i < n; i++)

{

i f (íd l “= p( i] ID)

Consoie VỈriteLine (" Narre: { 0 } ; ID: I 1} ; age : { 2 } ",

p l i ỉ n a ĩ r e , p [ i ] , I D , p ( i ] a g e ) ;

)

}

/ /

-p u b lic void D eleteO

{

long id l;

C onsole.W rite("Enter ID to search: ");

i d l = In t64 Parse(Console.ReadLine());

f o r ( i n t i = 0; i < n; Ì++I

{

i f (id l == FÍ il -ID)

{

Console.VỉriteLine (" Name:i 0} ; ID:{ 1) ; age: {2}", p( i] name,

p i] ID, p( i) age) ;

w h ile ( i < n)

{

i) = p( i+ i] ; i++;

Trang 18

n = n - i ;

/ / - -

-public void E d i t o

{

s t r in g namel;

C onsole.W rite("E nter name to sea rch : ” );

namel * Console.ReadLine();

f o r ( i n t i = 0; i < n; i++)

{

i f (String.Ccxnpare (namel,p( ij name) == 0)

í

C on sole.V íriteL in e {" Narae: ( 0 ) ; ID: { 1 } ; age: { 2 ) " ,

Pí i] name, p [ i ] I D , p [ i ] a g e ) ;

Console.KriteLine {" person { 0) ” , i) ; Console.W riteLine("Enter name: ” );

p{ i] name “ Console ReaoLine () ;

C onsole.K riteL inerE nter ID: '•);

Console.WriteLine(” Enter age: ");

p( i) age - Int32.Parse(Console.ReadLine {)) ;

} / /

-p u b lic v o id A -p -penđO

I

p( nl “ new personO ; Console WriteLine C’ Enter name: ” );

fị n] name * Console.ReadLine 0 ;

118

Ngày đăng: 24/03/2016, 17:01

TỪ KHÓA LIÊN QUAN

w