Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-07-2007
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Red face Eliminar subcadena de una cadena

Hola a tod@s y gracias por adelantado por vuestro tiempo.

¿Alguien sabe si existe una función que elimine una subcadena de un string? El problema es que no conozco la posición exacta de la subcadena, tan sólo que está a la derecha de un determinado caracter y a la izquierda del número.

La cuestión es que tengo un código de factura similar a este: SLS_F/000105 y necesito transformalo en SLS_F/105
¿Existe alguna rutina que haga esta transformación directamente?

Ya sé que existen varias funciones de manejo de strings con las que puedo construir este procedimiento pero me gustaría saber si existe un método directo.
Responder Con Cita
  #2  
Antiguo 09-07-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Pues no conozco ninguna función que se ajuste a lo que pides. Aunque últimamente delphi trae funciones para todo, lo malo es encontrarlas.

Pero lo que si puedo es dejártelo en 2 instrucciones :
Código Delphi [-]
function QuitaCeros(Str: String): String;
begin
  while pos('/0',Str) > 0 do
    delete(Str,pos('/0',Str)+1,1);
  Result:= Str
end;

// Por ejemplo
ShowMessage(QuitaCeros('SLS_F/000105'));
Responder Con Cita
  #3  
Antiguo 09-07-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Yo uso el Replace (AnsiReplaceText, AnsiReplaceStr) utilizando la cadena vacía. La admite sin problemas.
Te funciona para todas las ocurrencias de la cadena que quieras eliminar.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 09-07-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por Neftali
Yo uso el Replace (AnsiReplaceText, AnsiReplaceStr) utilizando la cadena vacía. La admite sin problemas.
Te funciona para todas las ocurrencias de la cadena que quieras eliminar.
Pero según lo entiendo yo, no quiere eliminar todos los ceros, solo los que se encuentran entre la barra y la primera cifra significativa.
Responder Con Cita
  #5  
Antiguo 09-07-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Y solo por fastidiar , te dejo este otro mas largo, pero creo que mas rápido:
Código Delphi [-]
function Quitar0(Source: PChar; Dest: PChar): Integer;
asm
        MOV     Result,0
        DEC     EAX
@@SIG1:
        INC     EAX
        CMP     BYTE PTR [EAX],0
        JE      @@SALIR
        MOV     CL,[EAX]
        CMP     CL,'/'
        JE      @@SIG2
        MOV     BYTE PTR [EDX],CL
        INC     EDX
        INC     Result
        JMP     @@SIG1
@@SIG2:
        MOV     BYTE PTR [EDX],CL
        INC     EDX
        INC     Result
@@SIG3:
        INC     EAX
        CMP     BYTE PTR [EAX],0
        JE      @@SALIR
        MOV     CL,[EAX]
        CMP     CL,'0'
        JE      @@SIG3

        MOV     BYTE PTR [EDX],CL
        INC     EDX
        INC     Result
@@SIG4:
        INC     EAX
        CMP     BYTE PTR [EAX],0
        JE      @@SALIR
        MOV     CL,[EAX]
        MOV     BYTE PTR [EDX],CL
        INC     EDX
        INC     Result
        JMP     @@SIG4
@@SALIR:
        MOV     BYTE PTR [EDX],0
end;

Por ejemplo:
Código Delphi [-]
var
  Str: String;
begin
  Str:= Copy('SLS_F/000105',1,MAXINT);
  Quitar0(PChar(Str),PChar(Str));
  ShowMessage(Str);
end;

que forma de perder el tiempo ...
Responder Con Cita
  #6  
Antiguo 09-07-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Algo así igual también pueda valerte:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:=StringReplace(Edit1.Text,'/000','/',[rfReplaceAll]);
end;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #7  
Antiguo 09-07-2007
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Cita:
Empezado por seoane
Y solo por fastidiar , te dejo este otro mas largo, pero creo que mas rápido:
Código Delphi [-]
function Quitar0(Source: PChar; Dest: PChar): Integer;
asm
        MOV     Result,0
        DEC     EAX
@@SIG1:
        INC     EAX
        CMP     BYTE PTR [EAX],0
        JE      @@SALIR
        MOV     CL,[EAX]
        CMP     CL,'/'
        JE      @@SIG2
        MOV     BYTE PTR [EDX],CL
        INC     EDX
        INC     Result
        JMP     @@SIG1
@@SIG2:
        MOV     BYTE PTR [EDX],CL
        INC     EDX
        INC     Result
@@SIG3:
        INC     EAX
        CMP     BYTE PTR [EAX],0
        JE      @@SALIR
        MOV     CL,[EAX]
        CMP     CL,'0'
        JE      @@SIG3

        MOV     BYTE PTR [EDX],CL
        INC     EDX
        INC     Result
@@SIG4:
        INC     EAX
        CMP     BYTE PTR [EAX],0
        JE      @@SALIR
        MOV     CL,[EAX]
        MOV     BYTE PTR [EDX],CL
        INC     EDX
        INC     Result
        JMP     @@SIG4
@@SALIR:
        MOV     BYTE PTR [EDX],0
end;

Por ejemplo:
Código Delphi [-]
var
  Str: String;
begin
  Str:= Copy('SLS_F/000105',1,MAXINT);
  Quitar0(PChar(Str),PChar(Str));
  ShowMessage(Str);
end;

que forma de perder el tiempo ...

Es increible la de tiempo que tienen algunos!!

Saludos
Responder Con Cita
  #8  
Antiguo 09-07-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por Bicho
Es increible la de tiempo que tienen algunos!!
Pues la verdad es que tengo un montón de trabajo que hacer, pero como digo debajo de mi nombre, me dedico a procrastinar
Responder Con Cita
  #9  
Antiguo 09-07-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por seoane
solo los que se encuentran entre la barra y la primera cifra significativa.
En este caso sería por si fuera útil buscar 000.
Si és sólo para discriminar algunos, como tú comentas, está claro que no es útil.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #10  
Antiguo 09-07-2007
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Gracias a todos por vuestras respuestas, jejeje, me habéis alegrado la tarde (pensé que nadie respondería porque estaba preguntando una trivialidad).

Aclaraciones:
* No me vale el "replace" porque eliminaría todos los ceros y algunos de ellos los necesito.
* Creo que pasaré de la versión larga del algoritmo... prefiero código que dentro de 6 meses pueda entender sin un manual (aunque tampoco puedo decir que lo entienda en este momento).
* Las facturas actualmente tienen 2 ó 3 dígitos, así que el número de ceros es de 4 ó 3, pero nada me garantiza que no lleguemos a la factura 1000, así que prefiero un método más elegante que el de ensayo-error (aunque me conozco y seguro que acabaré haciendo algo así, aunque me sentiré muy culpable por hacerlo).
Responder Con Cita
Respuesta



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
Funcion para borrar la cadena que aparesca repetida dentro de otra cadena flystar Varios 1 02-07-2007 23:51:10
Eliminar Cadena De Caracteres.... ZayDun Internet 3 27-03-2007 21:20:58
eliminar caracteres de una cadena ibbeth Firebird e Interbase 4 23-12-2005 23:35:28
Eliminar salto de linea de una cadena pablomg8 Varios 2 13-05-2005 15:35:44
Como busco una subcadena con like DarkMedel SQL 2 20-02-2004 14:46:21


La franja horaria es GMT +2. Ahora son las 10:26:24.


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