Página 1 de 2

Procurando string dentro de um arquivo de texto.

MensagemEnviado: 11 Jan 2011 08:03
por proex
Existe alguma função ja pronta no keil, para procurar uma string dentro de um arquivo de texto carregado na ram do arm?

Se precisar fazer na unha eu até faço mas é que acordei hoje com uma preguiça !!!!!!!! :roll:

MensagemEnviado: 11 Jan 2011 09:10
por RobL
Enquanto não aparecer algo melhor tente strpbrk().

MensagemEnviado: 11 Jan 2011 09:30
por barboza

MensagemEnviado: 11 Jan 2011 13:56
por proex
O problema dessa função strpbrk é que somente procura strings em buffer de até 255 bytes.

Meu buffer tem 25Kbytes

MensagemEnviado: 11 Jan 2011 16:43
por andre_luis
tenta esse conceito :

Código: Selecionar todos
#include <stdio.h>
#include <string.h>

char *a = "Hello World!";
char *b = strstr(a, "World");

int position = b - a;
printf("the offset is %i\n", position);


+++

MensagemEnviado: 11 Jan 2011 19:39
por RobL
Esta trabalha com buffer memchr()

MensagemEnviado: 11 Jan 2011 20:50
por andre_luis
RobL escreveu:Esta trabalha com buffer memchr()


O fato de se colocar o array de caracteres delimitados por apóstrofe (") não subentende que o último caractere seja null ? E por consequencia, esse array não pode ser considerado uma string ?

Independente do conceito, se compilar o trecho acima, vai dar um resultado que seria esperado na busca da ocorrencia de uma string dentro de outra.

+++

MensagemEnviado: 12 Jan 2011 08:24
por proex
André, nessa sua linha: char *b = strstr(a, "World"); a função strstr retornará um ponteiro de oito bits, indicando o endereço do buffer onde esta a string.

Acontece que meu buffer possui 25kbytes.

Entendeu o problema?

MensagemEnviado: 12 Jan 2011 08:28
por barboza
proex escreveu:André, nessa sua linha: char *b = strstr(a, "World"); a função strstr retornará um ponteiro de oito bits, indicando o endereço do buffer onde esta a string.

Acontece que meu buffer possui 25kbytes.

Entendeu o problema?


Se o seu buffer tem 25k o endereçamento não deveria ser só com 8 bits.
Mto estranho.
É Keil 8051 ou ARM?

MensagemEnviado: 12 Jan 2011 10:19
por Red Neck Guy
Se não for uma busca que é executada com frequência, faz na força bruta então. Quando as coisas estão atrasadas geralmente eu apelo pra isso...

Código: Selecionar todos

char *findStr(char *myBuffer,char *str){
  int tamanhoBuffer=len(myBuffer),
       tamanho = len(str),
       i=0;
 char *ptr =myBuffer ;
unsigned char res;

  if(tamanho>tamanhoBuffer)
    return null;

  while(i<(tamanhoBuffer-tamanho-1)){
      res=0;
     for(int j=0;j<tamanho;i++){
       if(ptr[i] != str[i]){
         res=1;
         break;
       }
     }
    if(res==0)
       return ptr;
     ptr++;
     i++;
  }
}


MensagemEnviado: 12 Jan 2011 10:21
por Red Neck Guy
Se não for uma busca que é executada com frequência, faz na força bruta então. Quando as coisas estão atrasadas geralmente eu apelo pra isso...

Código: Selecionar todos

char *findStr(char *myBuffer,char *str){
  int tamanhoBuffer=len(myBuffer),
       tamanho = len(str),
       i=0;
 char *ptr =myBuffer ;
unsigned char res;

  if(tamanho>tamanhoBuffer)
    return null;

  while(i<(tamanhoBuffer-tamanho-1)){
      res=0;
     for(int j=0;j<tamanho;i++){
       if(ptr[i] != str[i]){
         res=1;
         break;
       }
     }
    if(res==0)
       return ptr;
     ptr++;
     i++;
  }
}


MensagemEnviado: 12 Jan 2011 10:21
por Red Neck Guy
Se não for uma busca que é executada com frequência, faz na força bruta então. Quando as coisas estão atrasadas geralmente eu apelo pra isso...

Código: Selecionar todos

char *findStr(char *myBuffer,char *str){
  int tamanhoBuffer=len(myBuffer),
       tamanho = len(str),
       i=0;
 char *ptr =myBuffer ;
unsigned char res;

  if(tamanho>tamanhoBuffer)
    return null;

  while(i<(tamanhoBuffer-tamanho-1)){
      res=0;
     for(int j=0;j<tamanho;i++){
       if(ptr[i] != str[i]){
         res=1;
         break;
       }
     }
    if(res==0)
       return ptr;
     ptr++;
     i++;
  }
}


MensagemEnviado: 12 Jan 2011 10:23
por Red Neck Guy
Se não for uma busca que é executada com frequência, faz na força bruta então. Quando as coisas estão atrasadas geralmente eu apelo pra isso...

Código: Selecionar todos

char *findStr(char *myBuffer,char *str){
  int tamanhoBuffer=len(myBuffer),
       tamanho = len(str),
       i=0;
 char *ptr =myBuffer ;
unsigned char res;

  if(tamanho>tamanhoBuffer)
    return null;

  while(i<(tamanhoBuffer-tamanho-1)){
      res=0;
     for(int j=0;j<tamanho;i++){
       if(ptr[i] != str[i]){
         res=1;
         break;
       }
     }
    if(res==0)
       return ptr;
     ptr++;
     i++;
  }
}


MensagemEnviado: 13 Jan 2011 07:40
por proex
barboza escreveu:
proex escreveu:André, nessa sua linha: char *b = strstr(a, "World"); a função strstr retornará um ponteiro de oito bits, indicando o endereço do buffer onde esta a string.

Acontece que meu buffer possui 25kbytes.

Entendeu o problema?


Se o seu buffer tem 25k o endereçamento não deveria ser só com 8 bits.
Mto estranho.
É Keil 8051 ou ARM?


Keil arm.

MensagemEnviado: 13 Jan 2011 07:53
por barboza
proex escreveu:
barboza escreveu:
proex escreveu:André, nessa sua linha: char *b = strstr(a, "World"); a função strstr retornará um ponteiro de oito bits, indicando o endereço do buffer onde esta a string.

Acontece que meu buffer possui 25kbytes.

Entendeu o problema?


Se o seu buffer tem 25k o endereçamento não deveria ser só com 8 bits.
Mto estranho.
É Keil 8051 ou ARM?


Keil arm.


Vc testou strstr?