Copia uma linha selecionada para um arquivo secundário
Publicado por Perfil removido (última atualização em 06/05/2010)
[ Hits: 6.269 ]
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();
}
ListDir - Um listador de diretórios
MakeInt - gerador de wordlist numérica
Exemplo de manipulação de arquivos
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?
Thinkpads são bons mesmo ?! (3)
Eu queria adicionar a incon do wifi e deixa transparente no fluxbox no... (2)
Scripts ou binários [RESOLVIDO] (5)
Perfil criado no samba ad dc não loga no Windows 10 e 11 (12)









