簡體   English   中英

如何從C ++中的文本文件中獲取特定行?

[英]How do I get specific lines from a text file in C++?

我需要C ++的幫助

我正在嘗試創建一個包含練習各種德國案例的練習的程序。

對所有問題和相應答案進行硬編碼似乎工作量很大,而且效率極低。

我要我的程序做的是:從文件X抓取一條隨機行,從文件Y抓取相同的行號。(這似乎是從外部文件中同時獲得問題和答案的最簡單方法。)對我來說,它似乎最合乎邏輯的方法是獲取一個隨機數,並將其用作行號。 但是,那是我走了多遠...

我知道基本的C ++,但是非常渴望學習。

誰能向我解釋如何實現這一目標,包括所有必要的命令?

首先,我建議您將問題和答案存儲在同一文本文件中,這可能是通過在問題行和答案行之間交替來實現的。 這將使糾正錯誤,添加/刪除問題以及數據的常規維護變得更加容易。

但是,如果要將它們保存在單獨的文件中,下面的代碼段將讀取您的文本文件,並將問題存儲在數組(stl向量)中,然后您可以按任何方式對其進行索引或迭代:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

int main()
{
        std::ifstream file("questions.txt");
        std::string line;
        std::vector<std::string> questions;
        while (std::getline(file, line))
        {
            questions.push_back( line );
        }
        // Now do something interesting with your questions. You can index them
        // like this: questions[5], or questions[random_index]
}

有兩種方法可以做到這一點:

  1. 如果您打算獲取問題/答案對,最好只逐行閱讀who文件並存儲所有行。 然后,您只需在數組中查找即可。

  2. 如果由於某種原因,您一次只想獲得一行,則必須閱讀行數並計數,直到到達所需的行為止。

您可能在每一行都有一個關鍵字,例如ID。

該ID可以同時與兩個問題和答案配對(如果您有多個文件)。 或只是將問題與答案的順序相同甚至文件配對。

您正在構建數據庫。
您應該使用數據庫。

問題是問題和答案是可變長度的記錄,這使定位變得困難。 如果所有記錄的長度相同,則可以更快地定位到隨機記錄。

為了找到文本行,您需要閱讀所有其他換行符(因為它們不在每一行的同一列中)。 如果您只需要搜索一次,但是搜索很多次卻很慢,那很好。 現在介紹建立數據庫的原因。

為了更快地查找問題和答案,請創建索引文件或表。 (開始聞起來像數據庫)。 索引文件將包含[question #, file position]格式的記錄,其中文件位置是問題在文件中開始該問題的位置。

您可以將該文件加載到內存中,並使用它來索引“問題”文件。 通過將索引內容存儲到文件中,您不必在程序每次啟動時都從頭開始構造索引。 僅當問題的文件更改時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM