Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-12-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
No se si me estoy perdiendo algo. Pero lo primero que veo es que estas utilizando el carácter #0, y recordemos que ese carácter se utiliza para marcar el final de una cadena. Por lo tanto cuando haces esto:

Código Delphi [-]
(StrComp(Pchar(buffer), Pchar(sStartCross)) = 0)

Como sStartCross comienza por #0, se considera una cadena vacía, así que en el momento en que el contenido de buffer también comience por #0 la condición se cumplirá, es decir, no se tendrán en cuenta el resto de caracteres. Yo te sugiero que para hacer comprobaciones en las que interviene el carácter #0 utilices funciones como CompareMem, mucho mas rápida, y no te metas a utilizar funciones para el tratamiento de cadenas
Responder Con Cita
  #2  
Antiguo 21-12-2006
Avatar de papulo
papulo papulo is offline
Miembro
 
Registrado: ago 2005
Ubicación: Lleida - Cataluña - España -Europa - Planeta tierra - Sistema solar - Via Lactea ...
Posts: 542
Poder: 21
papulo Va por buen camino
Cita:
Empezado por seoane
Como sStartCross comienza por #0, se considera una cadena vacía, así que en el momento en que el contenido de buffer también comience por #0 la condición se cumplirá, es decir, no se tendrán en cuenta el resto de caracteres. Yo te sugiero que para hacer comprobaciones en las que interviene el carácter #0 utilices funciones como CompareMem, mucho mas rápida, y no te metas a utilizar funciones para el tratamiento de cadenas
Gracias Seoane, hace un rato que lo he averiguado depurando chino chano. De todas formas, ¿un ejemplo ilustrativo de código para novatos? de esos que facilitan la comprensión y me sirven para hacerme la idea y poder aplicarlo, porque todos sabemos que la ayuda de Dlphi 7 es...¿escasa y escueta? al menos para mi, de momento.
__________________
"El aprendizaje potencia la intuición"
Yo mismo, en un momento de inspiración. v2.0
Responder Con Cita
  #3  
Antiguo 21-12-2006
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 25
Crandel Va por buen camino
siempre puedes escribir una pequenia funcion propia de comparacion, con un simple ciclo dentro que compare elemento por elemento y que te devuelva un true en caso de ser iguales.

Aunque creo haber visto dentro de delphi una funcion similar pero no recuerdo donde.
__________________
[Crandel]

Última edición por Crandel fecha: 21-12-2006 a las 14:28:02.
Responder Con Cita
  #4  
Antiguo 21-12-2006
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.673
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Y si siempre comienza por esa cadena ¿por qué no te lo saltas y empiezas en la posición siguiente?

¿Puedes ponernos un trocito del fichero para probar?

Última edición por Casimiro Noteví fecha: 21-12-2006 a las 14:21:00.
Responder Con Cita
  #5  
Antiguo 21-12-2006
Avatar de papulo
papulo papulo is offline
Miembro
 
Registrado: ago 2005
Ubicación: Lleida - Cataluña - España -Europa - Planeta tierra - Sistema solar - Via Lactea ...
Posts: 542
Poder: 21
papulo Va por buen camino
Wink

Casimiro:
Se que podría saltarmelo y buscar la cadena 'F5:02:40:00' directamente, pero eso no resolvería mi problema, solo lo parchearía. Y si en un momento dado tengo que pelearme con cadenas cuyo identificador comienza por '00' tendré que aprender, y ya que el tema me pilla pez, mejor aprenderlo sin vicios ni malas costumbres

Aqui un trozo:

Código:
00000000:00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20    ..              
00000010:20 20 20 00 32 34 32 31 31 00 20 20 20 20 20 20       .24211.      
00000020:20 20 00 4e 45 57 20 48 4f 4c 4c 41 4e 44 00 20      .NEW HOLLAND. 
00000030:20 20 20 20 20 20 20 00 33 33 33 20 54 52 41 43           .333 TRAC
00000040:54 4f 52 00 20 20 20 20 20 20 20 20 20 20 20 20    TOR.            
00000050:20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                    
00000060:20 20 20 20 20 20 20 20 20 20 00 31 39 37 35 00              .1975.
00000070:31 39 38 34 00 f5 02 40 01 00 00 00 00 00 20 20    1984.õ.@......  
00000080:20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00                   .
00000090:32 33 39 38 33 00 20 20 20 20 20 20 20 20 00 46    23983.        .F
000000a0:4f 52 44 00 20 20 20 20 20 20 20 20 20 20 20 20    ORD.            
000000b0:20 20 20 00 43 4f 52 54 49 4e 41 20 49 56 20 31       .CORTINA IV 1
000000c0:2c 33 20 28 4c 46 50 2d 54 4f 20 52 45 50 4c 41    ,3 (LFP-TO REPLA
000000d0:43 45 20 4c 55 43 41 53 20 4f 4e 4c 59 29 00 20    CE LUCAS ONLY). 
000000e0:20 20 20 20 20 20 00 31 39 37 36 00 31 39 37 39          .1976.1979
000000f0:00 f5 02 40 01 00 00 00 00 00 20 20 20 20 20 20    .õ.@......      
00000100:20 20 20 20 20 20 20 20 20 20 20 00 32 33 39 38               .2398
Crandel:
Esa es la opción que estaba barajando y que parametrizandola me dará toda la funcionalidad que busco.
__________________
"El aprendizaje potencia la intuición"
Yo mismo, en un momento de inspiración. v2.0
Responder Con Cita
  #6  
Antiguo 21-12-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Una primera aproximacion sería algo como esto:

Código Delphi [-]
function Buscar(Archivo: String; Sub: Pointer; Count: int64): int64;
var
  P: PByte;
  i: int64;
begin
  Result:= -1;
  with TMemoryStream.Create do
  try
    LoadFromFile(Archivo);
    if Size < Count then
      Exit;
    i:= 0;
    P:= Memory;
    while (not CompareMem(Sub,P,Count)) and (i < Size) do
    begin
      inc(P);
      inc(i);
    end;
    if i < Size then
      Result:= i;
  finally
    Free;
  end;
end;

// Por ejemplo
var
  Buffer: Array[1..6]of Byte;
begin
  Buffer[1]:= $00; Buffer[2]:= $F5; Buffer[3]:= $02;
  Buffer[4]:= $40; Buffer[5]:= $00;
  ShowMessage(IntToHex(Buscar('d:\1.dat',@Buffer,5),8));
end;

La función buscar, nos devuelve la posición de la cadena que buscamos, o -1 si no la encuentra. La única desventaja es que cargamos todo el archivo en memoria y si el archivo es muy grande (un par de decenas de megas) puede resultar un problema.
Responder Con Cita
  #7  
Antiguo 21-12-2006
Avatar de papulo
papulo papulo is offline
Miembro
 
Registrado: ago 2005
Ubicación: Lleida - Cataluña - España -Europa - Planeta tierra - Sistema solar - Via Lactea ...
Posts: 542
Poder: 21
papulo Va por buen camino
Ostias! Eso me llevará un rato leerlo, comprenderlo y asimilarlo. Asi que aprovecho para hacer una pausita, ir al gimnasio, comer y luego con fuerzas renovadas me enfrentaré a esto.

Gracias Seoane y a todos los demás.

PD:Soluciones mas sencillas también se aceptan
__________________
"El aprendizaje potencia la intuición"
Yo mismo, en un momento de inspiración. v2.0
Responder Con Cita
  #8  
Antiguo 21-12-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Cita:
Empezado por papulo
Ostias! Eso me llevará un rato leerlo, comprenderlo y asimilarlo. Asi que aprovecho para hacer una pausita, ir al gimnasio, comer y luego con fuerzas renovadas me enfrentaré a esto.
Quizá yo también tendría que ir al gimnasio, en vez de pasarme el día delante del ordenador
Responder Con Cita
  #9  
Antiguo 21-12-2006
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.673
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por seoane
Quizá yo también tendría que ir al gimnasio, en vez de pasarme el día delante del ordenador
ya somos dos




Por cierto, Papulo, ¿eso es una tabla de algún tipo de base de datos que quizás sea pública su estructura, no?
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Comparar dos cadenas de texto creus Varios 5 06-03-2009 00:22:13
Obtener un fichero adjunto a un nodo de un fichero XML muntasil Internet 0 18-07-2006 12:57:57
Uso de cadenas zvf OOP 4 05-04-2006 00:55:47
Comparar caracteres tecleados con los de una cadena Calculador Varios 1 16-01-2005 18:36:35
if ... in [] con cadenas???? neon Varios 3 10-12-2004 13:15:39


La franja horaria es GMT +2. Ahora son las 01:32:06.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi