Manipulação de arquivos CSV - Estruturado
Publicado por Fagner Amaral de Souza Candido (última atualização em 12/12/2010)
[ Hits: 25.586 ]
Homepage: https://github.com/fagnercandido
Olá PessoALL,
O aplicativo a seguir tem por finalidade manipular arquivos CSV com a linguagem C. São funções básicas que, com toda certeza, podem e muito ser melhoradas. Mas de qualquer forma, demonstram uma possível forma de manipulação de arquivos CSV com a linguagem C.
Qualquer dúvida, crítica ou sugestão é só mandar.
f_Candido
/*
 * Sintese
 *    Objetivo : Manipular arquivos CSV em C
 *    Entrada : Um arquivo CSV
 *    Saida : Um arquivo CSV
 *    Autor : Fagner Candido - f_Candido - fagner7777777@gmail.com
 * */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LENGHT 100
#define MAX_STRING 3*MAX_LENGHT
#define MAX_LINE 100
// Tipo correspondente ao CSV
typedef struct fileCSV{
      char fNome[MAX_LENGHT];
      char mNome[MAX_LENGHT];
      char lNome[MAX_LENGHT];
}fileCSV;
// Open no Arquivo - Leitura
void fileOpenRead(FILE **pArquivo){
   if (!(*pArquivo=fopen("teste","r"))){
      printf("Erro ao Abrir Arquivo!!\n");
   }
}
// Open no Arquivo - Escrita
void fileOpenWrite(FILE **pArquivo){
   if (!(*pArquivo=fopen("teste","a+"))){
      printf("Erro ao Abrir Arquivo!!\n");
   }
}
// Write no Arquivo
void writeFile(FILE **pArquivo, char *dados){
       fprintf(*pArquivo, "%s" ,  dados);
}
// Read no Arquivo
int readFile(FILE **pArquivo, char stringOutput[MAX_LINE][MAX_STRING]){
   int contador = 0;
   while (!feof(*pArquivo))
    {
      fscanf(*pArquivo,"%s", stringOutput[contador]);
      contador++;
    } 
    return contador;
}
// Close no Arquivo
void closeFile(FILE **pArquivo){
   fclose(*pArquivo);
}
// Read Entradas
void readInputs(fileCSV *registro){
   printf("Informe o primeiro Nome\n");
   fgets(registro->fNome, MAX_LENGHT, stdin);
   printf("Informe o segundo Nome\n");
   fgets(registro->mNome, MAX_LENGHT, stdin);
   printf("Informe o ultimo Nome\n");
   fgets(registro->lNome, MAX_LENGHT, stdin);
}
//Mount arquivo CSV
void mountInput(char *stringInput, fileCSV registro){
   int len;
   strcat(stringInput, registro.fNome);
   len = strlen(stringInput);
   stringInput[len-1] = ',';
   stringInput[len] = '{FONTE}';
   strcat(stringInput, registro.mNome);
   len = strlen(stringInput);
   stringInput[len-1] = ',';
   stringInput[len] = '{FONTE}';
   strcat(stringInput, registro.lNome);
}
int main(int argc, char **argv){
      fileCSV registro;
      int contador = 0, auxiliar;
      char stringInput[MAX_STRING];
      char stringOutput[MAX_LINE][MAX_STRING];
      FILE *pArquivo;
      
      readInputs(®istro);
      mountInput(stringInput, registro);
      fileOpenWrite(&pArquivo);
      writeFile(&pArquivo, stringInput);
      closeFile(&pArquivo);
      fileOpenRead(&pArquivo);
      auxiliar = readFile(&pArquivo, stringOutput);
      for(;contador <= auxiliar;contador++){
         printf("Registros : %s\n", stringOutput[contador]);
      }
      closeFile(&pArquivo);
      return 0;
}
Barra de progresso em forma de “roda”
Números de caracteres em arquivo
Conversão de arquivos texto entre Windows e Linux
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Problemas com Driver NVIDIA (5)
Warcraft II Remastered no Linux? (8)
Instalação dualboot Windows 11 e Debian 13 (7)









