从CSV文件中检索值

从CSV文件中检索值,c,linux,csv,C,Linux,Csv,我想问一下,是否有任何方法可以通过使用C编程检索最后for中第一列的值 谢谢 假设我的.csv文件如下所示, 字段为项目编号、类别编号和供应商编号 1111,1414,1000 1112,1010, 1001 1113,1112,1002 用于读取上述.csv文件值的C代码: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc,

我想问一下,是否有任何方法可以通过使用C编程检索最后for中第一列的值


谢谢

假设我的.csv文件如下所示,
字段为项目编号类别编号供应商编号

1111,1414,1000  
1112,1010, 1001  
1113,1112,1002    
用于读取上述.csv文件值的C代码:

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  

int main(int argc, char* argv[])  
{  
   if (argc < 2)  
   {  
      fprintf(stderr,"Usage: %s csv_file\n",argv[0]);  
      return(1);  
   }  

    FILE *f = fopen(argv[1], "rt");  
    char Line[256];  
    unsigned int AllocSize = 0, Size = 0, n;  
    char *L_text;  

    while(fgets(Line, sizeof(Line), f))  
    {  

      printf("Item = %s \n",strtok(Line, ", "));  
      printf("Class = %s \n",strtok(NULL, ", "));  
      printf("Supplier = %s \n",strtok(NULL, ", "));  

    }  
   return(0);  
}  
#包括
#包括
#包括
int main(int argc,char*argv[])
{  
如果(argc<2)
{  
fprintf(stderr,“用法:%s csv_文件\n”,argv[0]);
申报表(1);
}  
文件*f=fopen(argv[1],“rt”);
字符行[256];
无符号int AllocSize=0,Size=0,n;
字符*L_文本;
while(fgets(Line,sizeof(Line),f))
{  
printf(“项=%s\n”,strtok(行,”);
printf(“类=%s\n”,strtok(NULL,”);
printf(“供应商=%s\n”,strtok(NULL,”);
}  
返回(0);
}  

假设我的.csv文件如下所示,
字段为项目编号类别编号供应商编号

1111,1414,1000  
1112,1010, 1001  
1113,1112,1002    
用于读取上述.csv文件值的C代码:

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  

int main(int argc, char* argv[])  
{  
   if (argc < 2)  
   {  
      fprintf(stderr,"Usage: %s csv_file\n",argv[0]);  
      return(1);  
   }  

    FILE *f = fopen(argv[1], "rt");  
    char Line[256];  
    unsigned int AllocSize = 0, Size = 0, n;  
    char *L_text;  

    while(fgets(Line, sizeof(Line), f))  
    {  

      printf("Item = %s \n",strtok(Line, ", "));  
      printf("Class = %s \n",strtok(NULL, ", "));  
      printf("Supplier = %s \n",strtok(NULL, ", "));  

    }  
   return(0);  
}  
#包括
#包括
#包括
int main(int argc,char*argv[])
{  
如果(argc<2)
{  
fprintf(stderr,“用法:%s csv_文件\n”,argv[0]);
申报表(1);
}  
文件*f=fopen(argv[1],“rt”);
字符行[256];
无符号int AllocSize=0,Size=0,n;
字符*L_文本;
while(fgets(Line,sizeof(Line),f))
{  
printf(“项=%s\n”,strtok(行,”);
printf(“类=%s\n”,strtok(NULL,”);
printf(“供应商=%s\n”,strtok(NULL,”);
}  
返回(0);
}  

也许你可以看看。

也许你可以看看。

我想这取决于你的文件大小。如果行不是太大,也不是太多,并且您不关心程序是否使用GNU以外的libcs运行,那么可以使用getline函数将整行读取到内存中,直到到达最后一行。那么它应该像查找第一个逗号一样简单

如果您有一个由小行组成的大文件,您可以查看该文件的结尾,并按字节备份,直到找到一个“\n”。那么你就在最后一行的开头了


如果文件和行都很大,可能对整个文件执行mmap,直到文件末尾,然后读回“\n”可能比所有这些fseek更有效。尽管可以说mmap的可移植性不如fseek(因为fseek是标准的C)。

我认为这取决于文件的大小。如果行不是太大,也不是太多,并且您不关心程序是否使用GNU以外的libcs运行,那么可以使用getline函数将整行读取到内存中,直到到达最后一行。那么它应该像查找第一个逗号一样简单

如果您有一个由小行组成的大文件,您可以查看该文件的结尾,并按字节备份,直到找到一个“\n”。那么你就在最后一行的开头了


如果文件和行都很大,可能对整个文件执行mmap,直到文件末尾,然后读回“\n”可能比所有这些fseek更有效。尽管可以说mmap的可移植性不如fseek(因为fseek是标准的C)。

如何安装我的意思是什么?我没有在网上找到它,请指导我是的,你必须安装它
make
然后
make install
。如何安装我的意思是什么?我没有在网上找到它,请指导我是的,你必须安装它
make
然后
makeinstall
。这可能是最简单的方法。搜索到底,备份到换行符,提取文本到第一个逗号。这可能是最简单的方法。搜索到底,备份到换行符,提取文本到第一个逗号。