我需要從外部文件讀取數字並將它們存儲在整數的向量中。我現在可以做到這一點,這要感謝Howard Hinnant和wilhelmtell,他耐心地幫助我們弄清楚爲什麼我的編碼在昨天不工作。C++:使用getline()從外部文件讀取後續問題。如何獲取文件數據的子集?
我一直在試圖弄清楚如何在代碼中加入一個附加功能,但是我已經用盡了我對流的瞭解,並希望得到一些建議。
我想能夠處理包含多組數據的文件。是否有可能從文件中只提取某些數據到矢量中?我想結束包含來自文件不同部分的數據的幾個向量。我在網上搜索,但沒有看到任何提及。
下面是代碼以及我想從中獲取數據的文件示例(我們稱之爲「測試」)。
編輯:我編輯基於CashCow的建議代碼。我現在可以從數據文件中取出一個塊。但我不知道如何獲得我想要的塊。如果我按原樣運行代碼,則會得到一個包含元素2,5,8的向量(這不是我想要的)。要(在我所做的例子4,5,6)得到vectorTwo,我想圍繞while語句添加此:
if(line == "vectorTwo")
{
// The while statement and its contents
}
它沒有工作。我沒有得到任何運行代碼的結果(雖然它編譯)。任何人都可以看到問題是什麼?我想我可以使用這個語句來搜索我需要的數據塊的標題。
//這裏是文件
vectorOne //用於數據的子集的標識符用於一個向量
'1' '2' '3'
的例子中的內容vectorTwo//我如何得到這一個矢量?或者任何其他的矢量?
'4' '5' '6'
vectorThree //標識符數據的子集用於另一矢量
'7' '8' '9'
//代碼: '\''字符是行分隔符。一切都被忽略到第一個'然後一切,直到下一個'是一個數字的一部分。這一直持續到邏輯失敗(文件結束)。我怎樣才能讓它停止在數據塊的末尾呢?
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <iterator>
int main()
{
std::string line;
std::string block; // Edited, from CashCow
const std::string fileName = "test.dat";
std::ifstream theStream(fileName.c_str());
if(! theStream)
std::cerr << "Error opening file test.dat\n";
std::vector<int> numbers; // This code is written for one vector only. There would be three vectors for the example file I provided above; one for the vectorOne data in the file, and so on.
while (true)
{
// get first '
std::getline(theStream, line, '\'');
// read until second '
std::getline(theStream, line, '\'');
std::istringstream myStream(line);
std::getline(theStream, block, '\n'); // Edited, from CashCow
std::istringstream blockstream(block); // Edited, from CashCow
std::getline(blockstream, line, '\''); // Edited, from CashCow
int i;
myStream >> i;
if (myStream.fail())
break;
numbers.push_back(i);
}
std::copy(numbers.begin(), numbers.end(),
std::ostream_iterator<int>(std::cout, "\n"));
}
謝謝。我根據你的建議編輯了上面的代碼,現在我可以得到一段代碼。只是一個問題。如果我想獲得vectorTwo的向量(在我做的例子中爲4,5,6),我將如何獲得這些值?現在我正在隨機。我嘗試使用線== vectorTwo,但沒有奏效。 – user616199 2011-02-15 16:09:01