Модератор: Модераторы
Cheb писал(а):TMemoryStream ?
со стандартного ввода поступают данные, за один заход боюсь что их не смогу обработать,
да еще когда со стандарнтного ввода данные поступают не могу конец файла поймать

Mayor писал(а):while not eof do - не срабатывает - чем можно заменить?

shade писал(а):Mayor писал(а):while not eof do - не срабатывает - чем можно заменить?
Попробуй заменить на while not seekeof do, только учти, что слово seek там не случайно... он пропускает все пробельные символы...
а никак стандартный ввод не приравнять к file of byte переменной?
  Reset(f);
  FileRec(f).Handle := StdInputHandle;
program project2;
{$APPTYPE CONSOLE}
{$mode objfpc}{$H+}
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { add your units here };
var
  si, so: THandleStream;
  sm: TMemoryStream;
begin
  si := THandleStream.Create(StdInputHandle);
  so := THandleStream.Create(StdOutputHandle);
  sm := TMemoryStream.Create;
  
  sm.LoadFromStream(si); // грузим в память
  
  so.CopyFrom(sm, sm.Size); // выводим в stdout
  
  sm.Free;
  so.Free;
  si.Free;
end.
program Project1;
{$mode objfpc}{$H+}
var ss: array of string;
    n: LongInt;
begin
  SetLength (ss, 0);
  n:=0;
  while not eof(Input) do
   begin
     SetLength(ss, n+1);
     Readln(ss[n]);
     inc(n)
   end;
   
  for n:=0 to High(ss) do Writeln(ss[n]);
  
end.program test;
var
  s: string;
  ch: char;
begin
  s := '';
  SetTextLineEnding(input, #13);
  while not eof do
  begin
    read(ch);
    s := s + ch;
  end;
  writeln(s);
end.program test;
{$mode objfpc}
function ReadInput: AnsiString;
var
  s: array of char;
  capacity: longint;
  RealLength: longint;
begin
  RealLength := 0;
  capacity := 1024;
  SetLength(s, capacity);
  SetTextLineEnding(input, #13);
  while not eof do
  begin
    if RealLength = capacity then
    begin
      SetLength(s, capacity + capacity div 4 + 1);
    end; // if
    read(s[RealLength]);
    Inc(RealLength);
  end;
  
  SetString(Result, @s[0], RealLength);
end;
var
  text: AnsiString;
begin
  text := ReadInput;
  writeln('Input size in bytes: ', Length(text));
  writeln('content:');
  write(text);
  writeln('----------------- end ---------------');
end.

да еще когда со стандарнтного ввода данные поступают не могу конец файла поймать
А он там вообще бывает, этот конец?
И вообще - кто пишет данные, которые ты получаешь через стандартный ввод?

v-t-l писал(а):2shade
В WinXP не работает.
Бинарные данные проходят не полностью.

Вернуться в Free Pascal Compiler
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1