Ir para conteúdo
Fórum Script Brasil
  • 0

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


samucajeremias

Pergunta

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

 

 

Editado por samucajeremias
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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...