C++進階教程:C++逐行讀取文件
不管使用哪種操作系統,文件都是程序員、計算機用戶和學生日常生活中非常重要的一部分。這些文件幫助我們以不同的格式保存數據,具有安全性和冗余性。因此,在今天這個簡單的教程中,我們將討論在Ubuntu 20.04系統中逐行讀取文件數據的 C++ 示例。
讓我們先從 Ubuntu 20.04 系統中安裝名為“g++”的 C++編譯器開始,因為我們正在用 C++ 語言編寫代碼。為此,我們按Ctrl+alt+T調出終端。
安裝g++,輸入如下命令
- linuxmi@linuxmi:~/www.linuxmi.com$ sudo apt-get install g++
用g++ --version查看g++版本。
- linuxmi@linuxmi:~/www.linuxmi.com$ g++ --version
OK,安裝了g++編譯器后,我們現在就可以實現以下示例了。
在我們的 Ubuntu 20.04 系統中創建了一個新的 c++ 文件。文件名為“linuxmi.com.cpp”。該文件可以在任何編輯器中打開以添加 c++ 代碼。這些編輯器包括文本、vim 和 nano 編輯器。我們現在使用“vim”打開文件“linuxmi.com.cpp”。
示例一
空白文件將在 vim 編輯器中展開。我們已經通過包含一些重要且必要的頭文件來開始我們的代碼。頭文件包括輸入輸出流、字符串和文件流頭文件。代碼將在沒有命名空間的情況下啟動。所以,我們首先啟動了main()方法。在我們的第一個示例中,我們使用已經創建的文件逐行讀取文本。“std”關鍵字將用于在代碼中使用標準輸入和輸出。
因此,輸入文件流用于使用文件對象,即ReadF 從主目錄中讀取文件“www.linuxmi.com.txt”。字符串類型變量被聲明為“data”,以便在讀取后將文件的文本簡單地保存到其中。現在,這里使用 while 循環來使用 C++ 的 getline() 函數。該函數有兩個參數,即“ReadF”對象和字符串變量“data”。getline() 函數將從 www.linuxmi.com.txt 文件中讀取文本并將其保存到變量“data”中,直到文件不為空。當這個條件成立時,我們使用“cout”語句在shell中顯示文件數據。
讓我們使用“g++”編譯器在終端中編譯新實現的代碼。之后,使用“./linuxmi.com.out”指令執行文件。輸出在終端上逐行顯示文件數據。
示例二
我們的第一個示例是關于逐行讀取文件中的數據并顯示在 shell 上。在這個例子中,我們將數據寫入文件,然后逐行讀取。因此,我們通過打開“linuxmi.com.cpp”文件更新了代碼。添加了標題和命名空間。在main() 方法中,我們使用了輸出文件流對象,即“WriteF”將數據寫入www.linuxmi.com.txt 文件。用戶已使用 WriteF 對象將數據添加到文件中。WriteF 對象在此處從用戶那里獲取單行輸入。WriteF 對象將被關閉,并聲明“data”。輸入文件流對象,即ReadF,用于逐行讀取www.linuxmi.com.txt文件中的文本。當文件不為空時,它將繼續使用 getline 方法將文件對象 ReadF 中的數據保存在變量“data”中。cout 語句在 shell 上逐行顯示數據。
最后,ReadF輸入文件流對象被關閉。程序到此結束。現在讓我們執行它。
首先,用g++編譯器編譯更新后的代碼,然后執行。執行后,當用戶在 www.linuxmi.com.txt 文件中寫入一行代碼時,我們還得到了一行輸出。如下:
示例三
因此,這是我們最后一個但同樣重要的示例,逐行從文件中讀取數據。現在,我們打開了相同的 linuxmi.com.cpp 文件并更新了它的代碼,如下所示。因此,我們開始包含必要的頭文件,即 iostream、string 和 fstream,用于文件處理。然后在 main 函數開始之前使用了一個命名空間。該腳本與上述兩個示例代碼略有不同。我們在 main() 函數的開頭聲明了頭文件“fstream”的對象“File”。該對象將用于打開、寫入、讀取和關閉文件。首先,我們使用對象文件打開“www.linuxmi.com.txt”文件。標準“ios”包標識流類型,即輸入或輸出。
您可以看到,我們已將其指定為輸出流。“out”關鍵字將用于在打開文件后寫入文件,而“in”關鍵字將用于從文件中讀取。因此,我們利用“if”語句來檢查“File”對象是否打開了特定文件的條件。為此,使用了“is_open”函數。如果文件為空,文件流對象將在文件中輸入 6 行,如下圖所示。之后,File 對象將關閉輸出流。現在,我們通過“ios::in”聲明打開了帶有流對象“File”的同一個文件www.linuxmi.com.txt。此處使用“if”語句來交叉文件是否為空。如果是這樣,則聲明字符串類型變量“data”。while 循環中的 getline() 函數將逐行從 File 對象中獲取數據并將其保存到變量“data”中。這個變量“數據”將用于在shell上顯示行。最后,文件對象被關閉。
編譯并運行此文件后,將在www.linuxmi.com.txt 文件中寫入一行代碼時,我們還得到了 6 行輸出。如下:
結論
現在我們已經完成了一項非常出色的工作,涵蓋了主題C++:在Ubuntu 20.04系統中逐行讀取文件。我們從這個從已經創建的文本文件讀取數據的簡單示例開始。之后,我們還了解了如何使用文件處理將數據寫入文件,從文件中讀取數據,并在shell上顯示數據。