Procurando string dentro de um arquivo de texto.

Programação C em geral

Moderadores: 51, guest2003

Procurando string dentro de um arquivo de texto.

Mensagempor proex » 11 Jan 2011 08:03

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:
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor RobL » 11 Jan 2011 09:10

Enquanto não aparecer algo melhor tente strpbrk().
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor barboza » 11 Jan 2011 09:30

Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor proex » 11 Jan 2011 13:56

O problema dessa função strpbrk é que somente procura strings em buffer de até 255 bytes.

Meu buffer tem 25Kbytes
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor andre_luis » 11 Jan 2011 16:43

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);


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor RobL » 11 Jan 2011 19:39

Esta trabalha com buffer memchr()
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor andre_luis » 11 Jan 2011 20:50

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.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor proex » 12 Jan 2011 08:24

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?
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor barboza » 12 Jan 2011 08:28

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?
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor Red Neck Guy » 12 Jan 2011 10:19

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++;
  }
}

ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Mensagempor Red Neck Guy » 12 Jan 2011 10:21

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++;
  }
}

ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Mensagempor Red Neck Guy » 12 Jan 2011 10:21

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++;
  }
}

ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Mensagempor Red Neck Guy » 12 Jan 2011 10:23

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++;
  }
}

ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Mensagempor proex » 13 Jan 2011 07:40

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.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor barboza » 13 Jan 2011 07:53

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?
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Próximo

Voltar para Visual C++/C/C++/C#

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 0 visitantes

x