我想将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;
#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保存的俄语文本)。
答案 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];
}