Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-10-2019
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
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
__________________
El malabarista.
Responder Con Cita
  #2  
Antiguo 29-10-2019
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.234
Poder: 20
ElKurgan Va camino a la fama
¿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

Última edición por ElKurgan fecha: 29-10-2019 a las 09:37:55.
Responder Con Cita
  #3  
Antiguo 29-10-2019
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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:


__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 29-10-2019
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.234
Poder: 20
ElKurgan Va camino a la fama
Thumbs up

Germán, eres un monstruo!

Gran código, si señor

Saludos
Responder Con Cita
  #5  
Antiguo 29-10-2019
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por ElKurgan Ver Mensaje
¿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?
__________________
El malabarista.
Responder Con Cita
  #6  
Antiguo 30-10-2019
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.234
Poder: 20
ElKurgan Va camino a la fama
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Impresion linea por linea en Impresora Termica oscarac Impresión 4 30-08-2017 08:57:36
Calcular saldo linea a linea fwhite Varios 1 27-02-2012 17:14:30
Impresion linea por linea en tiquete de caja Livey Impresión 2 21-12-2010 00:21:05
Traza linea por linea problemas zugazua2001 Varios 2 24-10-2005 08:16:32
¿Cómo borrar un grid sin tener que ir línea a línea? Isaac Varios 2 18-02-2004 16:13:14


La franja horaria es GMT +2. Ahora son las 09:23:45.


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
Copyright 1996-2007 Club Delphi