Lấy thông tin của 1 sinh viên bất kỳ từ file

Em có một file txt như sau:

Thong tin SV thu 1
MSSV: 001
Ho ten: Tran Dang Khoa
Nam Sinh: 2002
Thong tin SV thu 2
MSSV: 002
Ho ten: Pham Thu Trang
Nam Sinh: 2002
Thong tin SV thu 3
MSSV: 003
Ho ten: Le Hong
Nam Sinh: 2002

Ví dụ em muốn lấy thông tin của sinh viên có mssv là 002 từ file txt này thì làm sao ạ ? Mong mọi người giúp em. Em cảm ơn mọi người ạ.

đọc file,
đọc từng dòng hoặc nếu file này do mình tạo và biết chắc chắn là mã sv cách nhau 4 dòng, thì đọc cách 4 dòng cho nhanh, hoặc nếu lúc đầu mà MSSV lưu theo thứ tự rồi thì thì tìm kiếm theo kiểu nhị phân ấy cho nhanh, rồi khi dòng nào có MSSV: 002 thì đọc các dòng tiếp theo để lấy hết thông tin đó tạo thành 1 object kiểu sinh viên rồi đóng file.

1 Like

cách đơn giản nhất nè:
Sử dụng vòng lặp đọc tuần tự từng dòng 1, mỗi dòng sẽ split(":")[0] <- lấy phần tử đầu tiên khi split
sau đó so sánh nó với MSSV và split(":")[1] so sánh với 002 nếu đúng thì lưu lại và lấy 3 dòng tiếp theo.

Nếu file là bạn tự thiết kế thì mình đề nghị bạn thử xem qua cấu trúc file *.csv xem sao.

3 Likes

Định dạng text ko binary seek được. Có đề bài với one-off sẽ khác nhau.

4 Likes

em đang vướng ở câu cuối ấy a @@!

MSSV,Ho ten,Nam Sinh
001,Tran Dang Khoa,2002
002,Pham Thu Trang,2002

lưu kiểu như trên thì bạn chỉ phải xử lý từng dòng 1 thôi,
có thể sử dụng .slipt(",") để tách 1 dòng thành mảng string 3 phần tử rồi xét phần tử đầu tiên nếu trùng thì in ra toàn bộ

4 Likes

Em cảm ơn anh ạ :heart_eyes: :heart_eyes: :heart_eyes: :heart_eyes:

Bạn có thể chuyển các thông tin nhập vào thành mã thập lục phân bằng std::hex, cách nhau bởi dấu cách (để dễ dùng stream để đọc). Muốn đọc lại thì dùng std::to_string :kissing:

303031 5472616e2044616e67204b686f61 32303032
303032 5068616d5f5468755f5472616e67 32303032

Mà thật ra thì chỉ cần chuyển họ và tên thành hex là được rồi.

1 Like

Nếu “lỡ tay” nhập họ và tên có dấu phẩy thì sao? :thinking:

1 Like

Tronng thực tế thì sẽ có 1 bước kiểm tra dữ liệu đầu vào trước, ta sẽ quy định user có thể nhập ký tự gì không được nhập ký tự gì. Dùng để tránh user khai thác 1 số lỗi liên quan đến ký tự đặc biệt ví dụ như sql injection…

Getline lại rồi dùng std::string::findstd::string::substr.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?