如何将 csv 文件读入结构体

问题描述 投票:0回答:1

我正在尝试读取以下格式的 CSV 文件:

1.00,1.00,hawaiian_m,1.00,1/1/2015,11:38:36,13.25,13.25,M,Classic,"Sliced Ham, Pineapple, Mozzarella Cheese",The Hawaiian Pizza
2.00,2.00,classic_dlx_m,1.00,1/1/2015,11:57:40,16.00,16,M,Classic,"Pepperoni, Mushrooms, Red Onions, Red Peppers, Bacon",The Classic Deluxe Pizza
3.00,2.00,five_cheese_l,1.00,1/1/2015,11:57:40,18.50,18.5,L,Veggie,"Mozzarella Cheese, Provolone Cheese, SmokedGouda Cheese, Romano Cheese, Blue Cheese, Garlic",The Five Cheese Pizza

并将每一列放入以下结构中:

typedef struct{

    float pizza_id;
    float order_id;
    char pizza_name_id[50];
    float quantity;
    char order_date[50];
    char order_time[50];
    float unit_price;
    float total_price;
    char pizza_size;
    char pizza_category[50];
    char pizza_ingredients[100];
    char pizza_name[50];



} order;

我尝试了以下代码,但没有显示 Pizza_ingredients 部分。

while (!feof(f))
    {
        read = fscanf(f,"%f,%f,%49[^,],%f,%49[^,],%49[^,],%f,%f,%c,%49[^,],%2047[^34],%49[^,]\n",
                    &or[linea].pizza_id,
                    &or[linea].order_id,
                    or[linea].pizza_name_id,
                    &or[linea].quantity,
                    or[linea].order_date,
                    or[linea].order_time,
                    &or[linea].unit_price,
                    &or[linea].total_price,
                    &or[linea].pizza_size,
                    or[linea].pizza_category,
                    or[linea].pizza_ingredients,
                    or[linea].pizza_name);
        linea++;
    }
arrays c csv
1个回答
0
投票

您应该提供所有代码以便更好地调试

你有两个问题我已经帮你解决了

pizza_ingredients
 应该是这样的: 
\"%2047[^\"]\"
 因为里面有一些逗号,最后你也应该防止换行: 
%49[^,\n]

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

typedef struct
{

    float pizza_id;
    float order_id;
    char pizza_name_id[50];
    float quantity;
    char order_date[50];
    char order_time[50];
    float unit_price;
    float total_price;
    char pizza_size;
    char pizza_category[50];
    char pizza_ingredients[100];
    char pizza_name[50];
} order;

int main(int argc, char const *argv[])
{
    FILE *f = fopen("test.csv", "r");
    int linea = 0;
    order or [3];

    while (!feof(f))
    {

        printf("Linea %d\n", linea);
        int read = fscanf(f, "%f,%f,%49[^,],%f,%49[^,],%49[^,],%f,%f,%c,%49[^,],\"%2047[^\"]\",%49[^,\n]\n",
                          & or [linea].pizza_id,
                          & or [linea].order_id,
                          or [linea].pizza_name_id,
                          & or [linea].quantity,
                          or [linea].order_date,
                          or [linea].order_time,
                          & or [linea].unit_price,
                          & or [linea].total_price,
                          & or [linea].pizza_size,
                          or [linea].pizza_category,
                          or [linea].pizza_ingredients,
                          or [linea].pizza_name);

        printf("pizza_id : %f, order_id : %f, pizza_name_id: %s, quantity: %f, order_date:%s, order_time: %s, unit_price:%f, total_price: %f, pizza_size:%c, pizza_category: %s, pizza_ingredients: %s, pizza_name: %s \n", or [linea].pizza_id, or [linea].order_id, or [linea].pizza_name_id, or [linea].quantity, or [linea].order_date, or [linea].order_time, or [linea].unit_price, or [linea].total_price, or [linea].pizza_size, or [linea].pizza_category, or [linea].pizza_ingredients, or [linea].pizza_name);

        linea++;
    }
    return 0;
}

© www.soinside.com 2019 - 2024. All rights reserved.