2016-09-28 3 views
-3

Мне нужно преобразовать csv с плавающей запятой в 2D-массив в c. Вы уже видели статью (Import CSV elements into a 2D array in C), которая объясняет преобразование в целочисленный массив. Может ли какая-либо помощь в изменении этого кода или нового подхода, который я мог бы использовать для преобразования csv в 2D-массив с плавающей запятой
, например: my csv содержит значения, такие как 0.018869,0.015863,0.044758,0.027318,0.049394,0.040823, ..... и составляет 4400 * 500 значений csv. поэтому мне нужно будет использовать большой массив размером 4400 * 500 для включения всех этих значений.Преобразование с плавающей запятой csv в 2d массив в c

Заранее спасибо

+0

Пожалуйста, включите код, который вы должны попытаться решить эту проблему, так что мы можем помочь вам исправить. Это нормально, чтобы изменить свой вопрос. –

ответ

0

Использование atof() для преобразования строк в поплавки. Here найти ссылку, если вы хотите, чтобы читать на нем

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

//counters 
int i = 0; 
int j = 0; 
int k = 0; 

char c = 0; //for storing a char at a time 

char result_char_array[4] = {0}; //float is a 32 bit number, so 4 bytes 

FILE *filep; //pointer to file structure 

float results[100] = {0}; //to store the float 

int main(void) 
{ 

    filep = fopen("C:/Documents/test.csv", "r");  //open file , read only 
    if (!filep) 
    { 
     fprintf (stderr, "failed to open file for reading\n"); 
     return -1; //return negative number so you know something went wrong 
    } 

    c = fgetc(filep); //get first character 

    while(c != EOF) 
    { 
     if((c == ',') || (c == '\n')) //we want to stop at each comma or newline 
     { 
      //i = 0; //reset the count 
      results[j] = atof(result_char_array); //this converts a string to a float 
      j++; //increment j 
      memset(&result_char_array, 0, sizeof(result_char_array)); //clear the array 
     } 
     else 
     { 
      strncat(&result_char_array, &c, 1); 
     } 


     c = fgetc(filep); //get next character 
     i++; 
    } 

    results[j] = atof(result_char_array); //convert last number 

    fclose (filep); //always close the file 

    for(k = 0; k <= j; k++) 
    { 
     printf("Number %d is: %f\n",k, results[k]); //loop through the results and print line by line 
    } 
    getchar(); 
    return 1; 
} 
+0

haha ​​игнорировать, что прокомментировал i = 0, я играл с тем, как формат –

0

Посмотрите на libcsv, который представляет собой библиотеку CSV написана в ANSI C89. Но будьте осторожны, libcsv лицензируется под LGPL.

Смежные вопросы