PDA

Ver la Versión Completa : Consulta: Como eliminar un de un Widestring??


ungrande87
06-02-2013, 19:54:17
Estoy trabajando con Delphi 7 y quería saber como eliminar un renglón de un widestring.

La cosa seria mas o menos así supongamos que tenemos:

manzana
naranja
pera
durazno

y quisiera eliminar pera, cosa que cuando lo recorra nuevamente no me aparezca el espacio vació.

Así me aparecía a mi:

manzana
naranja

durazno.

Espero puedan ayudarme. Gracias

dec
06-02-2013, 20:10:02
Hola,

¿De dónde sale la lista de frutas?

ungrande87
06-02-2013, 20:13:58
Hola,

¿De dónde sale la lista de frutas?

de un campo memo ej:

var
frutas: widestring;

begin
frutas := TMemo1.Text;
.......

maeyanes
06-02-2013, 20:22:29
Hola...

La clase TMemo contiene una propiedad llamada Lines la cual es del tipo TString. Conociendo esto, puedes hacer algo como:


Memo1.Lines.Delete(2); // Borramos la línea con la palabra Pera



Saludos...

ungrande87
06-02-2013, 20:28:24
Hola...

La clase TMemo contiene una propiedad llamada Lines la cual es del tipo TString. Conociendo esto, puedes hacer algo como:


Memo1.Lines.Delete(2); // Borramos la línea con la palabra Pera



Saludos...

Entiendo lo que me decís amigo, pero igual necesito borrarla del widestring no del Memo.

Theluar
06-02-2013, 20:29:48
recomiendo usar el metodo de la burbuja es muy comun y sencillo, links(aqui (http://www.clubdelphi.com/foros/showthread.php?t=66588))

dec
06-02-2013, 20:30:05
Hola,

Hola...

La clase TMemo contiene una propiedad llamada Lines la cual es del tipo TString. Conociendo esto, puedes hacer algo como:


Memo1.Lines.Delete(2); // Borramos la línea con la palabra Pera



Saludos...

Incluso algo así:


var
i : integer;
begin
for i := Memo1.Lines.Count - 1 downto 0 do
begin
if Memo1.Lines[ i ] = 'Pera' then
Memo1.Lines.Delete( i );
end;
end;


Si es que no estoy proponiendo alguna barbaridad...

Al González
06-02-2013, 20:30:14
Otra pregunta: ¿deseas poder eliminar una de las filas indicando tú su "índice" (0, 1, 2..) o indicando su contenido ('manzana', 'naranja'...)?

Las soluciones que te proponen maeyanes y dec son buenas, siempre que no te importe que la línea en cuestión también sea borrada del Memo. :) ^\||/

dec: con IndexOf te ahorras el ciclo for. ;)

ungrande87
06-02-2013, 20:41:10
Otra pregunta: ¿deseas poder eliminar una de las filas indicando tú su "índice" (0, 1, 2..) o indicando su contenido ('manzana', 'naranja'...)?

Las soluciones que te proponen maeyanes y dec son buenas, siempre que no te importe que la línea en cuestión también sea borrada del Memo. :) ^\||/

dec: con IndexOf te ahorras el ciclo for. ;)

Deseo eliminar una de las filas del widestring ya sea por el indice o contenido me da lo mismo. Gracias a todos los que colaboran.

Al González
06-02-2013, 20:47:26
Acabo de ver esto: [...] necesito borrarla del widestring no del Memo.

No estaría mal que ampliaras un poco tu consulta para entender bien lo que estás buscando. :)

Tienes la opción de usar las funciones nativas para cadenas de caracteres Pos, Delete y quizá Length. O también usar una lista de cadenas temporal:

Var
S :WideString;
begin
S := Memo1.Text; // Asignamos el texto de Memo1 a la variable S

With TStringList.Create Do // Creamos una lista de cadenas auxiliar
Try
Text := S; // Asignamos el texto de S a la lista de cadenas auxiliar
Delete (2); // Eliminamos de la lista auxiliar la tercera línea
S := Text; // Asignamos el texto resultante a la variable S
Finally
Free; // Destruimos la lista auxiliar
End;

ShowMessage (S); // Mostramos el resultado de la variable S

Saludos. :)

P.D. No es un trabajo escolar, ¿verdad? !!!:-|

nlsgarcia
07-02-2013, 02:19:22
ungrande87,


Estoy trabajando con Delphi 7 y quería saber como eliminar un renglón de un widestring.


Revisa este código:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

// Elimina una palabra del texto de entrada.
function DeleteWord(Word : string; ListWord : WideString) : string;
var
StrList : TStringList;
i : Integer;
begin
StrList := TStringList.Create;
StrList.Text := ListWord;
for i := StrList.Count-1 downto 0 do
if StrList[i] = Word then
StrList.Delete(i);
Result := StrList.Text;
StrList.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
AuxStr : WideString;
begin
AuxStr := Memo1.Text;
AuxStr := DeleteWord(Memo1.SelText,AuxStr);
ShowMessage(AuxStr);
Memo1.SelLength := 0;
end;

end.

El código anterior asigna el texto de un control TMemo a una variable de tipo WideString y por medio de la función DeleteWord elimina un texto seleccionado en la variable mencionada.

Nota: En la función DeleteWord la variable Word representa una línea del control TMemo formada por una o más palabras.

Espero sea útil :)

Nelson.

Neftali [Germán.Estévez]
07-02-2013, 09:54:55
y quisiera eliminar pera, cosa que cuando lo recorra nuevamente no me aparezca el espacio vació.


Me imagino que debes estar eliminando el texto y te debe estar quedando por detrás los caracteres de FINLIEA y SALTOCARRO.
Creo que si eliminas esos 2 caracteres que hay después de la Pera (#13#10) eliminarás también el salto de línea.

Pero tal y como ha comentado alguien, depende de cómo lo estés haciendo. Si pasas el texto a un TStrings, por ejemplo, y eliminas líneas no hará falta; Si la eliminación la estás haciendo como si fuera todo un string seguido, deberás eliminar los caracteres que te comento.