First of all sorry for any english error. So, I have this data in a .txt file
Codigo,Produto,StockMinimo,StockAtual
1,Couro,300,1000
2,Tecido,250,2000
...
I want to skip the first line and read only the integers to a struct
I'm using the bellow function to count the line of the file:
int nrLinhasFicheiro(char *filename){
char ch;
FILE *file;
file = fopen(filename, "r");
int linhas = 0;
if (file != NULL) {
for (ch = getc(file); ch != EOF; ch = getc(file))
if (ch == '\n')
linhas = linhas + 1;
}
fclose(file);
return linhas - 1;
}
and this one to read the file to the struct "Stock" :
void carregarStock(Stock *stock, char *nomeFicheiro){
int i = 0;
int codigo; //stores "codigo" values
char stringFake[40], *storeProduto; //variables to store first line and "Produto" string
int minimo, quantidade;
FILE *fp = fopen(nomeFicheiro, "r");
int numeroLinhas = nrLinhasFicheiro(nomeFicheiro);
if (fp != NULL){
if(numeroLinhas >0){
fscanf(fp, "%s",stringFake);//skip first line
while(i< numeroLinhas){
fscanf(fp, "%d,%s ,%d,%d", &codigo, storeProduto, &minimo, &quantidade);
//fscanf(fp, "%d,%s %d,%d", &codigo, storeProduto, &minimo, &quantidade); also tried this and don't work
if(codigo==1){
stock->minStockCouro = minimo;
stock->couroStock = quantidade;
}else if(codigo==2){
stock->minStockTecido = minimo;
stock->tecidoStock = quantidade;
}else if(codigo==3){
stock->minStockBorracha = minimo;
stock->borrachaStock = quantidade;
}else if(codigo==4){
stock->minStockCordoes = minimo;
stock->cordoesStock = quantidade;
}else if(codigo==5){
stock->minStockPalmilhas = minimo;
stock->palmilhasStock = quantidade;
}
i++;
}
}else{
puts("Error");
}
}else{
puts(MSG_ERRO_LER_FICHEIRO);
}
fclose(fp);
}
Function to print the struct:
void mostrarStock(Stock stock){
puts("============== Stock : =============\n");
puts("Codigo | Produto | Stock Minimo | Stock Atual\n");
printf("1\tCouro\t\t%d\t\t%d\n", stock.minStockCouro, stock.couroStock);
printf("2\tTecido\t\t%d\t\t%d\n", stock.minStockTecido, stock.tecidoStock);
printf("3\tBorracha\t%d\t\t%d\n", stock.minStockBorracha, stock.borrachaStock);
printf("4\tCordões\t\t%d\t\t%d\n", stock.minStockCordoes, stock.cordoesStock);
printf("5\tPalmilhas\t%d\t\t%d\n", stock.minStockPalmilhas, stock.palmilhasStock);
}
This is how i call the function in main:
int main(int argc, char** argv) {
char *nomeFicheiro1 = "tabela_stocks.txt";
Stock stock;
carregarStock(&stock, nomeFicheiro1);
mostrarStock(stock);
return (EXIT_SUCCESS);
}
The function to print the struct doesn't print. I guess the error is in
fscanf(fp, "%d,%s ,%d,%d", &codigo, storeProduto, &minimo, &quantidade);
What am I doing wrong?