Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   función split en delphi (https://www.clubdelphi.com/foros/showthread.php?t=273)

sergionr 09-05-2003 17:43:00

función split en delphi
 
Hola a todos.

Que función es la que dado un string con caracter separador me devuelve un array.

Como la función split de PHP...?

Gracias...

Chaooooo

andres1569 09-05-2003 19:11:08

Hola:

No me suena una función con ese nombre, pero imagino que sería algo así (dices que devuelve un array, supongo que te refieres a un string, que es un array of char):

Código:

function DelphiSplit (const s: string; SepChr: Char) : String;
var
  p : Integer;
begin
  p := Pos (SepChr, s);
  if p <> 0 then result := Copy (s, p + 1, Length(s) - p)
  else result := s;
end;

Saludos

roman 09-05-2003 19:56:55

Una opción sería usar listas de cadenas y luego vaciarla al arreglo:

Código:

var
  SLista: TStringList;
  Arreglo: array of String;
  Indice: Integer;

begin
  SLista := TStringList.Create;
  SLista.Delimiter := Separador; // el separador que uses
  SLista.DelimitedText := Cadena;  // la cadena a partir

  SetLength(Arreglo, SLista.Count);
  for Indice := 0 to Pred(SLista.Count) do
    Arreglo[Indice] := SLista[Indice];

  SLista.Free;

// Saludos

pd: Este mètodo no será tan potente como el de PHP pues aquí el separador debe ser un caracter mientras que en PHP me parece que puede ser una cadena.

DJ VMan 23-10-2003 17:31:42

hola, teniendo la misma necesidad, y buscando en el foro fue que encontré esta "función split en delphi". Lo probé y me funcionó. Pero siempre y cuando la Cadena no contenga espacios es decir
, tomando en cuenta los siguentes valores:

Cita:

var
...
...
SLista.Delimiter := ';'; // el separador que uses
SLista.DelimitedText := '0123 45670;108 4837'; // la cadena a partir
....
....
en donde Arreglo quedará con el siguiente resultado :

Arreglo[0]=>'0123'
Arreglo[1]=>'45670'
Arreglo[2]=>'108'
Arreglo[3]=>'4837'

No se supone que debiese quedar asi?:

Arreglo[0]=>''0123 45670'
Arreglo[1]=>'108 4837'


o no?...o entendí mal?

mcinpapr 06-01-2009 23:51:26

Función de Split
Nota: Esta función de Split no funciona con un Separador de varios Caracteres pero funciona muy bien con uno sólo:

-----------------------------------------------------------
// 1er Paso Declaras el Arreglo en la cabecera de tu .pas
Type TArreglo = array of String;


-------------------------------------------------------
// 2o Paso - Copias la siguiente función en tu .pas dentro del cuerpo de tu programa
Function Split (cad : String; separador : string): TArreglo;
var
tam, t, i, j : integer;
arr : TArreglo;//array of string;
begin
t:=0;
j:=0;
tam := StrLen(PChar(cad));

for i:=0 to tam -1 do
begin
if cad[i]=separador then
t:= t+1;
end;
SetLength(arr, t+1);

for i:=1 to tam do
begin
if cad[i]<>separador then
begin
arr[j] := arr[j]+cad[i];
end
else
begin
j:= j+1;
end;
end;
Result := arr;
End;

---------------------------------------------------
// 3er Paso - Llamar a la Función
arrFileName := split(strCadenaAEditar, '\');

Donde :
arrFileName la Declaras como de tipo "TArreglo",
strCadenaAEditar es la cadena que quieres separar, y
'\' es el caracter separador.

LeonelGisuk 03-10-2011 15:12:57

Split
 
Código:

Function Split(enumeracion : string): TStringList;
var
        Aux : String;
        i : integer;
        Lista :TStringList;
begin
        enumeracion := trim(enumeracion);
        Lista := TStringList.create;
        Aux := '';
        i:=1;
        while i <= length(Enumeracion) do begin
                if enumeracion[i] <> ',' then begin
                        Aux := Aux + enumeracion[i];
                end;
                if enumeracion[i] = ',' then begin
                        Lista.Add(trim(Aux));
                        Aux := '';
                end;
                inc(i);
        end;
        if Aux <> '' then begin
              Lista.Add(trim(Aux));
        end;
        result := lista;
end;


Ñuño Martínez 03-10-2011 15:55:00

Está bien, LeonelGisuk. Lo único, dejar claro que después hay que destruir (Free) el objeto que se crea una vez que ya no se necesite.

ogalonzo 10-10-2011 22:39:02

¿Porqué no con ExtractStrings()?
 
Puse una respuesta al mismo problema en otro thread, como no tengo permisos aún para postear enlaces, replico mi comentario:
  1. Deposita un TEdit, un TButton y un TMemo
  2. Haz doble clic en el TButton y pon este código:
    Código:

      Memo1.Lines.Clear();
      ExtractStrings([';'], [' '], PChar(Edit1.Text), Memo1.Lines);

  3. Corre el programa, introduce una cadena separada con puntos y comas y listo, cuando hagas clic en el botón verás que el memo se llena con las cadenas.

Espero sirva.

Saludos.

Los maquinas 04-04-2013 16:16:33

ahora Maquina solucionado el Split

la llamada
var
Arreglo: TStringList;
begin
Arreglo:= TStringList.Create;
Split(',',string, Arreglo);

...
..
.

procedure Split(const Delimiter: Char; Input: string; const Strings: TStrings);
begin
Assert(Assigned(Strings));
Strings.Clear;
input:='|' + StringReplace(Input, Delimiter, '| |', [rfReplaceAll])+'|';
Strings.Delimiter := ' ';
Strings.QuoteChar := '|';
Strings.DelimitedText := Input;
end;


Los Maquinas de chile

ecfisa 04-04-2013 17:47:03

Hola Los maquinas y bienvenidos a Club Delphi :)

Como a todos los que se inician te invitamos a que leas nuestra guía de estilo.

Una sugerencia, cuando incluyas código en tus mensajes, utiliza TAG's para darle mas legibilidad. Esta imágen explica el uso:



Saludos.


La franja horaria es GMT +2. Ahora son las 08:12:06.

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