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