我从CSV文件中读取了4列(整数)。 read函数有效但当我尝试将char值插入数组(整数)时返回此错误
类型" const char *"的值无法分配给类型的实体 "浮动"
我尝试使用atoi
但返回0000,11111等列表
你能给我一些解决方案吗?
代码:
const char* getfield(char* line, int num)
{
const char* tok;
for (tok = strtok(line, ",");
tok && *tok;
tok = strtok(NULL, ";\n"))
{
if (!--num)
return (tok);
}
return NULL;
}
int main(void)
{
FILE *pf=fopen("Trajectory_1.csv","r");
char line[1024];
if(pf==NULL){
printf("ERROR MESSAGE");
exit(1);
}
int x=0;
while(fgets(line,sizeof(line),pf)){
char* tmp=strdup(line);
printf("%s",getfield(tmp,1));
t_h[x]=getfield(tmp,1);
free(tmp);
x++;
}
fclose(pf);
}
在这种情况下只有第一列
修改 代码将是
double getfield(char* line, int num)
{
const char* tok;
for (tok = strtok(line, ","); //comam separator
tok && *tok;
tok = strtok(NULL, ";\n"))
{
if (!--num)
return (atof(tok));
}
return NULL;
}
FILE *pf=fopen("//home//user//Documenti//Bello//Dataset1//Trajectories//Trajectory_1.csv","r"); //rivedere
char line[1024];
if(pf==NULL){
printf("ERR MSG"); // I change this like William suggest
exit(1);
}
int x=0;
while(fgets(line,sizeof(line),pf)){
double d=getfield(line,1)); // I did not understand
}
fclose(pf);
答案 0 :(得分:0)
getField
将返回由num
标识的CSV列的浮点值。每次调用getField
并使用新行进行解析。
然后函数应该返回一个double,即return(atof(tok));
(并声明为double getfield(..
);
您必须删除print语句,因为它调用getField
但getField修改字符串(通过strtok)。似乎也没有必要致电strdup
;让getField在line
上工作。
注意:我不是strtok
专家,但第二次调用(在for语句中)可能是错误的,也可能需要逗号作为终止符。