2013-01-24 28 views
1

我發現的類似,我想實現的東西爲例:Unordered_map值文件

std::unordered_map<std::string,std::string> mymap = { 
    {"us","United States"}, 
    {"uk","United Kingdom"}, 
    {"fr","France"}, 
    {"de","Germany"} 
}; 

但是,我有值是一個CSV文件。

我需要將這些值插入到不同的容器中,然後將它們添加到unordered_map中,還是可以直接從文件中添加它們?

我竭力要弄清楚這樣的時刻,我只是寫文件內容到屏幕上:

int menuLoop = 1; 
int userChoice; 
string getInput; 

while(menuLoop == 1) 
{ 
    cout << "Menu\n\n" 
     << "1. 20\n" 
     << "2. 100\n" 
     << "3. 500\n" 
     << "4. 1000\n" 
     << "5. 10,000\n" 
     << "6. 50,000\n\n"; 
    cin >> userChoice; 

    if(userChoice == 1) 
    { 
     cout << "\n20\n\n"; 
     string getContent; 
     ifstream openFile("20.txt"); 
     if(openFile.is_open()) 
     { 
      while(!openFile.eof()) 
      { 
       getline(openFile, getContent); 
       cout << getContent << endl; 
      } 
     } 
     system("PAUSE"); 
    } 
} 

文件的內容:

Bpgvjdfj,Bvfbyfzc 
Zjmvxouu,Fsmotsaa 
Xocbwmnd,Fcdlnmhb 
Fsmotsaa,Zexyegma 
Bvfbyfzc,Qkignteu 
Uysmwjdb,Wzujllbk 
Fwhbryyz,Byoifnrp 
Klqljfrk,Bpgvjdfj 
Qkignteu,Wgqtalnh 
Wgqtalnh,Coyuhnbx 
Sgtgyldw,Fwhbryyz 
Coyuhnbx,Zjmvxouu 
Zvjxfwkx,Sgtgyldw 
Czeagvnj,Uysmwjdb 
Oljgjisa,Dffkuztu 
Zexyegma,Zvjxfwkx 
Fcdlnmhb,Klqljfrk 
Wzujllbk,Oljgjisa 
Byoifnrp,Czeagvnj 
+0

你能告訴我們你的文件20.txt看起來像什麼嗎? – us2012

+0

@ us2012它在問題的底部。 – lauw0203

回答

2

要提取您的數據,使用CSV解析器庫或使用逗號作爲分隔符手動分割文件的每一行。 CSV文件與文本文件沒有區別;他們只是遵循獨特的數據格式。

中間數據結構是不必要的。假設您的數據格式爲[key],[value],請使用unordered_map here的C++文檔來正確插入數據。

實施例:

string line; 
getline(file, line); 

// simple split (alternatively, use strtok) 
string key = line.substr(0,line.find(',')); 
string value = line.substr(line.find(',')+1); 

unordered_map<string,string> mymap; 
mymap[key] = value; 

編輯:用定界符的getline US2012的方法也是特別有用的。也請記住,必須注意閱讀CSV的帶分隔符的數據,常常被用引號引起來的值時表示支付:

"hello, world","hola","mundo" 

在CSV格式的更多信息,可以發現here

2

您可以直接在getline中指定分隔符。

 while(true) 
     { 
      string key, value; 
      //try to read key, if there is none, break 
      if (!getline(openFile, key, ',')) break; 
      //read value 
      getline(openFile, value, '\n'); 
      mymap[key] = value; 
      cout << key << ":" << value << endl; 
     } 

注意,目前的循環檢查太晚了,無論你在文件的末尾,會產生一個空鍵,值對。以上已更正。