Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Memo alterado juntar líneas impar y par (https://www.clubdelphi.com/foros/showthread.php?t=95451)

bulc 03-11-2021 11:32:17

Memo alterado juntar líneas impar y par
 
He aquí cómo quito líneas vacías en un Memo, y coloco las líneas pares con las impares. La secuencia original es: Linea vacía, Linea llena, Línea llena... y quiero añadir la tres a la dos. No sé si me explico.
El caso es que me gustaría usar un TStringList en lugar de dos TMemo. Seguro que se puede mejorar. Y es lo que propongo.
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject); // Usa dos TMemo: Memo1 y Memo2.
Var
   I: Integer;
begin
Memo2.Lines.Clear;
if (Memo1.Lines[0]='') then  Memo1.Lines.Delete(0);  // Corchete y paréntesis.
for I:= 0 to Memo1.Lines.Count - 1 do
    if (Memo1.Lines[i]='')     then
         Memo1.Lines.Delete(I) ;
ShowMessage ('Lineas Memo1: ' +  IntToStr (Memo1.Lines.Count ) );
for I:= 0 to Memo1.Lines.Count - 1 do
    if ( I Mod 2 = 0 ) then
        Memo2.Lines.Add( Memo1.Lines[i] + Memo1.Lines[I+1]   ) ;
        // Funciona bastante bien.

movorack 03-11-2021 14:03:36

¡Hola, bulc!

No se si te logro comprender del todo lo que necesitas.

Código Delphi [-]
function TForm1.getLines2(Lines1: TStrings): TStrings;
  var
    i: integer;
begin
  Result := TStringList.Create;

  if (Lines1[0]='') then
    Lines1.Delete(0);  // Corchete y paréntesis.

  for I:= 0 to Lines1.Count - 1 do
    if (Lines1[i]='') then
      Lines1.Delete(I) ;

  ShowMessage ('Lines1: ' +  IntToStr (Lines1.Count ) );

  for I:= 0 to Lines1.Count - 1 do
    if ( I Mod 2 = 0 ) then
      Result.Add(Lines1[i] + Lines1[I+1]) ;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo2.Lines.Assign(getLines2(Memo1.Lines));
end;

engranaje 03-11-2021 15:59:43

Me pasa igual que a Movorack y no tengo muy claro haber entendido bien. En mi caso entendí que te refieres a algo similar a esto:


Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
 lista: Tstringlist;
  i:integer;
begin
   lista:= tstringlist.create;
   try
      lista.LoadFromFile('C:\Prueba\entrada.txt');
      for i:= (lista.count-1) downto 0 do
         if lista[i] = '' then 
            lista.Delete(i);

      for i:= 0 to (lista.count - 1) do
         if ((i mod 2) = 0) and (i < (lista.count -1))then
            lista[i] :=  lista[i] + lista[i+1];

      lista.SaveToFile('C:\Prueba\salida.txt');
   finally
      lista.free;
   end;
end;


Para poder probarlo de forma fácil cargo los datos del Stringlist desde un fichero entrada.txt en el que puedes meter las líneas como quieras y después de procesarlo guardo el resultado en un fichero salida.txt


La franja horaria es GMT +2. Ahora son las 05:58:42.

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