![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
|
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 |
|
#2
|
|||
|
|||
|
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; |
|
#3
|
||||
|
||||
|
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;
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. Última edición por roman fecha: 09-05-2003 a las 19:59:13. |
|
#4
|
|||
|
|||
|
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:
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?
__________________
- Si tienes un problema que tiene solución ¿porque te preocupas? - Si tienes un problema que no tiene solución ¿porque te preocupas? |
|
#5
|
|||
|
|||
|
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. |
|
#6
|
|||
|
|||
|
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;
|
|
#7
|
||||
|
||||
|
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.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi! - BAScript - Multi Language Scriptable Development Environment |
|
#8
|
|||
|
|||
|
¿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:
Espero sirva. Saludos. |
|
#9
|
|||
|
|||
|
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 |
|
#10
|
||||
|
||||
|
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.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Crystal Reports Delphi 2005 | jodycom | Impresión | 5 | 09-01-2008 20:37:08 |
| Mi primer contacto con Delphi 2006 | mazinger | Noticias | 1 | 12-12-2005 14:07:08 |
| Traduccion de función VB a delphi !!! | Jan_polero | API de Windows | 2 | 07-02-2005 12:32:54 |
| ¿Cual es el futuro de Delphi? | Voutarks | Debates | 33 | 13-04-2004 19:29:08 |
| Aplicaciones Delphi Cliente/servidor | TelloClos | Conexión con bases de datos | 8 | 09-06-2003 17:12:38 |
|