Xu Hướng 8/2022 ❤️ 10.2 Một Số Thao Tác Đọc Dữ Liệu Từ File Trong C++ ❣️ Top View | Rafs.edu.vn

Xem 2,871

Bạn đang xem bài viết 10.2 Một Số Thao Tác Đọc Dữ Liệu Từ File Trong C++ được cập nhật mới nhất ngày 30/08/2022 trên website Rafs.edu.vn. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Cho đến thời điểm hiện tại, bài viết này đã đạt được 2,871 lượt xem.

Lập Trình C++: Đọc Ghi Dữ Liệu Trong C++

Cách Đọc Và Ghi File Trong Lập Trình C++ – Đào Tạo Lập Trình C++

Tạo Watermark Cho Ảnh Trong Photoshop

Javascript: Nhúng Javascript Vào File Html

Cách Quản Lý Layer Trong Autocad Chuyên Nghiệp

Chào các bạn đang theo dõi khóa học lập trình trực tuyến ngôn ngữ C++.

Mình đã trình bày đến các bạn một số thao tác cơ bản với file khi sử dụng thư viện cstdio (trong ngôn ngữ lập trình C), sử dụng thư viện này, chúng ta sẽ sử dụng một con trỏ kiểu FILE làm cầu nối trung gian giữa chương trình của chúng ta và file, mọi thao tác trên file đều phải sử dụng con trỏ kiểu FILE này. Trong bài học này, các bạn sẽ cùng mình tìm hiểu thêm một số cách để thao tác với file bằng cách sử dụng các stream mà ngôn ngữ C++ cung cấp.

Như mình giới thiệu ở bài học trước, để thao tác với file trong ngôn ngữ C++, chúng ta sử dụng các class như ifstream (file input), ofstream (file output), hoặc fstream (file input/output) và dữ liệu sẽ được truyền đi một cách tuần tự qua các đối tượng của các stream này, để đi vào file hoặc đi từ file ra chương trình.

File input

Đầu tiên mình muốn giới thiệu đến các bạn một số thao tác đọc dữ liệu từ file sử dụng class fstream mà ngôn ngữ C++ cung cấp. Để sử dụng class này, chúng ta cần include file fstream vào file chương trình:

Do class ifstream và ofstream đều được định nghĩa bên trong file fstream, nên chúng ta chỉ cần include thư viện fstream là có thể sử dụng cả hai class này.

Bây giờ chúng ta cùng tạo một đối tượng file input thuộc kiểu ifstream:

std

::

::

ifstream

fileInput

(

“C:/Users/ADMIN/Desktop/my_document.txt”

);

);

File mà mình muốn đọc có tên là my_document.txt trong thư mục Desktop trên máy tính của mình. Class ifstream có nhiều phương thức khởi tạo khác nhau, nhưng đơn giản nhất là chúng ta truyền vào một string là đường dẫn chính xác của file chúng ta cần đọc dữ liệu. Nếu file đó nằm trong thư mục mà chương trình được build ra thì chúng ta có thể sử dụng đường dẫn tương đối.

Bây giờ mình sẽ kiểm tra xem đối tượng fileInput của mình đã liên kết được đến file cần mở hay chưa bằng cách sau:

if

(fileInput.fail())

(fileInput.fail())

std

::

::

cout

<<

“Failed to open this file!”

<<

std

::

::

endl

;

Phương thức fail sẽ trả về false nếu đối tượng của ifstream không liên kết đến file được. Và chính xác là nó đã không liên kết được với file.

Đó là do trong thư mục Desktop của mình chưa có file my_document.txt nào cả. Bây giờ mình tạo một file my_document.txt chưa có dữ liệu trong thư mục Desktop, chương trình không còn thông báo lỗi gì nữa.

Như các bạn thấy, chúng ta sử dụng các phương thức được định nghĩa trong class ifstream, nên chúng ta chỉ cần sử dụng member selection operator (.) để gọi các phương thức đã định nghĩa sẵn.

Một điều chúng ta cần lưu ý khi thao tác đọc ghi file với ngôn ngữ C là chúng ta luôn phải gọi hàm đóng file fclose ngay khi không còn sử dụng đến file nữa. Đối với các stream xử lý file trong C++ thì đơn giản hơn, khi ra khỏi phạm vi khối lệnh, destructor sẽ tự gọi phương thức close và file stream sẽ tự động đóng lại.

Do đó, các bạn có thể xử lý như sau (hoặc không cần thiết cũng được):

std

::

::

ifstream

input

(

“C:/Users/ADMIN/Desktop/my_document.txt”

);

);

if

(input.fail()) {

(input.fail()) {

std

::

::

cout

<<

“Failed to open this file!”

<<

std

::

::

endl

;

return

-1

; } input.close();

; } input.close();

Bây giờ đến phần xử lý đọc dữ liệu từ file, dữ liệu từ file sẽ truyền qua stream vào các biến trong chương trình. Nhưng trước hết, mình cần thêm một số dữ liệu vào file my_document.txt trước. Nội dung của file my_document.txt như sau:

1

2

3

4

5

Mình sẽ có chương trình đọc dữ liệu từ file thông qua đối tượng fileInput và in ra màn hình như sau:

int

main

()

{

std

::

::

ifstream

fileInput

(

“C:/Users/ADMIN/Desktop/my_document.txt”

);

);

if

(fileInput.fail()) {

(fileInput.fail()) {

std

::

::

cout

<<

“Failed to open this file!”

<<

std

::

::

endl

;

return

-1

; }

; }

while

(!fileInput.eof()) {

(!fileInput.eof()) {

int

n;

n;

std

::

::

cout

<< n <<

n <<

” “

; }

; }

std

::

::

cout

<<

std

::

::

endl

; fileInput.close();

; fileInput.close();

return

0

; }

; }

Tuy nhiên, chúng ta cần biết rõ cấu trúc tổ chức dữ liệu bên trong file là như thế nào để tránh các trường hợp ngoại lệ xảy ra. Ví dụ mình giữ nguyên cấu trúc chương trình như trên và sửa lại file my_document.txt có nội dung như sau:

1 2 3 4 5 a b c

Thử chạy lại chương trình trên, chương trình sẽ rơi vào tình trạng lặp vô hạn. Đó là do kiểu dữ liệu mà chúng ta chọn để lưu giá trị đọc từ file là số nguyên, nhưng trong file lại xuất hiện các kí tự. Do đó, khi đọc hết số nguyên trong file, các kí tự không thể đưa vào biến n được do lỗi định dạng, vòng lặp while không thể kết thúc do chúng ta đặt điều kiện là đọc cho đến khi kết thúc file.

Để khắc phục tình trạng này, chúng ta cần kiểm tra dữ liệu đọc từ file đưa vào chương trình có đúng định dạng hay không, chúng ta có thể làm như sau:

std

::

::

ifstream

fileInput

(

“C:/Users/ADMIN/Desktop/my_document.txt”

);

);

if

(fileInput.fail())

(fileInput.fail())

std

::

::

cout

<<

“Failed to open this file!”

<<

std

::

::

endl

;

while

(!fileInput.eof()) {

(!fileInput.eof()) {

int

n;

n;

std

::

::

cout

<< n <<

n <<

” “

;

else

return

-2

; }

; }

std

::

::

cout

<<

std

::

::

endl

; fileInput.close(); system(

; fileInput.close(); system(

“pause”

);

);

return

0

;

Nhấn F5 để chạy chương trình dưới chế độ Debug, chúng ta sẽ thấy chương trình dừng lại khi đọc xong giá trị 5 và trả về giá trị -2 cho hệ điều hành. Mình đã sử dụng if statement để kiểm tra xem extraction operator có được thực hiện đúng hay không.

Nếu chúng ta vẫn muốn đọc toàn bộ dữ liệu trong file và in ra màn hình, chúng ta có thể đọc từng kí tự trong file vào biến kiểu char, thay vì kiểu số nguyên:

while

(!fileInput.eof()) {

(!fileInput.eof()) {

char

c;

c;

std

::

::

cout

<< c <<

c <<

” “

; }

; }

std

::

::

cout

<<

std

::

::

endl

;

Tiếp theo, chúng ta cùng thử đọc từng dòng dữ liệu trong file vào các đối tượng std::string và in chúng ta màn hình. Mình thay đổi nội dung file my_document.txt thành như sau:

This

is

line

1

This

This

is

line

2

This

This

is

line

3

This

This

is

line

4

This

This

is

line

5

while

(!fileInput.eof()) {

(!fileInput.eof()) {

char

temp; fileInput.getline(temp,

temp; fileInput.getline(temp,

255

);

);

std

::

::

string

line = temp;

line = temp;

std

::

::

cout

<< line <<

line <<

std

::

::

endl

; }

; }

std

::

::

cout

<<

std

::

::

endl

; fileInput.close();

; fileInput.close();

Bên cạnh đó, chúng ta cũng có thể mở file dưới dạng nhị phân:

Đọc dữ liệu dưới dạng nhị phân có thể được áp dụng cho cả file nhị phân hoặc file văn bản.

Sử dụng một input stream cho nhiều file

Cũng như việc chúng ta tạo liên kết tới file với một đường dẫn cụ thể và sử dụng phương thức close để đóng stream, chúng ta cũng có thể sử dụng phương thức open để tạo một stream mới đến một đường dẫn khác. Ví dụ:

std

::ifstream fileInput(

::ifstream fileInput(

“C:/Users/ADMIN/Desktop/my_document.txt”

); fileInput

); fileInput

.close

(); fileInput

(); fileInput

.open

(

“”

C

:/Users/ADMIN/Desktop/my_document2.txt

:/Users/ADMIN/Desktop/my_document2.txt

“”

); fileInput

); fileInput

.close

();

();

Phương thức open hoạt động tương tự phương thức khởi tạo của class ifstream, nên chúng ta có thể tạo kết nối nhiều lần. Tuy nhiên, chúng ta chỉ có thể kết nối đến một file duy nhất tại một thời điểm. Và trước khi tạo liên kết đến file khác, chúng ta nên đóng liên kết trước đó.

Tổng kết

Tổng hợp: đọc file bằng C++ và C

writes

Mình tìm thấy nhiều cách đọc file bằng C++ vào std::string khác nhau, post tạm 1 cách đã, có thời gian post dần thêm.

Cách đầu tiên là đọc file bằng istreambuf_iterator. Ví dụ cụ thể:

File chúng tôi lưu với nội dung như sau:

nguyen chiem minh vu 01216558383 (EOF)

Và đọc file như vầy:

using namespace std;

int main() {

ifstream textfile(“text.txt”);

string s1;

http://rapidxml.sourceforge.net/index.htm

Hẹn gặp lại các bạn trong bài học tiếp theo trong khóa học lập trình C++ hướng thực hành.

Mọi ý kiến đóng góp hoặc thắc mắc có thể đặt câu hỏi trực tiếp tại diễn đàn.

www.daynhauhoc.com

Tổng Hợp 4 Cách Khóa File Excel Bằng Mật Khẩu, Không Cho Chỉnh Sửa

File Cdr Là Gì? Dùng Phần Mềm Nào Để Mở?

File Cdr Là Gì? Cách Mở Và Chỉnh Sửa File Cdr Đơn Giản Nhất

29. Thiết Kế Giao Diện User Forms Trong Vba Excel – Blog Chia Sẽ Kiến Thức Học Excel

Bài 14: Xử Lý Form Trong Php Chi Tiết Dễ Hiểu

Cập nhật thông tin chi tiết về 10.2 Một Số Thao Tác Đọc Dữ Liệu Từ File Trong C++ trên website Rafs.edu.vn. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất. Chúc bạn một ngày tốt lành!

Yêu thích

2826

/ Xu hướng

2906

/ Tổng

2986

thumb