如何从CSV文件读入数组?

时间:2016-06-01 17:22:43

标签: c

我的csv文件包含以下内容:

            BP  BCS DEB EG  GY  KAP KEC MI
BP          0   216 511 311 22  23  242 550
Bekescsaba  216 0   23  34  11  345 23  42
Debrecen    511 642 0   124 31  124 123 315
Eger        311 1351 31 0   342 532 211 134
Gyor        22  135 341 431 0   134 23  312
Kaposvar    23  14  24  341 14  0   15  32
Kecskemet   242 241 241 135 14  15  0   231
Miskolc     550 24  4   12  352 124 123 0

IMG

我想将数字读入数组。问题是,我怎么能这样做,同时也跳过第一个字符串?

这是读取所有内容的代码:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <math.h>
#include <time.h>
#define MAX 1024

void main() {

    FILE *f;
    float r;
    int i, j;
    char line[1024];
    char city[MAX];
    int mtx[20][20];
    int szam[50];
    char *cities[9] = {"Budapest", "Bekescsaba", "Debrecen", "Eger", "Gyor", "Kaposvar", "Kecskemet", "Miskolc"};
    f = fopen("/home/dumika/Desktop/asd.csv", "r");
    if(!f) printf("File opening problem!");


    //fgets(line, 1024, f);

    while(fscanf(f, "%s", city) != EOF)
    {
        printf("%s \n", city);
    }

}

关于如何在C上实际管理csv i / o的信息非常少。实际任务是要求用户输入两个城市,并计算距离。 我要做的是读取矩阵中的数字,并在指针数组中包含城市。用户写道,例如布达佩斯(索引0)和埃格尔(索引3),距离将是311.(mtx [0] [3]) 但我无法将数字读入2D数组。这样做的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

(旁注:CSV表示comma-separated values;您的文件不是CSV格式)

如果您知道阵列的尺寸,并且不需要进行错误检查,则可以使用fscanf

以下内容将跳过一个单词(由空格分隔)。使用它来跳过实际需要的数字之前的冗余名称。

fscanf(file, "%*s");

以下将读取一个数字:

int distance;
fscanf(file, "%d", &distance);

将这些组合在一个循环中,并进行适当的计数,您将获得数据。

注意:以上是一个快速而肮脏的解决方案。 会在您的文件或读取它的代码中出现错误,并fscanf makes it hard to handle errors。您应该了解如何在C中使用fgetssplit a string