FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
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.
|
#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 .... |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
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 |
|