Jump to content
Fórum Script Brasil
  • 0

Não consigo armazenar as substrings do arquivo em um vetor


Question

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);
}
 

 

 

Edited by samucajeremias
Link to post
Share on other sites

2 answers to this question

Recommended Posts

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148722
    • Total Posts
      644517
×
×
  • Create New...