2013-06-25 81 views
1

我需要一些幫助與C + +如何從C++文本文件中獲取特定行?

我想創建一個包含excersises的程序來練習德國不同的情況。

硬編碼的所有問題和各自的答案似乎是一個可怕的很多工作,並且超級低效。

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

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

任何人都可以請向我解釋如何拉斷,包括所有必要的命令?

+0

你可以使用這種技術:http://stackoverflow.com/questions/5206824/in-c-how-would-i-go-about-getting-a-specific-line-from-a-text-file - 儲存 – Iowa15

回答

1

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

但是,如果您想將它們保存在單獨的文件中,以下代碼段將讀取您的文本文件並將問題存儲在數組(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] 
} 
0

這樣做有兩種方式:

  1. 如果您在獲得問題/答案對計劃您最好的辦法是隻讀過誰的線文件中的行和存儲所有的線。然後你只需在數組中查找它。

  2. 如果由於某種原因,您只想一次只讀一行,您必須讀取行數並計數,直到您找到想要的行。

0

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

該ID可以與這兩個問題配對,並且如果您有多個文件則回答。或者只是將問題與相同順序的答案或甚至相同的文件進行配對。

+0

而且...我會怎麼做? – gooper20

+0

我在工作,給我大約10個小時對我來說編輯這個來展示一個例子 – aah134

0

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

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

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

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

你可以將這個文件加載到內存中並用它來索引「questions」文件。通過將索引內容存儲到文件中,每次程序啓動時都不必從頭開始構建它;只有當問題的文件改變時。

+0

不要爲他過分複雜的事情,他只是想要一堆問題和答案,按他想要的方式去做並不困難做到這一點。 – CrazyCasta

+0

我不會發布與其他答案不同的東西,除非將索引寫入文件。 –

+1

我不同意這個簡單的應用程序需要一個完整的數據庫(甚至是想要的)。如果提問者確實對性能,可查詢性或可用性有要求,他沒有在他的問題中指定他們。在這種情況下,DB似乎過度設計。 – crowder

相關問題