Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   separar una cadena 5263-526-30 que me quede 30 (https://www.clubdelphi.com/foros/showthread.php?t=69342)

ingabraham 11-08-2010 20:05:14

separar una cadena 5263-526-30 que me quede 30
 
necesito separar una cadena
ej:
5263-526-30
que me quede
30

alguien q me pueda ayudar en una funcion o algo asi.
que me quede la cadena despues del ultimo separador -

maeyanes 11-08-2010 20:26:44

Hola...

Hay varias formas, una es que recorras la cadena de forma invertida y te detengas al encontrar el primer '-':

Código Delphi [-]
for I := Length(Cadena) to 1 do
begin
  if Cadena[i] = '-' then
    Exit;
  Insert(Cadena[i], Result, 1)
end


Saludos...

rgstuamigo 11-08-2010 21:20:58

Otras alternativas
 
Si se trata de copiar o extraer los dos ultimos caracteres de la cadena, pues se puede hacer:
Código Delphi [-]
Cadena_Separada:=RightStr(Cadena,2);
o tambien
Código Delphi [-]
Cadena_Separada:=Copy(Cadena,Length(Cadena)-1,2);
Ojo: Para que te funcione lo anterior no debe haber ningun espacio al final de la cadena.;).
Saludos...:)

ingabraham 11-08-2010 23:21:51

no, pueden haber mas numero despues del separador
y tambien hay muchos separadores.

rgstuamigo 12-08-2010 00:01:18

Bueno en ese caso puedes hacerlo tal como te ha indicado Maeyanes o bien así:
Código Delphi [-]
    p:=LastDelimiter('-',Cadena);//Obtengo la ultima posicion del caracter '-' en la cadena
   Cadena_Separada:=RightStr(Cadena,length(Cadena)-p);//Extraigo la parte derecha de la cadena a partir de la pocision p+1
O tambien
Código Delphi [-]
    p:=LastDelimiter('-',Cadena);//Obtengo la ultima posicion del caracter '-' en la cadena
   Cadena_Separada:=Copy(Cadena,p+1,length(cadena)-p);//copio a partir de la pocision p+1 hacia adelante
Saludos...;)

ContraVeneno 12-08-2010 03:55:15

Separar cadenas en un arreglo.

ecfisa 12-08-2010 19:02:30

Cita:

Empezado por ContraVeneno (Mensaje 373268)

Muy interesante el artículo ContraVeneno.

Cuando ví el post se me ocurrió una solución parecida a la de maeyanes pero usando while, y conocía también el uso de LastDelimiter propuesto rgstuamigo, por eso no agregué código similar.

Pero esta solución usando TStrings, por lo menos para mí, es novedosa.

Gracias por el aporte.


Saludos.

ingabraham 12-08-2010 22:26:45

20130-8563-675

Código Delphi [-]
for I := Length(Cadena) Downto 1 do
begin  
  if Cadena[i] = '-' then  
    break;  

  Insert(Cadena[i], Result, 1)
end

1. obtengo 675 , correcto.

2. pero quiero tambien la cadena 20130-8563
?? como lo hago.

ecfisa 12-08-2010 23:10:38

Hola.

Con la solución de ContraVeneno, es sencillísimo.

Código Delphi [-]
procedure Split (const Delimiter: Char; Input: string; const Strings: TStrings) ;
begin
   Assert(Assigned(Strings)) ;
   Strings.Clear;
   Strings.Delimiter := Delimiter;
   Strings.DelimitedText := Input;
end;

...

var
  ts: TStrings;
begin
  ts:= TStringList.Create;
  Split('-', '20130-8563-675', ts);
end;

Entonces tenés: '20130' en ts[0], '8563'en ts[1] y '675' en ts[2].

Saludos.

ecfisa 12-08-2010 23:28:35

Hola de nuevo.

Como para abrir el abanico, esta es otra solución
Código Delphi [-]
var
  Cad, Res: string;
begin
  Cad:= '20130-8563-675';
  Res:=  Copy(Cad,1,Pos('675',Cad)-2); 
end;
Pero es mucho mejor la solución de ContraVeneno, por que del otro modo ya tenés que usar dos funciones: una para obtener el primero y otra para obtener el último...
Y si mañana se te presenta tener que obtener el tercer grupo de : '13412-707-1307-00893-32', vas a tener que usar una tercera... o cuarta.

Usando la solución con TStringList, podés obtener cualquier grupo de dígitos con sólo especificar el string y el delimitador y luego concatenás lo que quieras.
Para este caso:
Código Delphi [-]
   Re:= ts[0] + '-' + ts[1];


Saludos.

ingabraham 14-08-2010 15:46:45

listo, para obener los primeros numero de la cadena


cadena= '852-652-30'
p:=LastDelimiter('-',Cadena);
Cadena_Separada:=Copy(Cadena,1,p-1);


resp: 852-652

ya obtube las dos cosas q necesitaba
gracias.

ecfisa 14-08-2010 19:13:06

Me alegro que lo hayas resuelto.

Saludos.


La franja horaria es GMT +2. Ahora son las 11:15:33.

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