c - 如何从 CSV 文件读入数组?

标签 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]) 但我无法将数字读入二维数组。最好的方法是什么?

最佳答案

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

如果您知道数组的维度,并且不需要错误检查,则可以使用 fscanf

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

fscanf(file, "%*s");

下面将读取一个数字:

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

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

<小时/>

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

关于c - 如何从 CSV 文件读入数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37575129/

相关文章:

c - 循环内的 strcat() 与 sprintf()

c - 在另一个结构中向前声明的结构数组

c++ - Cmake可以生成一个同时支持调试和发布的makefile吗

c - 以编程方式或来自 procfs 的 netstat 进程名称信息

c - MAX 使用 gcc 的 typeof 扩展

c - RegLoadAppKey参数不正确

在 Linux 上交叉构建第三方库位置

c - 将文本文件中的字符添加到数组中

C 获取位/设置位合并

c - 在 Turbo C 中覆盖背景的移动对象