Marcelo Luiz de Laia escreveu:
Olá,
Como a mensagem chegou a lista desformatada, eu coloquei um exemplo em pdf
neste endereco:
http://200.145.102.65:9102/exemplo.pdf
Colocar todos os "iguais" um abaixo do outro eu ate ja tinha obtido. O passo
seguinte que é o mais trabalhoso, uma vez que eu estou fazendo manualmente desde ontem e
nao fiz nem um terco.
Agora que estao todos agrupados, eu preciso deixar uma unica linha por ID e
indicar em qual das cinco ultimas colunas ele esta presente. Note que um dado
ID pode estar presente somente em X12 (caso do aaaa), ou em X24 e P5 (caso do
tttt), ou em X24, P24, P3 e P5 (caso do bbbb), ou ainda, nao exemplificado, em
todas as cinco.
Entao, eu preciso que a esses IDs estejam em uma unica linha e com os
respectivos X na coluna onde eles aparecem. As colunas do meio (estao vazias no
exemplo) nao sao necessarias e nao precisam ser levadas em consideracao. Podem
ate serem descartadas.
Sei que a lista é uma colaboracao voluntaria e sem fins lucrativos, mas, para
quem me ajudar eu mandarei umas cervejas como demosntracao de agradecimento,
pois sei que estou fora do topico da lista. Tambem peco a compreensao dos
demais membros.
Muito obrigado
Marcelo
Olá colega Marcelo,
Não gosto de ver pessoas necessitadas, então resolvi usar alguns
intervalos e ajudar:
- Para um arquivo onde os IDs iguais são adjacentes, desconsiderando
cabeçalho e terminado com um '\n' em todas as linhas:
-------------------------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[]){
FILE *arquivo;
char *conteudo, *inicio/*linha*/, *fim/*linha*/;
char *id, *id_antigo, *colunas, x12, x24, p24, p3, p5;
int i;
arquivo = fopen(argv[1], "r");
fseek(arquivo, 0, SEEK_END);
i = ftell(arquivo);
fseek(arquivo, 0, SEEK_SET);
conteudo = (char*)malloc(i+1);
fread(conteudo, i, 1, arquivo);
conteudo[i] = '\0';
fclose(arquivo);
// printf("Arquivo:\n\n\n%s\n\n", conteudo);
inicio = conteudo;
fim = strchr(inicio, '\n');
inicio = fim+1; // Pular o cabeçalho
fim = strchr(inicio, '\n'); // Pular o cabeçalho
id_antigo = inicio;
x12 = x24 = p24 = p3 = p5 = ' ';
while (fim){
*fim = '\0';
id = inicio;
inicio = strchr(id, '\t'); // fim do id
*(inicio++) = '\0';
if (strcmp(id, id_antigo)){ // se mudou o ID
printf("%s\t%s\t%c\t%c\t%c\t%c\t%c\n", id_antigo, colunas, x12,
x24, p24, p3, p5);
x12 = x24 = p24 = p3 = p5 = ' ';
}
colunas = inicio;
inicio = strchr(inicio, '\t')+1; // fim do nome
inicio = strchr(inicio, '\t')+1; // fim do logFC
inicio = strchr(inicio, '\t')+1; // " " A
inicio = strchr(inicio, '\t')+1; // " " t
inicio = strchr(inicio, '\t')+1; // " " P
inicio = strchr(inicio, '\t')+1; // " " PV
inicio = strchr(inicio, '\t'); // " " B
*inicio = '\0';
x12 = (*(++inicio) != 'x' && x12 != 'x' ? ' ' : 'x');
inicio = strchr(inicio, '\t'); // " " X12
x24 = (*(++inicio) != 'x' && x24 != 'x' ? ' ' : 'x');
inicio = strchr(inicio, '\t'); // " " X24
p24 = (*(++inicio) != 'x' && p24 != 'x' ? ' ' : 'x');
inicio = strchr(inicio, '\t'); // " " P24
p3 = (*(++inicio) != 'x' && p3 != 'x' ? ' ' : 'x');
inicio = strchr(inicio, '\t'); // " " P3
p5 = (*(++inicio) != 'x' && p5 != 'x' ? ' ' : 'x');
inicio = fim + 1;
id_antigo = id;
fim = strchr(inicio, '\n');
}
printf("%s\t%s\t%c\t%c\t%c\t%c\t%c\n", id_antigo, colunas, x12, x24,
p24, p3, p5);
return 0;
}
-------------------------------------------------------------------------
$ gcc -Wall cevas.c -o cervejas && ./cevas arquivo.txt
Arquivo testado:
______________________________________________
ID Nome logFC A t P PV B X12
X24 P24 P3 P5
12 aaaa -1 3 -1 0 0 1 x
_ _ _ _
45 bbbb 2 4 -2 0 0 1 _
_ _ x _
45 bbbb 2 4 -2 0 0 1 _
x _ _ _
45 bbbb 2 4 -2 0 0 1 _
_ x _ _
45 bbbb 2 4 -2 0 0 1 _
_ _ _ x
56 tttt 0.5 2 -3 0 0 1 _
x _ _ _
56 tttt 0.5 2 -3 0 0 1 _
_ _ _ x
67 hhhh 0.6 1 0 0 0 1 x
_ _ _ _
67 hhhh 0.6 1 0 0 0 1 _
x _ _ _
01 eeee 3 5 -3 0 0 1 _
_ x _ _
03 uuuu 4 6 -4 0 0 1 _
_ _ _ x
98 zzzz 5 7 -5 0 0 1 x
_ _ _ _
98 zzzz 5 7 -5 0 0 1 _
_ x _ _
98 zzzz 5 7 -5 0 0 1 _
_ _ x _
98 zzzz 5 7 -5 0 0 1 _
_ _ _ x
______________________________________________
Resultado:
______________________________________________
12 aaaa -1 3 -1 0 0 1 x
_ _ _ _
45 bbbb 2 4 -2 0 0 1 _
x x x x
56 tttt 0.5 2 -3 0 0 1 _
x _ _ x
67 hhhh 0.6 1 0 0 0 1 x
x _ _ _
01 eeee 3 5 -3 0 0 1 _
_ x _ _
03 uuuu 4 6 -4 0 0 1 _
_ _ _ x
98 zzzz 5 7 -5 0 0 1 x
_ x x x
______________________________________________
Observe que o '_' no lugar do vazio é apenas para visualizar melhor, mas
funciona legal com eles também. Repare que existe diferença entre 'X'
(maiúsculo) e 'x' (minúsculo).
Aguardo minhas cevas! ;)
--
Atenciosamente,
Junior Polegato
Um peregrino de problemas; Um pergaminho de soluções!
Página Profissional: http://www.juniorpolegato.com.br
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]