Captar substring [RESOLVIDO]

13. Nada?

Júlio Hoffimann Mendes
julio_hoffimann

(usa Ubuntu)

Enviado em 10/02/2012 - 11:04h

Oi Ricardo,

Ainda não conseguiu resolver?


  


14. Re: Captar substring [RESOLVIDO]

euteste da silva
foxbit3r

(usa Solaris)

Enviado em 10/02/2012 - 14:26h

Tá aqui o código que vc precisa.
Porém o site do viva o linux remove o caracter barra null e escreve TEXTO no lugar.
Basta substituir que vai funcionar.
Eu mudei o nome de algumas variaveis e o nome do arquivo que fica os dados.

Codigo abaixo:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* Obs colocar o valor correto aqui, pois o site do viva o linux */
/* substitui o valor por {TEXTO } */
#define BARRA_NULL '{TTEXTO}'


int main(){

char str1[50];
char *str2;
char *pt;
int countPos,pos;

// abrindo arquivo onde estao as strings a serem lidas //
FILE *fp;
fp = fopen ("dados.txt", "r");

while(fgets(str1,50,fp)){

/* ignore linha que nao comecam com o caractere desejado */
if(str1[0] != '>')
continue;
/* localizando a posicao do caractere desejado */

pos = countPos = 0;
pt = strchr(str1,'|');
while((pt != NULL) && (countPos<3)){
pos = pt-str1;
pt = strchr(pt+1,'|');
countPos++;
}

/* pegando o tamanho da string apos ter localizado a ocorrencia desejada */


pt = &str1[pos];
while(str1[pos]!= BARRA_NULL){
pos++;
}
/* copiando dados para um novo string */
str2 = (char *)malloc(pos+1);
if(str2 == NULL){
fprintf(stderr,"Erro na alocao de memoria");
exit(1);
}
strncpy(str2,pt,pos);
str2[pos+1]= BARRA_NULL;
printf("%s",str2);
free(str2);
}

fclose(fp);
}



15. Parabéns!

Júlio Hoffimann Mendes
julio_hoffimann

(usa Ubuntu)

Enviado em 10/02/2012 - 14:39h

Não testei o código, mas parece estar correto. O importante é que você resolveu por conta própria. ;-)

Com o tempo e prática, verá que o algoritmo não requer mais que duas ou três linhas. Segue uma versão em C++:


#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

int main ( int argc, char *argv[] )
{
string str(">gi|290467408|ref|NC_013896.1|");
size_t pos = str.find_last_of( '|', str.length()-2 );
cout << str.substr(pos) << endl;

return EXIT_SUCCESS;
} // ---------- end of function main ----------


Abraço!

P.S.: Não se esqueça de marcar o tópico como resolvido.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts