2013-12-10 55 views
0

我有一個小問題,閱讀最後兩個事件從一個文件

我有包含了大量的信息的文件(發佈於pastbin,因爲它長的漂亮,http://pastebin.com/MPcTMHfd

是的,是一個撲克之星卡牌日誌,但我爲自己製作了一個奇怪的計算器,我甚至向PokerStars問過這個問題。

當我過濾的文件我得到類似

CODE過濾操作:

getline(failas,line); 
    if(line.find(search_str) != std::string::npos) 
     { 
      firstCard = line.substr(4); 
      cout << firstCard << '\n' ; 
     } 

- 結果:

::: 7c 
::: 5d 
::: 13c 
::: 7d 
::: 12h 
::: 13d 

等等,所以我想要做的事情是得到最後一張牌(12h和13h如上例)

我設法得到的是最後一張牌, (13d) 任何想法,我怎麼能讀兩行或任何其他想法如何解決我的小問題?

我知道這是一個初學者的問題,但我沒有真正找到合適的答案。

+1

我打算假設有一個比這更多的代碼。發佈*完整的讀取循環*以及您的*真實*輸入文件和*相關*輸出文件,既需要*和*目前展出的形式。這樣做,你*可能會得到一些答案,但即使如此,它的問題。 – WhozCraig

+0

你的意思是說你的第一張卡片的價值是13d,而你想要其他一些變量儲存12h?然後,您可以使用兩個變量並交替更新它們中的值。 –

+0

只要給網絡上的一些類似的鏈接: http://stackoverflow.com/questions/11876290/c-fastest-way-to-read-only-last-line-of-text-file http:// stackoverflow。com/questions/17877025/read-last-n-lines-from-file-in-c-c – vivi

回答

1

所以你想要n最後一張卡?然後保持「最後n張卡片」列表並更新它找到的每張卡片。

就像是:(手寫代碼)

#include <list> 
#include <string> 

std::list<std::string> last_n_cards; 
const unsigned int last_n_cards_max = 2; 

// basic init to make code simpler, can be done differently 
last_n_cards.push_back("?"); // too lazy to write the for(last_n_cards_max) loop ;) 
last_n_cards.push_back("?"); 

(loop) 
    if(line.find(search_str) != std::string::npos) 
    { 
    currentCard = line.substr(4); 
    cout << currentCard << '\n'; 

    last_n_cards.push_back(currentCard); // at new card to the end 
    last_n_cards.pop_front(); // remove 1 card from the front 
    } 

// At the end : 
cout << "Last two cards are : " << last_n_cards[0] << " and " << last_n_cards[1] << '\n'; 

std::list API是這裏http://en.cppreference.com/w/cpp/container/list

注意:你有沒有考慮過使用其他語言比C++完成這個任務?用python這樣的動態語言解析非perf-intensive文件可能會更容易一些。

+0

謝謝,親愛的先生! :)從來不知道名單(DAMN YOU SCHOOL!),這是一個非常不錯的功能。再次感謝!我喜歡C++語法更多tho,但我想我不能給它一個鏡頭 – Ufikas

+0

@Ufonautas你喜歡C++語法更**嗎?我是一名C++專業人員,我也喜歡C++,但我知道使用它來做正確的工作。 C++類型和過時的接口是一個痛苦。對於這樣的解析任務,我會直接去python(甚至是javascript和node.js)。如果你不知道最後一個動態語言,我虛心地建議你學習其中的一個,因爲它們很好地補充了C++。 – Offirmo

0

可能有兩種簡單的方法來解決您的問題。

  1. 掃描整個文件來找出有多少行(顯卡),然後簡單的設置位置,最後一個卡之前,閱讀它,然後下。你將會看到兩張最後一張牌。

  2. 使用兩個指針。將第一個指針設置爲第一行,然後將第一個指針設置爲第一個+2。然後遍歷整個文件,一旦第二個指針將達到文件結尾(EOF),您的第一個指針將指向最後一個卡片之前的指針。

+0

謝謝!這是一個偉大的想法。需要檢查哪一個Offirmos或你的工作更快:) – Ufikas