从CSV文件中读取数据

时间:2016-11-30 10:43:40

标签: c++ file csv

我想将CSV文档中的一些数据添加到我的程序中,但是有一个问题。

data.csv

  

条,dangerLevel,Opendate里,的OpenTime,closeDate,关闭;
  Time,spentTime,timeLeft 54,1,05 / 03 / 2015,10:00,06 / 03 / 2015,15:00,29,43;
  55,2,05 / 03 / 2015,10:00,06 / 03 / 2015,15:00,15,77;
  55,2,05 / 03 / 2015,10:00,06 / 03 / 2015,15:00,12,70;

的main.cpp

#include <fstream>
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;

int main () {
            char data_component_opened[100];
            char buffer[1000];
            FILE *fp;
            fp = fopen("data.csv", "r");
                fread(buffer, sizeof(buffer), 1, fp);


                int i       = 0;
                int n       = 0;
                int row     = 0;
                int col     = 0;
                for(i=0;i < 1000;i++){
                    if(buffer[i] == ';'){
                        row++;
                        col = 0;
                    }
                    if(buffer[i] == ','){
                        col++;
                        n = 0;
                    }
                    if(row == 1 && col == 2){
                        printf("%c", buffer[i]);
                        n++;
                    }
                }


            fclose(fp);
}

当我编译这段代码时,我预计“05/03/2015”,但得到“Å”,就像有一些编码错误(就像用ASCII保存的俄语文本)。

1 个答案:

答案 0 :(得分:0)

嘿,我最近也参与了csv文件项目。

我使用了getline函数从文件中获取一行

因为我使用“\ n”功能代替你的“;”

我使用默认的getline(file_name,string_name)

您可以使用getline(file_name,string_name,';')

其中file_name是您正常打开的文件指针的名称。

在循环中使用getline可以获得所有后续行。

此字符串为您提供逗号分隔条目的行。

所以我创建了一个基于逗号分隔字符串的函数

这是函数

//The first input is the number of strings you need to separate
//Article,dangerLevel,OpenDate,openTime,closeDate,Close; means A is 6
//Second input is the line itself from the getline function
//Third imput is the index of the string you want 

string strsplit(int v,string s,int j)
{
    string a[v];
    //Setting delimiter to "," premanently
    string delim=",";
    int start;
    int end;
    start = 0;
    end = s.find(delim);
    int i=0;
    while (end <=s.length())
    {   a[i]=s.substr(start, end - start);
        start = end + delim.length();
        end = s.find(delim, start);
        i++;
    }
    //For the last part of the sequence.
    a[i]=s.substr(start, end);
    return a[j];
}