Thực hành ngôn ngữ lập trình C++ - Bài minh họa cách làm việc với Fstream
Viết chương trình fcompareso sánh nội dung 2 file text - mô phỏng dạng đơn giản của lệnh
COMP trong DOS. Nếu 2 file khác nhau thì in lại nội dung 2 file ra màn hình.
Ta truyền các tham sốcho chương trình (cụthểlà tên 2 file sẽ được so sánh) thông qua dòng lệnh
của DOS. Cú pháp là
fcompare ten_file_1 ten_file_2
TH Ngôn ngữ lập trình C++ Học kì I, năm học 2007-2008
Hoàng Thị Điệp, Bộ môn Khoa học Máy tính
Bài minh họa cách làm việc với
Yêu cầu:
• trước khi đọc/ghi file phải kiểm tra xem có mở được file hay không
• sau khi làm việc xong với file phải gọi đến hàm close()
A. ĐỀ BÀI
Viết chương trình fcompare so sánh nội dung 2 file text - mô phỏng dạng đơn giản của lệnh
COMP trong DOS. Nếu 2 file khác nhau thì in lại nội dung 2 file ra màn hình.
Ta truyền các tham số cho chương trình (cụ thể là tên 2 file sẽ được so sánh) thông qua dòng lệnh
của DOS. Cú pháp là
fcompare ten_file_1 ten_file_2
Dưới đây là ảnh chụp màn hình khi chạy chương trình mẫu:
TH Ngôn ngữ lập trình C++ Học kì I, năm học 2007-2008
Hoàng Thị Điệp, Bộ môn Khoa học Máy tính
B. MÃ NGUỒN
// Tac gia: Hoang Thi Diep
// Muc dich: chuong trinh so sanh noi dung 2 file text
// mo phong dang don gian cua lenh COMP trong DOS
// Cu phap: FCOMPARE FILE1 FILE2
// ----------------------------------------------------------------------------
#include
#include
using namespace std;
bool isFinOk(char * fname);// kiem tra xem file input co mo duoc khong
bool fCompare(char * fname1, char * fname2);// so sanh noi dung 2 file
void print(char * fname); // in noi dung 1 file ra man hinh
// ----------------------------------------------------------------------------
// Chuong trinh chinh
// ----------------------------------------------------------------------------
int main(int argc, char * argv[])
{
// kiem tra cac doi so
if(argc != 3){
cerr << "So doi dong lenh dua vao khong hop le!" << endl;
cout << "Cach su dung: FCOMPARE file1 file2";
return 1;
}
if(!isFinOk(argv[1])){
cerr << "file1 khong mo duoc!" << endl;
return 1;
}
if(!isFinOk(argv[2])){
cerr << "file2 khong mo duoc!" << endl;
return 1;
}
// neu doi so hop le, goi ham so sanh noi dung 2 file
if(fCompare(argv[1], argv[2]))
cout << argv[1] << " va " << argv[2] << " GIONG nhau.";
else{
cout << argv[1] << " va " << argv[2] << " KHAC nhau.";
cout << endl << "-------------------" << argv[1] << endl;
print(argv[1]);
cout << endl << "-------------------" << argv[2] << endl;
print(argv[2]);
cout << endl << "-------------------";
}
return 0;
}
// ----------------------------------------------------------------------------
// Ham kiem tra xem file input co mo duoc khong
// ----------------------------------------------------------------------------
bool isFinOk(char * fname)
{
ifstream fin(fname);
if(!fin) return false;
fin.close();
return true;
}
TH Ngôn ngữ lập trình C++ Học kì I, năm học 2007-2008
Hoàng Thị Điệp, Bộ môn Khoa học Máy tính
// ----------------------------------------------------------------------------
// Ham so sanh noi dung 2 file
// Doi so: ten 2 file mo duoc
// Tra ve true neu noi dung 2 file giong het nhau, false neu nguoc lai
// ----------------------------------------------------------------------------
bool fCompare(char * fname1, char * fname2)
{
ifstream f1(fname1);
ifstream f2(fname2);
bool identical = false;
char ch1, ch2;
while(1){
ch1 = f1.get();
ch2 = f2.get();
if(ch1 == EOF && ch2 == EOF){
identical = true;
break;
}
if(ch1 != ch2) break;
}
f1.close();
f2.close();
return identical;
}
// ----------------------------------------------------------------------------
// Ham in noi dung 1 file ra man hinh
// ----------------------------------------------------------------------------
void print(char * fname)
{
ifstream fin(fname);
char ch;
while((ch = fin.get()) != EOF){
cout << ch;
}
fin.close();
}
File đính kèm:
Thực hành ngôn ngữ lập trình C++ - Bài minh họa cách làm việc với Fstream.pdf

