Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Como extraer letras de una cadena? (https://www.clubdelphi.com/foros/showthread.php?t=74961)

avila 21-07-2011 04:23:35

¿Como extraer letras de una cadena?
 
Hola a todos. ¿Cómo puedo extraer una serie de letras que estan en una cadena separadas por comas ','.

Tengo este String 'abc,134,jio', necesito sacar las frases abc a una variable y tambien los números asi como los últimos caracteres. ¿Alguna idea?

marcoszorrilla 21-07-2011 06:36:47

Código Delphi [-]
MiCadena1:=Copy('abc,134,jio',1,3);
MiCadena2:=Copy('abc,134,jio',5,3);

Un Saludo.

oscarac 21-07-2011 06:44:08

Si las posiciones son fijas entonces podrias hacerlo como bien te menciona marcoszorrilla, pero si son variables y delimitadas por "," entonces tendrias que hacerte un procedimiento que lea la cadena y vaya asignando cada vez que encuentre una coma ","

Algo Asi
Código Delphi [-]
 
 
     for i:= 1 to Length(sLinea) do
      begin
        vChar := Copy(sLinea, i, 1);
        if vChar = ',' then
        begin
          Inc(vContador);
          case vContador of
            1: begin CDSCCostoCCosto.Value := vCadena; vCadena:= ''; end;
            2: begin CDSCCostoDescripcion.Value := vCadena; vCadena:= ''; end;
          end
        End
        Else
          vCadena := vCadena + vChar;

vContador te indica el bloque que esta leyendo.. en el ejemplo solo hay 2 bloques

cecam 21-07-2011 08:48:18

O también usar un TStringList y mirarte las propiedades Delimiter y DelimitedText

Saludos!

newtron 21-07-2011 08:59:01

Hola.

Echale un vistazo a esta respuesta del maestro ecfisa.

http://www.clubdelphi.com/foros/showthread.php?t=74871

Saludos

avila 22-07-2011 05:12:59

Muchisimas gracias por las sugerencias, en verdad me pondre a trabajar, no sin antes compartirles que hice dos funciones para obtener lo que quiero, díganme como mejorarlo o dejarlo en una sola función.

ya un poco acorralado se me ocurrio hacer una función para extraer los caracteres y otra para elimanrlos. ¿Qué les parece?

Código Delphi [-]
function ExtraeChars(Linea:String):String;
var i,j : integer;
begin
    for i := 1 to length(Linea) do
    begin
      j:= Pos(',',Linea);
    end;
    ExtraeChars:=copy(Linea,1,j-1);
end;

function EliminaChars(Linea:String):String;
var i,j : Integer;
begin
    for i := 1 to length(Linea) do
    begin
      j:= Pos(',',Linea);
    end;
    Delete(Linea,1,j);
    EliminaChars:=Linea;
end;

procedure TForm2.Button1Click(Sender: TObject);
var Cadena,Result1,Result2: string;
begin
   Cadena:='Club,Delphi';
   Result1:=ExtraeChars(Cadena);
   Cadena :=EliminaChars(Cadena);
   Result2:=Cadena;
   ShowMessage(Result1);
   ShowMessage(Result2);
end;

oscarac 22-07-2011 05:48:30

pues eso depende del uso que le quieras dar a las funciones que has creado

ecfisa 22-07-2011 06:04:52

Hola avila.

Tus funciones son correctas, pero usando TStringLists podés hacerlo de forma simple en una sóla función:
Código Delphi [-]
function SepararCadena(const Cadena: string; const Delim: Char): TStringList;
begin
  Result:= TStringList.Create;
  Result.Delimiter:= Delim;
  Result.DelimitedText:= Cadena;
end;

Ejemplos de llamada:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  TS: TStrings;
  i : integer;
begin
  TS:= SepararCadena('Cadena1,Cadena2,Cadena3,...,CadenaN',',');
  try
    for i:= 0 to TS.Count -1 do
      ShowMessage(TS[i]);
  finally
    TS.Free;
  end;
end;

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Items:= SepararCadena('Cadena1,Cadena2,Cadena3,...,CadenaN',',');
end;

Saludos.

avila 22-07-2011 06:27:14

Muchisimas Gracias a MarcosZorrilla, Oscarac, Newtron y Ecfisa. Tomare muy en cuenta los TStringLists. El código de Oscar esta muy bueno. Hare las pruebas y regresare a compartir con ustedes como me fue. Seguimos en contacto y muchos saludos.

ContraVeneno 22-07-2011 17:42:29

¿Cómo separar una cadena a un arreglo de valores? Artículo en Delphi.About.com en ingles.

Es un ejemplo bien simple y te coloca los valores en un arreglo y ya podrías manejar cada uno a tu antojo. Se puede utilizar cualquier delimitador.
Aunque el ejemplo de eficsa me parece mucho más sencillo, de cualquier forma quería enlazar el otro para tener opciones.


La franja horaria es GMT +2. Ahora son las 02:21:27.

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