Получить значение из файла CSV - PullRequest
1 голос
/ 25 февраля 2011

Я хочу спросить, есть ли какой-нибудь способ, которым я могу получить значение первого столбца в последнем, используя программирование на Си.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 25 февраля 2011

Может быть, вы можете посмотреть на libcsv .

2 голосов
/ 25 февраля 2011

Предположим, что мой CSV-файл выглядит так,
Поля: Номер позиции , Номер класса и Номер поставщика .

1111,1414,1000  
1112,1010, 1001  
1113,1112,1002    

C-код для чтения значений из вышеуказанного CSV-файла:

#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);  
}  
1 голос
/ 25 февраля 2011

Я думаю, это зависит от размера вашего файла.Если строки не слишком большие, их не слишком много, и вам все равно, если ваша программа не работает с библиотеками libcs, отличными от GNU, вы можете использовать функцию getline для чтения целых строк в память, пока не достигнете последнего,Тогда это будет так же просто, как найти первую запятую.

Если у вас большой файл, состоящий из маленьких строк, вы можете перейти к концу файла и выполнять резервное копирование байта на байт, пока не найдете '\п.Затем вы находитесь в начале последней строки.

Если и файл, и строки огромны, возможно, сделайте mmap для всего файла, перейдя к его концу и затем прочитав обратно в '\ n'может быть более эффективным, чем все эти fseeks.Хотя mmap, возможно, менее переносим, ​​чем fseeks (поскольку fseek - это стандартный C).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...