Introdução
Ainda muitos processos, principalmente de troca de arquivos em sistemas é feito por arquivos textos (txt), por isso a importância do tema Arquivo txt linguagem C | Manutenção: Ler e Gravar texto.
Entretanto essas trocas destaca-se Electronic Data Interchange (EDI), que nada mais é do que uma forma mais tradicional de intercâmbio (troca) de dados entre empresas.
Por isso, tratar o assunto relacionado a Manutenção: Ler e Gravar em arquivo texto é importante.
Portanto, a linguagem de programação C é a base para as primeiras inserções destes conceitos: EDI e arquivos textos.
Objetivo: Arquivo txt linguagem C
Visto que, o objetivo é demonstrar como fazer a criação, a escrita e a leitura de arquivos, sem se preocupar com formatações ou padronizações, neste momento.
Por consequência, aprender na linguagem de programação C pura realizar os procedimentos de manutenção em um arquivo texto por linha.
Primeiro Passo
Ou seja, primeiramente para realizar o hands-on (mão na massa) é necessário ter um computador ou notebook que tenha o compilador da linguagem e programação C e um editor de texto para digitação do código.
Portanto, como sugestão, a ferramenta para o hands-on será:
- Code::Blocks (IDE de desenvolvimento voltado a Linguagem C), distribuído na forma de licenciamento GPL (General Public Licence).
Segundo Passo
Primeiro deve-se abrir a ferramenta IDE Code::Blocks.
Agora, clicar no menu FILE, depois NEW e por fim em EMPTY FILE.
Pronto, agora é só iniciar a digitação do código fonte.
Importante: Salvar o arquivo com a extensão .c que se refere a linguagem de programação C pura.
Contudo, quando terminar o código aperte o botão da engrenagem para compilar e tirar possíveis erros de escrita do código.
Por fim, estando a compilação ok, clique no botão com o símbolo do play para executar e testar o código.
Escrita de Arquivo: Arquivo txt linguagem C
Terceiro Passo
Iniciar a digitação do código para criar o arquivo, caso ele não exista.
Após ser criado, receber via teclado a frase (linha de texto) que será gravada no arquivo.
Se for digitada, três frases, três linhas devem ser gravadas no arquivo texto.
Primeira Parte: Digitar o código
#include "stdio.h" int main(){ FILE *arq; int op = 1; char texto_linha[30]; arq = fopen("arquivo.txt", "w"); while (op == 1){ printf("\nDigite o texto da linha: "); fflush(stdin); scanf("%[^\n]s", &texto_linha); fputs(texto_linha, arq); printf("\nContinuar? (0-nao / 1-sim): "); scanf("%d", &op); if(op == 1){ fputs("\n", arq); } } fclose(arq); return 0; }
Explicação de cada linha:
Biblioteca e definição das variáveis
- #include “stdio.h”
- Está linha é responsável em incorporar a biblioteca que implementa os comandos para trabalhar com arquivos texto.
- FILE *arq;
- definindo uma variável compatível para manipular arquivos.
- int op = 1;
- Declaração de uma variável inteira que controlará o fluxo do while (laço) para continuar a digitar novas linhas ou terminar a digitação de linhas (0 – termina / 1 – continua).
- char texto_linha[30];
- Declaração de uma variável char com a capacidade de 30 caracteres que será utilizada para receber os valores que serão inseridos nos arquivos.
Abertura do arquivo e Digitação do texto
- arq = fopen(“arquivo.txt”, “w”);
fopen
é o comando que tentará abrir o arquivo.w
(write) é o modo de abertura do arquivo para escrita, que indica:- Se o arquivo não existir criará, já caso exista, destruirá e criará novamente o arquivo.
- A partir do momento da abertura do arquivo, a variável
arq
será o apontador sempre que se quiser referir ao arquivo em questão.
- while (op == 1){
- Laço de controle se o usuário optará por digitar mais linhas ou não, seguindo como explicado na linha que declara a variável op.
- printf(“\nDigite o texto da linha: “);
- Exibe na tela a mensagem entre aspas, onde o operador
\n
pula uma linha antes da escrita do texto.
- Exibe na tela a mensagem entre aspas, onde o operador
- fflush(stdin);
- Usado para limpa o Buffer do teclado.
- Tudo que é digitado fica nesta memória temporária do teclado (buffer do teclado).
- Em alguns momentos a linguagem C não consegue limpar essa área automaticamente.
- Dessa forma, quando encontra um novo scanf ao invés de esperar a nova digitação pega a sujeira existente no teclado, por isso o uso do
fflush
.
- scanf(“%[^\n]s”, &texto_linha);
- Comando para fazer a digitação da variável
texto_linha
. - Este comando necessita o uso do
&
antes da variável para ter o apontamento da mesma na memória. - E utiliza o escopo de acordo com a variável, como está é um char de 30 posições, o correto é usar
%s
. - A adição
[^\n]
serve para negar o espaço entre palavras sendo o fim da cadeia de caracteres. - ou seja, sem este ao dar espaço, mesmo digitando mais de uma palavra será armazenada na variável apenas uma palavra.
- Comando para fazer a digitação da variável
- fputs(texto_linha, arq);
- Comando que faz a escrita do texto na variável
texto_linha
dentro do arquivo que foi aberto no apontadorarq
.
- Comando que faz a escrita do texto na variável
Pergunta se quer adicionar mais linhas
- printf(“\nContinuar? (0-nao / 1-sim): “);
- Exibe na tela a mensagem entre aspas, onde o operador
\n
pula uma linha antes da escrita do texto. - Neste caso a mensagem indicando como fazer para continuar digitando textos, ou como parar o programa.
- Exibe na tela a mensagem entre aspas, onde o operador
- scanf(“%d”, &op);
- if(op == 1){
- Condicional que permitirá adicionar a quebra de linha no arquivo se a opção seja adicionar outra linha, no caso
op == 1
.
- Condicional que permitirá adicionar a quebra de linha no arquivo se a opção seja adicionar outra linha, no caso
- fputs(“\n”, arq);
- Comando que faz a escrita, neste caso uma quebra de linha
\n
. - Adiciona uma quebra de linha caso o usuário opte por adicionar um novo texto.
- Isso é importante porque senão as linhas se juntariam em uma única linha.
- Este if impossibilita de haver uma linha em branco (vazia) no final do arquivo.
- Uma linha em branco (vazia) no final do arquivo pode prejudicar a leitura com a repetição da última linha.
- Comando que faz a escrita, neste caso uma quebra de linha
- }
- Chave fecha o
if
que verifica se for haver a digitação de uma nova linha é adicionada uma quebra de linha no arquivo.
- Chave fecha o
- }
- Chave que fecha o laço relacionado a digitação de mais linhas, este laço depende da pergunta continua e do valor digitado como resposta no
scanf
da variávelop
.
- Chave que fecha o laço relacionado a digitação de mais linhas, este laço depende da pergunta continua e do valor digitado como resposta no
Fechamento do arquivo e Encerramento do programa
- fclose(arq);
- Fecha o arquivo relacionado ao apontador
arq
. - Importante fechar o arquivo para que o mesmo não tenha risco de ser corrompido.
- Fecha o arquivo relacionado ao apontador
- return 0;
- Pelo fato do
main
ter como definição de retorno umint
, é obrigatório o uso doreturn
, no caso como não é utilizado o valor retorna zero.
- Pelo fato do
- }
- Chave que fecha o
main
.
- Chave que fecha o
Segunda Parte: Executar o Código
A princípio, após a compilação do código, chega o momento de realizar a execução, abaixo foram inseridas quatro linhas, sendo: linha 1; linha 2; linha 3 e linha 4.
Digite o texto da linha: linha 1 >Continuar? (0-nao / 1-sim): 1 Digite o texto da linha: linha 2 Continuar? (0-nao / 1-sim): 1 Digite o texto da linha: linha 3 Continuar? (0-nao / 1-sim): 1 Digite o texto da linha: linha 4 Continuar? (0-nao / 1-sim): 0 Process returned 0 (0x0) execution time : 21.487 s Press any key to continue.
Terceira Parte: Verificar o Arquivo
Logo após a execução é importante verificar se o arquivo, arquivo.txt
, foi ciado e se o mesmo tem o conteúdo das quatro linhas.
Dessa maneira, é importante destacar que o arquivo.txt
será criado no diretório onde se encontra o código fonte, caso precise gravar em um local diferente é possível defini-lo junto com o nome do arquivo, colocando o caminho de forma completa.
Entretanto, abrindo o arquivo.txt
o mesmo deverá ter a seguinte visualização:
linha 1
linha 2
linha 3
linha 4
Por enquanto, está finalizada a parte de criação e gravação no arquivo texto, agora que existe o arquivo.txt
com o conteúdo gerado pelo primeiro código, chega o momento de criar o código para fazer a leitura linha a linha.
Leitura de Arquivo: Arquivo txt linguagem C
Quarta Parte: Leitura do arquivo
Com o arquivo criado e gravado o conteúdo, chega o momento do código que fará a leitura:
#include "stdio.h" int main(){ FILE *arq; char texto_linha[30]; arq = fopen("arquivo.txt", "r"); if (arq == NULL){ printf("Impossivel abrir arquivo!"); }else{ while (!feof(arq)){ fgets(texto_linha, 30, arq); printf("%s", texto_linha); } } fclose(arq); return 0; }
Então segue explicação de cada linha (nesta descrição serão omitidas as linhas iguais ao programa de escrita):
Abertura e Verificação do arquivo
- arq = fopen(“arquivo.txt”, “r”);
- Faz a abertura do arquivo
arquivo.txt
, em modor
, no caso leitura. - Para que consiga fazer a abertura o mesmo deve existir.
- Tentará abrir o arquivo no mesmo diretório do arquivo fonte.
- Faz a abertura do arquivo
- if (arq == NULL){
- Como há a possibilidade de não conseguir abrir o arquivo é importante testar se a abertura foi realizada.
- Para isso, testa-se a variável
arq
com o valorNULL
(que indica que a a variável está vazia, ou seja, não abriu o arquivo.
- printf(“Impossivel abrir arquivo!”);
- Caso não tenha aberto o arquivo apresentará a mensagem entre aspas.
- Como o final do
if
cai nofclose(arq)
, fechará o arquivo e terminará o programa.
- }else{
- Caso tenha aberto o arquivo.
Laço de leitura do arquivo
- while (!feof(arq)){
- Este laço será executado de acordo com o critério entre parênteses.
- Neste caso, enquanto não (representado pelo !) for final de arquivo (representado pelo feof) do arquivo (representado por arq), continuará no laço.
- Ou seja, se tiver quatro linhas executará o laço 4 vezes, se tiver 5 linhas executará 5 vezes e assim por diante.
- !feof(arq) representa diferente de final de arquivo.
- feof(arq) representa final de arquivo.
- fgets(texto_linha, 30, arq);
- Este comando faz a leitura da linha do arquivo
arq
, pegando30
caracteres e jogando esse conteúdo na variáveltexto_linha
.
- Este comando faz a leitura da linha do arquivo
- printf(“%s”, texto_linha);
- }
- Fecha o laço do while (!feof(arq)){.
- }
- Fecha o else do condicional if (arq == NULL){ , que no caso, este senão representa que consegui abrir o arquivo.
Logo depois de aplicada a execução do código de leitura do arquivo.txt
o mesmo dará a seguinte visualização:
linha 1 linha 2 linha 3 linha 4
Primordialmente, os códigos apresentados consideram uma situação perfeita, tanto na criação do arquivo, em sua escrita e na sua leitura.
Mas, é importante tratar e verificar se o arquivo foi criado ou aberto, pois pode haver erros nestes processos, exemplo: não ter permissão no diretório onde se encontra o arquivo.
Conclusão: Arquivo txt linguagem C
Por fim, os códigos apresentados demonstram como realizar a criação, escrita e leitura de arquivos textos usando a linguagem de programação C pura linha a linha de texto.
Contudo, se pensarmos em um processo de EDI, seria necessário padronizar esse texto e definir um separador, pois em uma linha podemos ter mais de uma informação sobre determinado registro.
Todavia, esse tipo de processo será apresentado em artigos futuros.
Com o propósito de ver outras postagens sobre linguagens de programação, Clique aqui para acompanhar.