- Gộp 2 hoặc nhiều file văn bản thành 1 file, sau đó sắp xếp các câu theo cách như trên trong file đã gộp... Ta có biến inword ở đây với ý nghĩa khi inword=0 thì ta có thể hiểu l
Trang 2STT Họ và Tên MSSV Email Công Vi cệc Hoàn
thành
Ghi chú
0130023bk
@gmail.com
Kiểm tra file tồn tại, đếm số dòng, từ, câu, đếm số
mỗi từ trong file văn bản
Hoàn thành
gmail.com
Tính điểm số
của 1 câu,
G p 2 file ộp 2 file lại
Hoàn thành
Trang 3N i dung bài toán: ội dung bài toán:
Mô tả các thư viện sử dụng xử lý file , xâu để xây dựng thư viện và chương trình xử lí văn bản file văn bản với các chức năng sau:
- Đọc file văn bản với đường dẫn được người dung nhập vào, báo lỗi nếu không đúng file văn bản, hoặc định dạng không đọc được
- Hiện các thông tin file gồm có :
o Số dòng văn bản (số đoạn)
o Số các câu (phân tách bởi dấu “.” hoặc xuống dòng )
o Số các từ
- Xây dựng từ điển các từ cho file văn bản:
o Đếm các từ khác nhau và số lần xuất hiện của mỗi từ trong file văn bản
o Ghi kết quả ra 1 file văn bản dict.txt với định dạng 3 cột cách nhau bởi ký tự “TAB”, mỗi cột là 1 từ khác nhau
STT <TAB>Từ <TAB>Số lần xuất hiện
- Xắp xếp lại các câu, có chứa số từ xuất hiện nhiều
o Tính điểm số của 1 câu = tổng số lần xuất hiện của tất cả các từ trong câu
o Ghi ra file sort.txt với mỗi dòng là 1 câu với điểm từ cao tới thâp Câu Điểm
Trang 4- Gộp 2 hoặc nhiều file văn bản thành 1 file, sau đó sắp xếp các câu theo cách như trên trong file đã gộp
- Cấu trúc chương trình:
o Thư viện chứa các lớp, hàm xử lý chính (mô tả chi tiết trong báo cáo)
o Chương trình chính để tương tác với người dung, 2 dạng: Console Windows application, có giao diện đồ họa ( tùy chọn, +1 điểm nếu thực hiện)
Trang 5Sinh viên thực hi n: Bùi Tuấn Anhệc
-Để kiểm tra file tồn tại hay ko ta gán con trỏ file có trỏ về giá trị “NULL“ hay ko nếu có ta hiển thị “Không tìm thấy file or file không đúng định dạng”
- Trong bài đếm số câu-dòng-từ :
o Mỗi lần g p dấu xuống dòng(\n) ta tăng dòng lên 1 đơn vị.ặp dấu xuống dòng(\n) ta tăng dòng lên 1 đơn vị
o Ta quy ước cứ mỗi lần g p dấu cách (“ “) ho c xuống dòng(\n), ặp dấu xuống dòng(\n) ta tăng dòng lên 1 đơn vị ặp dấu xuống dòng(\n) ta tăng dòng lên 1 đơn vị dấu(“.”) , dấu hỏi(“?), dấu TAB(“\t”),v.v ta tăng số từ lên 1 đơn vị
Ta có biến inword ở đây với ý nghĩa khi inword=0 thì ta có thể hiểu là ta đang ngoài words(dấu cách,v.v) khi inword=1 thì ta đang trong word Mỗi lần inword=1 ta tăng word lên 1 đơn vị
Tương tự: Mỗi lần g p dấu chấm(“.”) ho c xuống dòng(\n) ta tăng số ặp dấu xuống dòng(\n) ta tăng dòng lên 1 đơn vị ặp dấu xuống dòng(\n) ta tăng dòng lên 1 đơn vị câu lên 1 đơn vị và ta có biến “incau” tương tự như inword
- Trong bài đếm các từ khác nhau và số lần xuất hiện của mỗi từ trong
o Tạo chuỗi , mảng chuỗi và mảng int
(Chuỗi để đọc hết cả file vào một chuỗi ,mảng chuỗi để duyệt chuỗi đã đọc và lập từng từ riêng cho vào mảng, mảng int dùng đẻ ghi lại xem từ xuất hiện bao nhiêu lần.)
o Tạo một cấu trúc lưu từ và số lần xuất hiện của từ đó:
o Trong thân chương trình chính ta sẽ đọc các từ từ file, mỗi lần đọc 1 từ ta sẽ duyệt hết toàn bộ danh sách hiện tại Nếu từ đó đã có rồi
Trang 6thì ta sẽ tăng biến đếm của nó lên 1 Ngược lại ta thêm một phần tử ở cuối mảng và tăng số phần tử của mảng lên
Hạn chế : Vẫn còn phải tùy vào cách viết file văn bản mà ta có thể in chính xác được các giá trị
- Xắp xếp lại các câu, có chứa số từ xuất hiện nhiều nhất
Tính điểm số của 1 câu = tổng số lần xuất hiện của tất cả các từ trong câu .Ghi ra file sort.txt với mỗi dòng là 1 câu với điểm từ cao tới thâp Câu <TAB> Điểm
- Gộp 2 hoặc nhiều file văn bản thành 1 file, sau đó sắp xếp các câu theo cách như trên trong file đã gộp
- Cấu trúc chương trình:
o Thư viện chứa các lớp, hàm xử lý chính (mô tả chi tiết trong báo cáo)
o Chương trình chính để tương tác với người dung, 2 dạng:
Console
Windows application, có giao diện đồ họa
Bài làm:
+)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Trang 7int countLine(char* filename){
FILE* f = fopen(filename, "r");
if(f == NULL){
printf("File %s not found!\n", filename); return -1;
}
int count = 0;
char c;
while((c = fgetc(f)) != EOF){
if(c == '\n'){
count += 1;
} }
fclose(f);
return count;
}
+)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Trang 8int countSentence(char* filename){
FILE* f = fopen(filename, "r");
if(f == NULL){
printf("File %s not found!\n", filename); return -1;
}
int count = 0;
char c;
while((c = fgetc(f)) != EOF){
if(c == '\n' || c == '.'){
count += 1;
} }
fclose(f);
return count;
}
+)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int countWord(char* filename){
Trang 9FILE* f = fopen(filename, "r");
if(f == NULL){
printf("File %s not found!\n", filename); return -1;
}
int count = 0;
char c;
while((c = fgetc(f)) != EOF){
if(c == '\n' || c == '.' || c == ' '
|| c == '\t'){
count += 1;
} }
fclose(f);
return count;
}
+)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[]){
Trang 10if(argc < 2){
printf("Using: /main readfile filename\n");
return -1;
}
if(strcmp(argv[1], "readfile") == 0){
int linenums = countLine(argv[2]);
if(linenums >= 0){
printf("Number of line: %d\n", linenums); }
else{
return -1;
} int sennums = countSentence(argv[2]);
if(sennums >= 0){
printf("Number of sentence: %d\n", sennums); }
int wordnums = countWord(argv[2]);
if(wordnums >= 0){
printf("Number of words: %d\n", wordnums); }
}
}