Ajuda com manipulação de arquivos(Iniciante)

18 views
Skip to first unread message

ajob

unread,
Feb 13, 2012, 12:22:22 PM2/13/12
to ccppb...@googlegroups.com
Meu problema é simples... Eu tenho um arquivo txt no qual cada linha é uma permutação de uma quantidade fixa de números. Gostaria de criar um programa, de preferencia em C, mas pode ser em C++, que remova todas as permutações repetidas do arquivo.... Queria ajuda... Alguém poderia me dizer se já existe algo implementado que faz isso, ou como eu posso fazer isso... 

Obrigado,
Josefran

Fernando Mercês

unread,
Feb 13, 2012, 8:39:14 PM2/13/12
to ccppb...@googlegroups.com
Boa noite.

Se cada linha é uma permutação e você quer remover as permutações
repetidas, isso significa que você quer remover as linhas repetidas?
Se não for isso, por favor, poste uma entrada de exemplo e a saída
desejada para facilitar as coisas. ;-)

O programa em C é necessário? Porque certamente terá algo no terminal
do Linux que vai te ajudar, mas aí te indicaria uma boa lista de shell
script [1].

Um abraço.

[1] http://br.groups.yahoo.com/group/shell-script/

Att,

Fernando Mercês
Linux Registered User #432779
www.mentebinaria.com.br
softwarelivre-rj.org
@MenteBinaria
------------------------------------
II Hack'n Rio - 23 e 24/11
                 hacknrio.org
------------------------------------

2012/2/13 ajob <antonio...@gmail.com>:

> --
> Antes de enviar um e-mail para o grupo leia:
> http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
> --~--~---------~--~----~---------------------------------~----------~--~----~
> [&] Colabore com a Pesquisa de Preferência de Conteúdo
> para Eventos do Grupo C & C++ Brasil:
> http://www.surveymonkey.com/s/GBBGTXN
> ------~----~-------~---~---~---~---~----------------~------------~---------~
> [&] C & C++ Brasil - http://www.ccppbrasil.org/
> Para sair dessa lista, envie um e-mail para
> ccppbrasil-...@googlegroups.com
> Para mais opções, visite http://groups.google.com/group/ccppbrasil
> --~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
> Emprego & carreira: vag...@ccppbrasil.org
> http://groups.google.com/group/dev-guys?hl=en

Jarlisson Moreira

unread,
Feb 13, 2012, 8:44:42 PM2/13/12
to ccppb...@googlegroups.com
Bom...pega a primeira linha e comparar com as outras, usa a função de comparar string, se der repetida apaga (substitui por nada, usando outra funçao de string)..depois a segunda linha, terceira...Usa a função getline pra pegar as linhas...

Uma coisa...voce criou uma função que gera permutação e ta saindo permutações repetidas? Ou ta só tentando consertar um arquivo de texto com varias linhas repetidas?
Se estiver criando, dá pra gerar sem sair linhas repetidas facilmente, so com um pouco de conhecimento em Analise Combinatoria

Marcio Gil

unread,
Feb 15, 2012, 7:30:45 AM2/15/12
to ccppb...@googlegroups.com
Em 13/2/2012 15:22, ajob escreveu:
> Meu problema � simples... Eu tenho um arquivo txt no qual cada linha �
> uma permuta��o de uma quantidade fixa de n�meros. Gostaria de criar um

> programa, de preferencia em C, mas pode ser em C++, que remova todas as
> permuta��es repetidas do arquivo.... Queria ajuda... Algu�m poderia me
> dizer se j� existe algo implementado que faz isso, ou como eu posso
> fazer isso...
>
> Obrigado,
> Josefran
>

No prompt do Linux voc� tem algumas alternativas:

$ uniq arquivo.txt

Exibe o arquivo eliminando duplicidades em linhas seguidas

$ sort -u arquivo.txt

Exibe o arquivo ordenando e eliminando todas as duplicidades

$ awk '!a[$0]++' arquivo.txt

Exibe o arquivo eliminando todas as duplicidade e sem ordenar

Para replicar a primeira alternativa � muito f�cil, basta guardar a
linha anterior em um buffer separado e comparar a linha atual com a
anterior por meio da fun��o strcmp.

Quanto a segunda e terceira alternativas, eu j� fiz isso com C
utilizando �rvore, voc� l� as linhas do arquivo e vai adicionando na
�rvore e quando ainda n�o o foi voc� grava no arquivo de destino (que
pode ser a sa�da padr�o), ou ent�o percorre a �rvore no final se a
inten��o for ordenar o arquivo. Utilizando uma tabela de hash � mais
eficiente mas s� serve para a terceira alternativa (que � como o awk
faz), pesquise sobre estas estruturas de dados.

Em C++ � mais f�cil pois n�o � necess�rio escrever o algoritmo de
�rvore, basta utilizar o std::set para armazenar as linhas.

Marcio.

Rodrigo Madera

unread,
Feb 15, 2012, 7:31:57 AM2/15/12
to ccppb...@googlegroups.com
Tem que ver se o professor vai aceitar usar comandos do shell.

Mx

2012/2/15 Marcio Gil <marci...@bol.com.br>
Em 13/2/2012 15:22, ajob escreveu:

Meu problema é simples... Eu tenho um arquivo txt no qual cada linha é
uma permutação de uma quantidade fixa de números. Gostaria de criar um

programa, de preferencia em C, mas pode ser em C++, que remova todas as
permutações repetidas do arquivo.... Queria ajuda... Alguém poderia me
dizer se já existe algo implementado que faz isso, ou como eu posso
fazer isso...

Obrigado,
Josefran


No prompt do Linux você tem algumas alternativas:


$ uniq arquivo.txt

Exibe o arquivo eliminando duplicidades em linhas seguidas

$ sort -u arquivo.txt

Exibe o arquivo ordenando e eliminando todas as duplicidades

$ awk '!a[$0]++' arquivo.txt

Exibe o arquivo eliminando todas as duplicidade e sem ordenar

Para replicar a primeira alternativa é muito fácil, basta guardar a

linha anterior em um buffer separado e comparar a linha atual com a
anterior por meio da função strcmp.

Quanto a segunda e terceira alternativas, eu já fiz isso com C
utilizando árvore, você lê as linhas do arquivo e vai adicionando na
árvore e quando ainda não o foi você grava no arquivo de destino (que
pode ser a saída padrão), ou então percorre a árvore no final se a
intenção for ordenar o arquivo. Utilizando uma tabela de hash é mais
eficiente mas só serve para a terceira alternativa (que é como o awk

faz), pesquise sobre estas estruturas de dados.

Em C++ é mais fácil pois não é necessário escrever o algoritmo de
árvore, basta utilizar o std::set para armazenar as linhas.

Marcio.


--
Antes de enviar um e-mail para o grupo leia:                     http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] Colabore com a Pesquisa de Preferência de Conteúdo              para Eventos do Grupo C & C++ Brasil:
                      http://www.surveymonkey.com/s/GBBGTXN
------~----~-------~---~---~---~---~----------------~------------~---------~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-unsubscribe@googlegroups.com

Marcio Gil

unread,
Feb 15, 2012, 7:35:44 AM2/15/12
to ccppb...@googlegroups.com
Em 15/2/2012 10:31, Rodrigo Madera escreveu:
> Tem que ver se o professor vai aceitar usar comandos do shell.
>
Os comandos do shell foram para exemplificar os diversos resultados que
se pode entender por "remova todas as permuta��es repetidas do arquivo"

Rodrigo Madera

unread,
Feb 15, 2012, 7:43:52 AM2/15/12
to ccppb...@googlegroups.com
Prometo usar tags <sarcasm> na próxima.

Mx

2012/2/15 Marcio Gil <marci...@bol.com.br>
Em 15/2/2012 10:31, Rodrigo Madera escreveu:

Tem que ver se o professor vai aceitar usar comandos do shell.

Os comandos do shell foram para exemplificar os diversos resultados que
se pode entender por "remova todas as permutações repetidas do arquivo"
Reply all
Reply to author
Forward
0 new messages