c++ Linux ifstream读取CSV文件

c++ linux ifstream read csv file

本文关键字:CSV 文件 读取 ifstream Linux c++      更新时间:2023-10-16
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();
}

这个函数读取一个两列的csv文件,并创建一个以column1为键的column2的映射。我用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("%dn", list_map0.size());
    file.close();
}