var c: char; s: string; t: text;begin s := ''; AssignFile(t, ''); Reset(t); while not eof(t) do begin Read(t, c); s := s + c; end;end.
Can't you use TIOStream?
program project1;{$mode objfpc}{$H+}uses Classes, SysUtils, iostream;var mem: TMemoryStream; ios: TIOStream;begin ios := TIOStream.Create(iosInput); mem := TMemoryStream.Create; mem.CopyFrom(ios, 0); ios.Free; WriteLn(Format('Size of mem: %d', [mem.Size])); mem.Free;end.
$ ls | ./project1Size of mem: 0$ ls | wc -c223
uses iostream, ...;var Buffer: string; Count: Integer; MyStream: TMemoryStream; InputStream: TIOStream;begin MyStream := TMemoryStream.Create; try InputStream := TIOStream.Create(iosInput); SetLength(Buffer, 10000); repeat Count := InputStream.Read(Buffer[1], Length(Buffer)); if Count > 0 then MyStream.Write(Buffer[1], Count); until Count = 0; finally InputStream.Free; end; ...
Is there a way to access standard input as a stream?
MyStream := THandleStream.Create(StdInputHandle);