Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Consulta: Como eliminar un de un Widestring?? (https://www.clubdelphi.com/foros/showthread.php?t=82196)

ungrande87 06-02-2013 19:54:17

Consulta: Como eliminar un de un Widestring??
 
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

Cita:

Empezado por dec (Mensaje 454644)
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:

Código Delphi [-]
Memo1.Lines.Delete(2); // Borramos la línea con la palabra Pera


Saludos...

ungrande87 06-02-2013 20:28:24

Cita:

Empezado por maeyanes (Mensaje 454649)
Hola...

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

Código Delphi [-]
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

Tu pregunta no esta muy clara
 
recomiendo usar el metodo de la burbuja es muy comun y sencillo, links(aqui)

dec 06-02-2013 20:30:05

Hola,

Cita:

Empezado por maeyanes (Mensaje 454649)
Hola...

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

Código Delphi [-]
Memo1.Lines.Delete(2); // Borramos la línea con la palabra Pera


Saludos...

Incluso algo así:

Código Delphi [-]
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

Cita:

Empezado por Al González (Mensaje 454653)
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:
Cita:

Empezado por ungrande87 (Mensaje 454650)
[...] 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:
Código Delphi [-]
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,

Cita:

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

Revisa este código:
Código Delphi [-]
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

Cita:

Empezado por ungrande87 (Mensaje 454640)
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.


La franja horaria es GMT +2. Ahora son las 04:58:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi