2015-05-29 53 views
0

我是C++編程新手,我試圖打開一個文本文件,其中大部分信息對我沒有用處。該文件看起來像這樣:選擇文本文件中的特定數據,以C++導入2d數組

troncons

0 1 2 ...

2 2 3 4 5 7 ...

0 4 5 ...

...

因此,您可以看到每行有不同的長度。我想先提取的是第二個元素(547),告訴我「troncons」之後的行數。之後,第一列中的數字告訴我信息如何分佈在行中,所以如果它是0,這意味着第二個值是x,第三個是y,但是如果第一個值不是0,那麼第二個值是x,第三個是y值的數量n,第n個下一個值是與x關聯的y。我只使用整數,我試圖創建一個維數組(i,2),其中每行是一對(x,y)。每個結尾還有其他值,但我不需要它。

我得到了我的代碼應該如何工作的想法,但我不知道如何把它寫在C++,因爲我已經習慣了Matlab的

  1. 無論是獲得的行號提取第二行中的值或獲取行的總數並減去3.

  2. 迭代每行並使用條件語句來知道第一個元素是否爲0。

  3. 然後如果它是0,則將第二個和第三個值添加到數組中。

  4. 如果是!= 0,則獲取第三個值並遍歷該數字,以便在數組中添加第二個值中的x和第三個i值中的y。

這就是我做了它在Matlab因爲他們自動處於矩陣文字,很容易與索引來訪問它,但我覺得你不能做到這一點與C++。

我看到那些兩個環節: How do i read an entire .txt file of varying length into an array using c++?

Reading matrix from a text file to 2D integer array C++

但第一個使用的載體或一個dimensonal陣列,第二個直接帶走了所有的信息,並使用靜態存儲器。

+1

_「我不知道如何把它寫在C++,因爲我已經習慣了Matlab的」 _時間學習C++或請問誰知道下的朋友++爲你寫。或聘請顧問這樣做。 –

+0

在[本問題] [1]的回答中描述了逐行讀取文件。 [1]:http://stackoverflow.com/questions/7868936/read-file-line-by-line – Dko

回答

0

這應該讓你去:

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

struct XY { 
    int x; 
    int y; 
}; 

using std::ifstream; 
using std::vector; 
using std::cerr; 
using std::endl; 
using std::string; 

int main() { 
    vector<XY> data; 
    ifstream input("filename.txt"); 

    if (input.good()) { 
     int skip; 
     string troncons; 
     int numLines; 
     input >> skip; 
     input >> numLines; // 547 
     input >> tronscons; 
     data.reserve(numLines); // optional, but good practice 
     for (int i=0; i<numLines; ++i) { 
     XY xy; 
     int first; 
     input >> first; 
     if (first == 0) { 
      input >> xy.x; 
      input >> xy.y; 
      data.push_back(xy); 
     } else {    
      int n; 
      input >> xy.x; 
      input >> n; 
      for (int j=0; j<n; ++j) { 
       input >> xy.y; 
       data.push_back(xy); 
      } 
     } 
     } 
    } 

    return 0; 
} 
相關問題