void Lexicon::buildMapFromFile(string filename ) //map { ifstream file; file.open(filename.c_str() ); string wow, mem, key; unsigned int x = 0; while(true) { getline(file, wow); if (file.fail()) break; //check for error while (x < wow.length() ) { if (wow[x] == ',') { key = mem; mem.clear(); x++; //step over ',' } else mem += wow[x++]; } list_map0.put(key, mem); //char to string list_map1.put(mem, key); //string to char mem.clear(); //reset memory x = 0;//reset index } file.close(); }
这个函数读取一个2列csv文件,并创build一个列2的映射,列1作为键。 我使用g ++进行编译,并且该文件位于大学文件共享中,当我使用./foo运行程序时,csv文件(与foo处于同一目录文件夹中)不会被读取…为什么?
也许你没有该文件的读取权限。 发出命令ls -l <csv_file>
查看是否有权读取。 有关文件权限的更多信息,请参阅此链接https://help.ubuntu.com/community/FilePermissions
试试下面的代码对我来说是完美的
#include <iostream> #include <stdio.h> #include <map> #include <string> #include <fstream> using namespace std; int main(void ) //map { map<string, string> list_map0; map<string, string> list_map1; string filename = "csv"; ifstream file; file.open(filename.c_str() ); string wow, mem, key; unsigned int x = 0; while(true) { getline(file, wow); if (file.fail()) break; //check for error while (x < wow.length() ) { if (wow[x] == ',') { key = mem; mem.clear(); x++; //step over ',' } else mem += wow[x++]; } list_map0[key] = mem; //char to string list_map1[mem] = key; //string to char mem.clear(); //reset memory x = 0;//reset index } printf("%d\n", list_map0.size()); file.close(); }