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 12-10-2015
sonjeux sonjeux is offline
Miembro
 
Registrado: jul 2004
Posts: 60
Poder: 20
sonjeux Va por buen camino
Talking Quitar dos espacios en cadena dejar uno

Saludos, quisiera saber como puedo hacer para limpiar una cadena que tiene muchos espacios, o sea dejar solo uno

Una cadena como esta

Código:
'70224637             444      54666 4       4512               4  5 4 50 '
que quede como esta

Código:
'70224637 444 54666 4 4512 4 5 4 50 '
con un solo espacio, gracias por su tiempo
Responder Con Cita
  #2  
Antiguo 12-10-2015
Nasca Nasca is offline
Miembro
 
Registrado: abr 2007
Ubicación: Almería (España)
Posts: 249
Poder: 18
Nasca Va por buen camino
Yo tengo esto:

Código Delphi [-]
function BorrarMultiEspacios(valor: string): string;
 begin
   repeat
       valor := StringReplace(valor,'  ',' ',[rfReplaceAll]);
   until
       pos('  ',valor) = 0 ;
   Result := valor;    
 end;

Ni idea de si es lo más optimo. De hecho ni recuerdo si es mio o lo copié de algún lado.
Otra opción en:
http://texthandler.com/?module=remov..._spaces_delphi
Aunque no creo que sea mucho mas eficiente.

O adaptar este código de c#, bastante similar al mío:

Código:
    while (text.IndexOf("  ") != -1)
    {
        text = text.Replace("  ", " ");
    }
    return text;
Aunque hace básicamente lo mismo y no creo que sea mucho más eficiente que el primero.
Responder Con Cita
  #3  
Antiguo 12-10-2015
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
A ver si ésta (recorre una sóla vez la cadena):

Código Delphi [-]
function ComprimeEspacios(S: String): String;
var
  I: Integer;

begin
  I := 1;

  while I <= Length(S) do
  begin
    while (I <= Length(S)) and (S[i] <> ' ') do
      Inc(I);

    Inc(I);

    while (I <= Length(S)) and (S[i] = ' ') do
      Delete(S, I, 1);

    Inc(I);
  end;

  Result := S;
end;

// Saludos
Responder Con Cita
  #4  
Antiguo 12-10-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Otra opción:
Código Delphi [-]
function DeleteExtraSpaces(str: string): string;
var
  i: integer;
begin
  for i := 1 to Length(str)-1 do
    while (str[i] = ' ') and (str[i+1] = ' ') do
      Delete(str, i+1, 1);
  Result := str;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 13-10-2015
sonjeux sonjeux is offline
Miembro
 
Registrado: jul 2004
Posts: 60
Poder: 20
sonjeux Va por buen camino
Muchas gracias a todos, me sirvio un moton
Responder Con Cita
  #6  
Antiguo 13-10-2015
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Esa es una forma destructiva (borrando). Otra manera es construir una nueva cadena, y cuando hay un espacio agregar el primero e ignorar los que vengan.
__________________
El malabarista.
Responder Con Cita
  #7  
Antiguo 14-10-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Otra opcion, esta vez en asm:
Código Delphi [-]
function BorraMultiespacios(S: String): String;
var
  Cadena: PCHAR;
begin
  Cadena:= @S[1];
  asm
  mov       edi, Cadena
  mov       esi, edi
@loop1:
  cmp       word ptr [esi], 2020h
  jne       @sigue
  inc       esi
  jmp       @loop1
@sigue:
  movsb
  cmp       byte ptr [esi], 0
  jne       @loop1
  mov       word ptr [edi], 0h
  end;
  Result:= Cadena;
end;

Saludos.
Responder Con Cita
  #8  
Antiguo 14-10-2015
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por escafandra Ver Mensaje
Otra opcion, esta vez en asm:
Código Delphi [-]
function BorraMultiespacios(S: String): String;
var
  Cadena: PCHAR;
begin
  Cadena:= @S[1];
  asm
  mov       edi, Cadena
  mov       esi, edi
@loop1:
  cmp       word ptr [esi], 2020h
  jne       @sigue
  inc       esi
  jmp       @loop1
@sigue:
  movsb
  cmp       byte ptr [esi], 0
  jne       @loop1
  mov       word ptr [edi], 0h
  end;
  Result:= Cadena;
end;

Saludos.
¡Joder! Sí que rizamos el rizo Seguro que así es lo más eficiente.

// Saludos
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
Cómo quitar espacios inicial y final en cadena bulc Varios 0 22-03-2014 18:24:33
Quitar Espacios en Sql El_Perrito Firebird e Interbase 3 25-02-2005 12:49:12
Quitar espacios al final de una cadena gescoto99 SQL 1 04-08-2004 00:02:43
Quitar espacios de campos CHAR cartmanrules Firebird e Interbase 3 22-07-2004 10:53:06
Quitar espacios en blanco Javier_A OOP 3 09-06-2004 10:29:27


La franja horaria es GMT +2. Ahora son las 11:34:49.


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