Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Help đọc file.

  1. #1
    Ngày gia nhập
    05 2016
    Bài viết
    13

    Mặc định Help đọc file.

    Mình có một tập tin như này
    DANH SACH NHAN VIEN:
    =================================
    Ma so nhan vien la: asdr3
    Ho va ten: NAM
    dia chi: ha noi
    Ngay thang nam sinh: 11/11/2011
    Quan ly
    =================================
    Ma so nhan vien la: sdzdka
    Ho va ten: NAM
    dia chi: ha noi
    Ngay thang nam sinh: 11/12/2012
    Khong co cap bac
    cho hỏi làm sao để đọc được file này rồi puts lại vào struct . nhân viên. Phần read file thì mình làm oke nhưng phần đọc hơi khó vì file có nhiều ký tự thừa quá.
    Code:
    #include <iostream>
    #include <cstring>
    #include <conio.h>
    #include <string.h>
    #include <fstream>
    #include <iomanip>
    #define getch _getch
    #define gets gets_s
    #define MAX 50
    using namespace std;
    /*
    fstream myfile
    myFile.open(filePath, mod)
    filePath: Duong dan cua file
    mod la che do file trong do
    ios::in - chi de doc
    ios::out - mo file co san de ghi
    ios::binary - mo file o che do nhi phan
    ios::ate - mo file va dat con tro file vao cuoi file
    ios::app - MO file va ghi du lieu vao cuoi file
    ios::trunc - mo file va xoa bo du lieu ghi
    
    */
    typedef struct nv {
    	char maso[15];
    	char hoten[20];
    	char diachi[30];
    	typedef struct ns {
    		int ngay, thang, nam;
    
    	} ngaysinh;
    	ngaysinh ngs;
    	int quanly; //1 or 0
    }nhanvien;
    void nhapvaonhanvien(nhanvien &nv)
    {
    	cout << "Nhap vao ma so nhan vien: ";
    	cin.ignore();
    	gets(nv.maso);
    	cout << "Nhap vao ho va ten: ";
    	gets(nv.hoten);
    	cout << "Nhap vao dia chi: ";
    	gets(nv.diachi);
    	cout << "Nhap vao ngay thang nam sinh: ";
    	cin >> nv.ngs.ngay >> nv.ngs.thang >> nv.ngs.nam;
    	cout << "Nhap vao cap bac cua nhan vien (0 hoac 1): ";
    	cin >> nv.quanly;
    }
    void xuatra(nhanvien nv)
    {
    	cout << "\n=================================\n";
    	cout << "Ma so nhan vien la: "; puts(nv.maso);
    	cout << "Ho va ten: "; puts(nv.hoten);
    	cout << "dia chi: "; puts(nv.diachi);
    	cout << "Ngay thang nam sinh: " << nv.ngs.ngay << "/" << nv.ngs.thang << "/" << nv.ngs.nam;
    	if (nv.quanly == 1) cout << "\nCap bac: quan ly";
    	else cout << "\nKhong co cap bac";
    }
    void nhapdanhsach(nhanvien nv[], int &n)
    {
    	cout << "Nhap vao so nhan vien: " << endl;
    	cin >> n;
    	for (int i = 0; i < n; i++)
    	{
    		cout << "Nhap vao nhan vien so " << i + 1 << endl;
    		nhapvaonhanvien(nv[i]);
    	}
    }
    void xuatdanhsach(nhanvien nv[], int n)
    {
    	for (int i = 0; i < n; i++)
    	{
    		xuatra(nv[i]);
    	}
    }
    void xoa(nhanvien nv[], int &n, int p)
    {
    	for (int i = p; i < n - 1; i++)
    	{
    		nv[i] = nv[i + 1];
    	}
    	n--;
    }
    void xoanhanvienkhongphaiquanly(nhanvien nv[], int &n)
    {
    	for (int i = 0; i < n; i++)
    	{
    		if (nv[i].quanly == 0)
    		{
    			xoa(nv, n, i); i--;
    		}
    	}
    	cout << "Da xoa thanh cong nhung nhan vien khong phai quan ly " << endl;
    }
    int kiemtrafiletrongkhong(char a[])
    {
    	fstream f;
    	f.open("E:\\C\\danhsachnhanvien.txt", ios::in);
    	while (!f.eof())
    	{
    		f >> a;
    		if (a[0] == '\0') return 1; break;
    	}
    	f.close();
    	return 0;
    }
    void xuatrafile(nhanvien nv[], int n)
    {
    	fstream f; char kiemtra[MAX];
    	f.open("E:\\C\\danhsachnhanvien.txt", ios::out | ios::app); 
    	if (kiemtrafiletrongkhong(kiemtra) == 1) {
    		f << "DANH SACH NHAN VIEN:";
    		goto kd;
    	}
    	else 
    	{
    		kd:for (int i = 0; i < n; i++)
    		{
    			f << "\n=================================\n";
    			f << "Ma so nhan vien la: "; f << nv[i].maso << '\n';
    			f << "Ho va ten: "; f << nv[i].hoten << '\n';
    			f << "dia chi: "; f << nv[i].diachi << '\n';
    			f << "Ngay thang nam sinh: " << nv[i].ngs.ngay << "/" << nv[i].ngs.thang << "/" << nv[i].ngs.nam;
    			if (nv[i].quanly == 1)
    				f << "\nQuan ly ";
    			else
    				f << "\nKhong co cap bac";
    		}
    		if (!f.fail()) cout << "ghi file thanh cong " << endl;
    		else cout << "khong ghi duoc file " << endl;
    	}
    	f.close();
    }
    
    void xuatmenu()
    {
    	system("cls");
    	cout << "\n========Menu======\n";
    	cout << "1. Nhap danh sach nv" << '\n';
    	cout << "2. Xuat ds nv" << '\n';
    	cout << "3. xoa bon nv k phai quan ly" << '\n';
    	cout << "4. Ghi file danh sach nhan vien" << '\n';
    	cout << "9. Xuat ra lai menu" << '\n';
    	cout << "0. Thoat CT" << '\n';
    }
    void main()
    {
    	int n, chon;
    	nhanvien abc[MAX];
    	xuatmenu();
    	do {
    		cout << "\nNhap vao lua chon: ";
    		cin >> chon;
    		switch (chon)
    		{
    		case 1: nhapdanhsach(abc, n); break;
    		case 2: xuatdanhsach(abc, n); break;
    		case 9: xuatmenu(); break;
    		case 3: xoanhanvienkhongphaiquanly(abc, n); break;
    		case 4: xuatrafile(abc, n); break;
    		
    		case 0: cout << "Bam phim bat ky de thoat ra \n"; break;
    		default: cout << "Nhap sai roi moi lap lai " << endl;
    			break;
    		}
    	} while (chon != 0);
    	/*nhapdanhsach(abc, n);
    	xuatdanhsach(abc, n);*/
    	getch();
    }
    Đã được chỉnh sửa lần cuối bởi namnntt : 03-06-2019 lúc 10:01 AM.

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    566

    Trích dẫn Nguyên bản được gửi bởi namnntt Xem bài viết
    Phần read file thì mình làm oke nhưng phần đọc hơi khó
    read là gì và đọc là gì? Khác nhau thế nào?
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

  3. #3
    Ngày gia nhập
    05 2016
    Bài viết
    13

    Trích dẫn Nguyên bản được gửi bởi Ada Xem bài viết
    read là gì và đọc là gì? Khác nhau thế nào?

    ghi nhầm phần ghi vào file đó @@
    Phần đọc thì mình dùng hàm seekg đặt con trỏ là ios::cur xong đếm số con trỏ mà phức tạp quá, ví dụ mình đọc từ trên xuống dưới nhưng dữ liệu chuỗi mình lấy strlen ra số độ dài xong cộng vào cho con trỏ nó dịch đúng chỗ cần đọc ra. Nhưng làm chưa thành công được toàn lỗi :(
    2
    =================================
    Ma so nhan vien la: asdkzk2
    Ho va ten: TRAN NGOC NAM
    dia chi: ha noi
    Ngay thang nam sinh: 11/05/2016
    Quan ly
    =================================
    Ma so nhan vien la: ASdkkzd23
    Ho va ten: THU HA NAM
    dia chi: HA NAM
    Ngay thang nam sinh: 01/01/2011
    Quan ly
    Code:
    void docfile(nhanvien nv[], int &n)
    {
    	fstream f;
    	f.open("E:\\C\\danhsachnhanvien.txt", ios::in);
    	While(!f.eof())
    { f >> n;
    	for (int i = 0; i < n; i++)
    	{
    		f.seekg(57, ios::cur);
    		f.getline(nv[i].maso, MAX);
    		f.seekg(12 + strlen(nv[i].maso), ios::cur);
    		f.getline(nv[i].hoten, MAX);
    		f.seekg(10 + strlen(nv[i].hoten), ios::cur);
    		f.getline(nv[i].diachi, MAX);
    		f.seekg(22 + strlen(nv[i].diachi), ios::cur);
    		f >> nv[i].ngs.ngay;
    		f.seekg(2, ios::cur); f >> nv[i].ngs.thang; f.seekg(2, ios::cur); f >> nv[i].ngs.nam;
    	}
    }
    }
    Đã được chỉnh sửa lần cuối bởi namnntt : 03-06-2019 lúc 11:27 AM.

  4. #4
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    566

    Bạn gửi file dữ liệu lên xem. Dữ liệu thực tế một chút.

    Có thể copy + paste vào code tag nếu dữ liệu là file văn bản.
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

  5. #5
    Ngày gia nhập
    05 2016
    Bài viết
    13

    Trích dẫn Nguyên bản được gửi bởi Ada Xem bài viết
    Bạn gửi file dữ liệu lên xem. Dữ liệu thực tế một chút.

    Có thể copy + paste vào code tag nếu dữ liệu là file văn bản.
    So nhan vien: 2
    =================================
    Ma so nhan vien la: asdkzk2
    Ho va ten: TRAN NGOC NAM
    dia chi: ha noi
    Ngay thang nam sinh: 11/5/2016
    Quan ly
    =================================
    Ma so nhan vien la: ASdkkzd23
    Ho va ten: THU HA NAM
    dia chi: HA NAM
    Ngay thang nam sinh: 1/1/2011
    Quan ly
    struct của mình
    Code:
    typedef struct nv {
    	char maso[15];
    	char hoten[20];
    	char diachi[30];
    	typedef struct ns {
    		int ngay, thang, nam;
    
    	} ngaysinh;
    	ngaysinh ngs;
    	int quanly; //1 or 0
    }nhanvien;
    Vấn đề là làm sao bỏ mấy cái râu ria kiểu như Ho va ten... dia chi kia đi để đọc cái nội dung chuỗi đó rồi gán vô struct thôi bạn

  6. #6
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    566

    Mặc định Help đọc file.

    Đây là file văn bản. Bạn đừng dùng hàm seek.

    Bạn có thể đọc từng dòng vào string, phân tích các từ đầu tiên xem có đúng cú pháp không. Nếu đúng thì bỏ qua và lấy đoạn còn lại.
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn