PDA

Ver la Versión Completa : función split en delphi


sergionr
09-05-2003, 17:43:00
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):


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:


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:

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
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
Puse una respuesta al mismo problema en otro thread, como no tengo permisos aún para postear enlaces, replico mi comentario:


Deposita un TEdit, un TButton y un TMemo
Haz doble clic en el TButton y pon este código:

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

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 (http://www.clubdelphi.com/foros/guiaestilo.php).

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

http://img403.imageshack.us/img403/3461/75416396.jpg

Saludos.