dados *vetor;
int tam = 0;
char *price, *code, *taxes, *description, *barcode, *token, linha[100000];
arquivo = fopen("arquivo.jso", "r"); //LÊ O ARQUIVO JSO
if (arquivo == NULL) {
printf("Erro ao ler o arquivo!\n");
}
while (fgets(linha, 100000, arquivo) != NULL) { //PEGA OS DADOS DE UMA LINHA DO ARQUIVO...
if (tam == 0) {
tam++;
vetor = malloc(tam * sizeof (dados)); //INICIA O VETOR
token = strtok(linha, "[]"); //QUEBRA AS [] DO ARQUIVO
token = strtok(linha, "{}"); //QUEBRA AS {} DO ARQUIVO
code = strtok(token, ","); //SEPARA O CÓDIGO DO PRIMEIRO PRODUTO ATÉ A ','
price = strtok(NULL, ",");//SEPARA O PREÇO DO PRIMEIRO PRODUTO ATÉ A ','
description = strtok(NULL, ",");//SEPARA A DESCRIÇÃO DO PRIMEIRO PRODUTO ATÉ A ','
barcode = strtok(NULL, ",");//SEPARA O CÓDIGO DE BARRAS DO PRIMEIRO PRODUTO ATÉ A ','
taxes = strtok(NULL, ",");//SEPARA O IMPOSTO DO PRIMEIRO PRODUTO ATÉ A ','
Pergunta
samucajeremias
Não estou conseguindo armazenar dados que pego de um arquivo no vetor de posição posterior à posição 0, como fazer em C?
link do arquivo JSO: https://mega.nz/file/aFIxlQxK#ASFRCCyYMHqZLdgdgdqHIMNXGPgTzXRGHKi3dLoRAg4
Segue o código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
*
*/
typedef struct {
char price[50];
char description[50];
char taxes[50];
char code[50];
char barcode[50];
} dados;
int main(int argc, char** argv) {
FILE *arquivo;
dados *vetor;
int tam = 0;
char *price, *code, *taxes, *description, *barcode, *token, linha[100000];
arquivo = fopen("arquivo.jso", "r"); //LÊ O ARQUIVO JSO
if (arquivo == NULL) {
printf("Erro ao ler o arquivo!\n");
}
while (fgets(linha, 100000, arquivo) != NULL) { //PEGA OS DADOS DE UMA LINHA DO ARQUIVO...
if (tam == 0) {
tam++;
vetor = malloc(tam * sizeof (dados)); //INICIA O VETOR
token = strtok(linha, "[]"); //QUEBRA AS [] DO ARQUIVO
token = strtok(linha, "{}"); //QUEBRA AS {} DO ARQUIVO
code = strtok(token, ","); //SEPARA O CÓDIGO DO PRIMEIRO PRODUTO ATÉ A ','
price = strtok(NULL, ",");//SEPARA O PREÇO DO PRIMEIRO PRODUTO ATÉ A ','
description = strtok(NULL, ",");//SEPARA A DESCRIÇÃO DO PRIMEIRO PRODUTO ATÉ A ','
barcode = strtok(NULL, ",");//SEPARA O CÓDIGO DE BARRAS DO PRIMEIRO PRODUTO ATÉ A ','
taxes = strtok(NULL, ","); //SEPARA O IMPOSTO DO PRIMEIRO PRODUTO ATÉ A ','
//DAQUI EM DIANTE TERMINA DE QUEBRAR OS DADOS
code = strtok(code, ":");
code = strtok(NULL, "\"");
price = strtok(price, ":");
price = strtok(NULL, "\"");
description = strtok(description, ":");
description = strtok(NULL, "\"");
barcode = strtok(barcode, ":");
barcode = strtok(NULL, "\"");
taxes = strtok(taxes, ":");
taxes = strtok(NULL, "\"");
//ARMAZENA CADA DADO NO VETOR DE POSICAO 0
strcpy(vetor[tam - 1].code, code);
strcpy(vetor[tam - 1].price, price);
strcpy(vetor[tam - 1].description, description);
strcpy(vetor[tam - 1].barcode, barcode);
strcpy(vetor[tam - 1].taxes, taxes);
printf("Code:%s Price:%s Description:%s Barcode:%s Taxes: %s\n", vetor[0].code, vetor[0].price, vetor[0].description, vetor[0].barcode, vetor[0].taxes);
} else {
tam++;
vetor = realloc(vetor, tam * sizeof (dados)); //REALOCA O TAMANHO DO VETOR
token = strtok(linha, "[]");
token = strtok(token, "{}");
token = strtok(NULL, "}");
code = strtok(token, ",");
price = strtok(NULL, ",");
description = strtok(NULL, ",");
barcode = strtok(NULL, ",");
taxes = strtok(NULL, ",");
code = strtok(code, ":");
code = strtok(NULL, "\"");
price = strtok(price, ":");
price = strtok(NULL, "\"");
description = strtok(description, ":");
description = strtok(NULL, "\"");
barcode = strtok(barcode, ":");
barcode = strtok(NULL, "\"");
taxes = strtok(taxes, ":");
taxes = strtok(NULL, "\"");
strcpy(vetor[tam - 1].code, code);
strcpy(vetor[tam - 1].price, price);
strcpy(vetor[tam - 1].description, description);
strcpy(vetor[tam - 1].barcode, barcode);
strcpy(vetor[tam - 1].taxes, taxes);
printf("Code:%s Price:%s Description:%s Barcode:%s Taxes: %s\n", vetor[1].code, vetor[1].price, vetor[1].description, vetor[1].barcode, vetor[1].taxes);
}
}
return (EXIT_SUCCESS);
}
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.