Copia uma linha selecionada para um arquivo secundário

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

[ Hits: 5.713 ]

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

Pilhas C/C++ - Pares e ímpares

Exemplo de manipulação de arquivos

read_pg_conf

Arquivo com números aleatórios.

Alfabeto escrito 30 vezes e operação XOR


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts