Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Una facil: Como leo de stdin linea por linea? (https://www.clubdelphi.com/foros/showthread.php?t=94271)

mamcx 28-10-2019 21:50:58

Una facil: Como leo de stdin linea por linea?
 
Por fin me toco llorar a mi! Llevo un rato desempolvando mi delphi y no veo como hacer que me funcione la lectura directa de stdin, como en:

Código:

ls | AppDelphi.exe
Logro que me lea la primera linea:

Código Delphi [-]
program A2Test;

var
  line: String;
begin
  ReadLn(line);
  writeln(line);
end.

end.

Pero no veo como hacer el ciclo y leer todas las que vengan.

Ya busque un monton en google y lo que hay es para redireccionar output de llamada de delphi a linea de comandos. Lo que busco es pasar el StdOut de un comando a el StdIn de la app en delphi/freepascal

ElKurgan 29-10-2019 09:28:34

¿Estás usando lázarus?

A lo mejor este enlace te da alguna idea, pero no se si es exactamente lo que buscas...

De todas formas (no tengo Linux a mano), desde la línea de comandos me funciona (más o menos) con este código:

Código Delphi [-]
while not EOF do begin

  ReadLn(linea);
  writeln(linea);

end;

Eso si, termino con un Ctrl+C

Un saludo

Neftali [Germán.Estévez] 29-10-2019 12:31:23

En Delphi un programilla como este debería cubir lo que necesitas:
Código Delphi [-]

program PLeerEntradaStd;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  Vcl.Forms, Winapi.Windows, System.SysUtils, System.Classes, VCL.Dialogs;

var
  Buffer: array[0..1000] of Byte;
  StdIn: TStream;
  Count: Integer;
  i: integer;
  Str: string;
begin
  try
    StdIn := THandleStream.Create(GetStdHandle(STD_INPUT_HANDLE));
    Count := StdIn.Read(Buffer, 1000);
    StdIn.Free;
    for i := 0 to (Count - 1) do begin
      Str := Str + Char(Buffer[i]);
    end;
    ShowMessage(Str);
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.


Una ejecución como esta devolverá el valor leído:



ElKurgan 29-10-2019 14:07:39

Germán, eres un monstruo!

Gran código, si señor

Saludos

mamcx 29-10-2019 17:29:18

Cita:

Empezado por ElKurgan (Mensaje 534144)
¿Estás usando lázarus?
Eso si, termino con un Ctrl+C

Un saludo

Si estoy con FPC. Hay forma de evitar el Ctrl-C?

ElKurgan 30-10-2019 07:30:01

Lo siento, no tengo lazarus. La prueba era con Delphi normal.

Lo decía porque en algunos foros hablan de los Pipes como forma de enlazaar procesos.

No se si estas páginas te serán de ayuda o no:

https://stackoverflow.com/questions/...n-stdout-pipes
https://forum.lazarus.freepascal.org...?topic=41936.0

Un saludo


La franja horaria es GMT +2. Ahora son las 18:38:50.

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