Copia uma linha selecionada para um arquivo secundário
Publicado por Perfil removido (última atualização em 06/05/2010)
[ Hits: 6.268 ]
Programa simples que conta as linhas de um arquivo e dá a opção para cópia de uma das linhas para um arquivo secundário.
#include <stdio.h>
#include <string.h>
char LIMPAR[] = "clear";
/*
Função que faz a contagem de linhas de um arquivo.
Recebe como parâmetro(s):
1. Ponteiro para uma estrutura FILE;
Retorna:
Número de linhas contido no arquivo.
*/
int contaLinhas(FILE *arquivo) {
int numLinhas = 0;
char c;
while ((c=fgetc(arquivo)) != EOF) {
if (c=='\n')
numLinhas++;
}
return numLinhas;
}
/*
Rotina que devolve o conteúdo da linha número "numLinha".
Recebe como parâmetros:
1. Arquivo que se deseja obter a linha;
2. Número da linha que se deseja obter;
3. Número de linhas do arquivo;
Retorna:
Ponteiro para a primeira posição da string que armazena
o conteúdo da linha.
*/
char* conteudoLinha(FILE *arquivo, int numLinha, int tamanho) {
if (numLinha>tamanho)
return NULL;
int tamanhoLinha = 0, linhaAtual = 0, achou = 0;
char *linha;
char c;
rewind(arquivo);
numLinha--;
while (c=fgetc(arquivo)) {
if (c=='\n')
linhaAtual++;
if (linhaAtual==numLinha) {
break;
}
}
int i=0;
linha = (char *) malloc(500);
while ((c=fgetc(arquivo))) {
*linha = c;
if (c=='\n') {
*linha = '{FONTE}';
break;
}
linha++;
i++;
}
linha = linha-i;
return linha;
}
/*
A seguinte rotina abre um arquivo escolhido pelo usuário,
efetua a contagem do número de linhas do arquivo e dá opção
para cópia de uma linha "X" para outro arquivo, gerado
em tempo de execução.
*/
void main() {
FILE *file;
char nomeArquivo[255], *linha, escolhaLinha[20];
int i, l;
//Abertura do arquivo e contagem de linhas
do {
system(LIMPAR);
printf("\nDigite o nome do arquivo: ");
gets(nomeArquivo);
file = fopen(nomeArquivo, "r");
if (file)
i = contaLinhas(file);
else
printf("\nNão foi possível abrir o arquivo \"%s\"...", nomeArquivo);
}
while (!file);
fclose(file);
//Escolha da linha a ser salva no outro arquivo
do {
system(LIMPAR);
printf("\nO número de linhas do arquivo \"%s\" é: %d\n", nomeArquivo, i);
printf("\nEscolha uma linha pra gravá-la em outro arquivo: ");
gets(escolhaLinha);
l = atoi(escolhaLinha);
if ((l <= i) && (l >= 1)) {
file = fopen(nomeArquivo, "r");
linha = conteudoLinha(file, l, i);
}
else
printf("\nA linha informada não é válida, informe novamente...");
}
while ((l > i) || (l <= 0));
fclose(file);
//Mostra do conteúdo da linha escolhida e gravação da mesma em arquivo
printf("\nO conteúdo da linha escolhida é o seguinte:\n%s\n", linha);
strcat(nomeArquivo, "-linha.txt");
file = fopen(nomeArquivo, "w");
fprintf(file, "%s", linha);
fclose(file);
printf("\n\nA linha selecionada foi salva no arquivo \"%s\"\n", nomeArquivo);
printf("Pressione qualquer tecla para continuar...\n");
getchar();
}
Codigo para criar arquivo de log
Justificador de texto em 80 colunas
ORDENACAO PELO METODO SHELLSORT
Nenhum comentário foi encontrado.
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Ativando e usando "zoom" no ambiente Cinnamon
Vídeo Nostálgico de Instalação do Conectiva Linux 9
Como realizar um ataque de força bruta para desobrir senhas?
Queda no serviços da Cloudflare, alguns sites estão fora do ar. (1)
Perfil criado no samba ad dc não loga no Windows 10 e 11 (11)









