Ver la Versión Completa : Eliminar el espacio como delimiter por defecto
egostar
07-08-2008, 14:59:20
Hola
Tengo un pequeño detalle, buscando por aquí y por allá vi que se puede cargar un TStringList con valores obtenidos desde un archivo de texto, hasta aquí todo bien, uso las propiedades Delimiter y DelimitedText de esta forma:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i: Integer;
Linea: string;
begin
DoubleBuffered := True;
Memo1.Lines.LoadFromFile('C:\Desarrollo\TDelphi\SGP\Documentos\Base.csv');
for i := 0 to Memo1.Lines.Count - 1 do begin
Linea := Memo1.Lines[i];
Linea := StringReplace(Linea,#9,' ',[rfReplaceAll]); //Quito los caracteres Tab que no me sirven,
Memo2.Lines.Delimiter := ';'; //Asigno punto y coma como delimiter
Memo2.Lines.DelimitedText := Linea; //Agrego la Linea al Memo
Memo2.Lines.Add('==========================');
end;
end;
Ok, hasta aquí todo aparenta funcionar como debe ser, pero..... (como siempre hay un pero) sigue tomando el espacio como un delimiter, que por lo que he leído es el que traen por defecto.
Bueno, después de todo este rollo mareador, la pregunta que quiero hacer. :)
¿Hay manera de eliminar el espacio como delimiter?
Yo lo he resuelto cambiando el espacio por un guion bajo,
Linea := StringReplace(Linea,' ','_',[rfReplaceAll]);
Pero no es lo que necesito.
Salud OS y gracias.
Hola,
¿este codigo te funciona?
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i: Integer;
Linea: string;
begin
DoubleBuffered := true;
Memo1.Lines.LoadFromFile('...');
Memo1.Lines.text := stringreplace(Memo1.Lines.text,#9,' ',[rfReplaceAll]);
Memo2.Lines.Delimitier := ';';
Memo2.Lines.Delimitiedtext := Memo1.Lines.Text;
end;
y remirando...no deberia ser antes de cargar el fichero memo1.lines.delimitier:= ';'?
egostar
07-08-2008, 15:53:49
Hola,
¿este codigo te funciona?
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i: Integer;
Linea: string;
begin
DoubleBuffered := true;
Memo1.Lines.LoadFromFile('...');
Memo1.Lines.text := stringreplace(Memo1.Lines.text,#9,' ',[rfReplaceAll]);
Memo2.Delimitier := ';';
Memo2.Lines.Delimitiedtext := Memo1.Lines.Text;
end;
Hola coso,
Si gracias, esa es la forma simplificada de hacerlo, sin embargo en este caso necesito mostrar la información tal y como lo tiene el archivo y después hacer un listado con datos del mismo archivo, el tema es que necesito que el espacio no lo considere como delimiter por ejemplo
El Archivo tiene esta estructura:
Juan Pérez Martínez;jpm@isp.com;Compañia Universal
Necesito que el otro memo muestre esto:
Juan Pérez Martínez
jpm@isp.com
Compañia Universal
=================
Pero como está tomando el caracter espacio como delimiter, me hace esto
Juan
Pérez
Martínez
jpm@isp.com
Compañia
Universal
=================
Yo estoy cambiando el espacio por un guion bajo, pero no es lo que necesito.
Juan_Pérez_Martínez
jpm@isp.com
Compañia_Universal
=================
Espero haber sido más claro.
Salud OS
Y, como te decia, ¿poniendo memo1.lines.delimitier := ';' antes de cargar el archivo? en teoria te lo tendria que cargar considerando como delimitador ese, a no ser que haya alguna otra variable.
jhonny
07-08-2008, 16:19:58
Otra forma de como lo puedes hacer es la siguiente:
procedure TForm2.Button1Click(Sender: TObject);
var
Linea: String;
begin
Memo1.Lines.LoadFromFile('C:\Desarrollo\TDelphi\SGP\Documentos\Base.csv');
Memo2.Clear;
for Linea in Memo1.Lines do
begin
ExtractStrings([';'], [' '], PCHAR(Linea+';'+StringOfChar('=', 17)), Memo2.Lines);
end;
end;
egostar
07-08-2008, 16:46:06
Y, como te decia, ¿poniendo memo1.lines.delimitier := ';' antes de cargar el archivo? en teoria te lo tendria que cargar considerando como delimitador ese, a no ser que haya alguna otra variable.
Hola haciendo lo que comentas me resulta esto
Juan
Pérez;jpm@iSP.com;Av
Conocida
1254;
Salud OS y gracias
egostar
07-08-2008, 16:49:36
Otra forma de como lo puedes hacer es la siguiente:
procedure TForm2.Button1Click(Sender: TObject);
var
Linea: String;
begin
Memo1.Lines.LoadFromFile('C:\Desarrollo\TDelphi\SGP\Documentos\Base.csv');
Memo2.Clear;
for Linea in Memo1.Lines do
begin
ExtractStrings([';'], [' '], PCHAR(Linea+';'+StringOfChar('=', 17)), Memo2.Lines);
end;
end;
Hey, eres mi héroe amigo jhonny, funciona perfecto, te debo una :D
No entiendo como funciona eso que hiciste :o, pero lo voy a analizar, esta muy interesante :)
Salud OS
JoseFco
07-08-2008, 16:52:26
Hola coso,
Si gracias, esa es la forma simplificada de hacerlo, sin embargo en este caso necesito mostrar la información tal y como lo tiene el archivo y después hacer un listado con datos del mismo archivo, el tema es que necesito que el espacio no lo considere como delimiter por ejemplo
El Archivo tiene esta estructura:
Necesito que el otro memo muestre esto:
Pero como está tomando el caracter espacio como delimiter, me hace esto
Yo estoy cambiando el espacio por un guion bajo, pero no es lo que necesito.
Espero haber sido más claro.
Salud OS
Eso se resuelve con un caracter ascii invicible.:D
Hola egopolice, que yo sepa es así como funciona, la forma que se me ocurre para que te separe tomando en cuenta los espacios es utilizando QuoteChar.
StringList.QuoteChar := ';';
StringList.Delimiter := ' ';
StringList.DelimitedText := ';Juan Pérez Martínez; ;jpm@isp.com; ;Compañia Universal;';
tu cadena tendría que estar de esa forma, egopolice sería mejor que reemplaces por la _ como lo estabas haciendo y despues esa _ por un espacio. O buscar otra forma sin usar Delimiter y DelimiterText.
Saluditos
egostar
07-08-2008, 17:04:53
Hola egopolice, que yo sepa es así como funciona, la forma que se me ocurre para que te separe tomando en cuenta los espacios es utilizando QuoteChar.
StringList.QuoteChar := ';';
StringList.Delimiter := ' ';
StringList.DelimitedText := ';Juan Pérez Martínez; ;jpm@isp.com; ;Compañia Universal;';
tu cadena tendría que estar de esa forma, egopolice sería mejor que reemplaces por la _ como lo estabas haciendo y despues esa _ por un espacio. O buscar otra forma sin usar Delimiter y DelimiterText.
Saluditos
Hola amiguita Caro, si, de hecho yo tenia esa opción, pero la verdad es que trataba de simplificar el código, digo, con Delphi puedes hacer todo lo que necesitas y mas :), solo que no nos sabemos todas sus bondades, con el código que posteo jhonny funciona tal y como lo soñe y con menos lineas de las que estaba haciendo, quiero decir, se cumplieron dos objetivos, simplificar el código y lograr el resultado esperado :)
Salud OS
roman
07-08-2008, 19:35:13
Amigo egostar, ¿qué tu versión de Delphi no cuenta con la propiedad StrictDelimiter (http://www.clubdelphi.com/foros/showpost.php?p=160310&postcount=10) para el StringList?
// Saludos
egostar
07-08-2008, 19:41:59
Amigo egostar, ¿qué tu versión de Delphi no cuenta con la propiedad StrictDelimiter (http://www.clubdelphi.com/foros/showpost.php?p=160310&postcount=10) para el StringList?
// Saludos
Description
Use this property to specify whether the Delimiter is the only value used within the DelimitedText property. If set to True, individual strings in DelimitedText are separated only by the character that is the value of Delimiter. If set to False, individual strings in DelimitedText can be separated by a space, a non-printable character, or the character that is the value of Delimiter.
:o
Salud OS
seoane
07-08-2008, 23:20:59
:D En defensa de egostar hay que decir que la propiedad StrictDelimiter es relativamente reciente. Yo la vi por primera vez en el turbo, en delphi 7 no existía
egostar
08-08-2008, 00:20:44
:D En defensa de egostar hay que decir que la propiedad StrictDelimiter es relativamente reciente. Yo la vi por primera vez en el turbo, en delphi 7 no existía
Gracias amigo seoane por esa defensa a mi orgullo herido :( :)
Salud OS
roman
08-08-2008, 01:30:49
Oigan, yo no lo decía con ánimo de herir orgullos eh? Por eso cité el mensaje de Seoane, dónde queda claro que yo tampoco sabía de esa propiedad :)
// Saludos
egostar
08-08-2008, 01:46:54
Oigan, yo no lo decía con ánimo de herir orgullos eh? Por eso cité el mensaje de Seoane, dónde queda claro que yo tampoco sabía de esa propiedad :)
// Saludos
Ah bueno, siendo así me siento mejor :)
Salud OS
JoseFco
08-08-2008, 02:34:35
Ah bueno, siendo así me siento mejor :)
Salud OS
Si amigo sientate mejor.:D:D:D
Cita:
Empezado por roman Ver Mensaje
Amigo egostar, ¿qué tu versión de Delphi no cuenta con la propiedad StrictDelimiter para el StringList?
// Saludos
yo tenia el mismo problema, quería que los espacios no se tomaran como delimitador excelente comentario roman gracias
Casimiro Notevi
19-07-2014, 12:31:20
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)
Es de hace 6 años ;)
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.