Copia uma linha selecionada para um arquivo secundário

Publicado por Ewerton Daniel de Lima (última atualização em 06/05/2010)

[ Hits: 5.757 ]

Download copialinha.c




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.

  



Esconder código-fonte

#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();
    }

Scripts recomendados

Justificador de texto em 80 colunas

Fwn - Formatador de arquivos .txt

[C] Apaga linha em um Arquivo

Função readConf. Ler arquivos de configuração.

FileCopy - Copiador de Arquivo de Texto


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário