Буферизация ввода в строку
Исправление ошибки вывода лишнего пробела при s.Println
This commit is contained in:
parent
f811066d7e
commit
6f158a6bef
|
|
@ -15,7 +15,7 @@ internal static class RevisionClass
|
|||
public const string Major = "3";
|
||||
public const string Minor = "9";
|
||||
public const string Build = "0";
|
||||
public const string Revision = "3436";
|
||||
public const string Revision = "3438";
|
||||
|
||||
public const string MainVersion = Major + "." + Minor;
|
||||
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%COREVERSION%=0
|
||||
%REVISION%=3436
|
||||
%REVISION%=3438
|
||||
%MINOR%=9
|
||||
%MAJOR%=3
|
||||
|
|
|
|||
|
|
@ -100,12 +100,13 @@
|
|||
if</code> – ëîãè÷åñêèå âûðàæåíèÿ;<code><br>
|
||||
w</code> – öèêëû ñ óñëîâèåì;<code><br>
|
||||
ñif</code> – öèêëû + ëîãè÷åñêèå âûðàæåíèÿ;<code><br>
|
||||
count</code> – переменные-счетчики;<code><br>
|
||||
count</code> – переменные-счетчики;<br>
|
||||
<code>mix</code> – смешанные задачи;<br>
|
||||
cc</code> – âëîæåííûå öèêëû;<code><br>
|
||||
p</code> – ïðîöåäóðû áåç ïàðàìåòðîâ;<code><br>
|
||||
pp</code> – ïðîöåäóðû ñ ïàðàìåòðàìè.
|
||||
</blockquote>
|
||||
<p>Для создания стандартного поля размера 9 x 11
|
||||
<p>Для создания стандартного поля размера 7 x 9
|
||||
èñïîëüçóåòñÿ ïðîöåäóðà <code><a name="StandardField">StandardField</a></code> áåç ïàðàìåòðîâ, à äëÿ ñîçäàíèÿ
|
||||
ïîëÿ ðàçìåðà N x M — ïðîöåäóðà <code><a name="Field">Field</a>(N,M)</code>.
|
||||
Ðîáîò ïðè ýòîì ïîìåùàåòñÿ â öåíòð ïîëÿ.</p>
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
3.9.0.3436
|
||||
3.9.0.3438
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
!define VERSION '3.9.0.3436'
|
||||
!define VERSION '3.9.0.3438'
|
||||
|
|
|
|||
|
|
@ -343,8 +343,12 @@ type
|
|||
|
||||
/// Стандартная подсистема ввода-вывода
|
||||
IOStandardSystem = class(IOSystem)
|
||||
state := 0; // 0 - нет символа в буфере char, 1 - есть символ в буфере char
|
||||
sym: integer; // буфер в 1 символ для моделирования Peek в консоли
|
||||
//state := 0; // 0 - нет символа в буфере char, 1 - есть символ в буфере char
|
||||
//sym: integer; // буфер в 1 символ для моделирования Peek в консоли
|
||||
// SSM 28/02/24 - новая концепция для считывания из консоли без редиректа: буфер на одну строку
|
||||
read_buf := new char[0];
|
||||
rblen := 0;
|
||||
rbpos := 0;
|
||||
buf: array of char := new char[buflen];
|
||||
pos := 0;
|
||||
realbuflen := -1; // только вначале
|
||||
|
|
@ -352,6 +356,7 @@ type
|
|||
public
|
||||
constructor Create;
|
||||
procedure ReadNextBuf;
|
||||
procedure ReadNextConsoleBuf;
|
||||
function peek: integer; virtual;// использует state и sym (стар) или буфер buf (нов)
|
||||
function read_symbol: char; virtual;// использует state и sym (стар) или буфер buf (нов)
|
||||
procedure read(var x: integer); virtual;
|
||||
|
|
@ -5452,6 +5457,14 @@ begin
|
|||
pos := 0;
|
||||
end;
|
||||
|
||||
procedure IOStandardSystem.ReadNextConsoleBuf;
|
||||
begin
|
||||
var sbuf := Console.ReadLine + NewLine;
|
||||
read_buf := sbuf.ToCharArray;
|
||||
rbpos := 0;
|
||||
rblen := read_buf.Length;
|
||||
end;
|
||||
|
||||
|
||||
var
|
||||
_IsPipedRedirectedQuery := False;
|
||||
|
|
@ -5492,14 +5505,18 @@ begin
|
|||
if not console_alloc then
|
||||
AllocConsole;
|
||||
// SSM 29.11.14
|
||||
if state = 1 then // в sym - символ, считанный предыдущим Peek
|
||||
{if state = 1 then // в sym - символ, считанный предыдущим Peek
|
||||
Result := sym
|
||||
else // в sym ничего нет
|
||||
begin
|
||||
state := 1;
|
||||
sym := Console.Read(); // считываение в буфер из одного символа
|
||||
Result := sym;
|
||||
end;
|
||||
end; }
|
||||
// SSM 28.02.23
|
||||
if rbpos >= rblen then // буфер строки пуст
|
||||
ReadNextConsoleBuf;
|
||||
Result := integer(read_buf[rbpos]);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
@ -5518,7 +5535,7 @@ begin
|
|||
if not console_alloc then
|
||||
AllocConsole;
|
||||
// SSM 29.11.14
|
||||
if state = 1 then // в sym - символ, считанный предыдущим Peek
|
||||
{if state = 1 then // в sym - символ, считанный предыдущим Peek
|
||||
begin
|
||||
state := 0;
|
||||
Result := char(sym);
|
||||
|
|
@ -5526,7 +5543,12 @@ begin
|
|||
end
|
||||
else // в sym ничего нет
|
||||
Result := char(Console.Read());
|
||||
exit;
|
||||
exit;}
|
||||
// SSM 28.02.23
|
||||
if rbpos >= rblen then // буфер строки пуст
|
||||
ReadNextConsoleBuf;
|
||||
Result := read_buf[rbpos];
|
||||
rbpos += 1;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
@ -5608,14 +5630,25 @@ begin
|
|||
begin
|
||||
if not console_alloc then
|
||||
AllocConsole;
|
||||
if state = 1 then
|
||||
{if state = 1 then
|
||||
begin
|
||||
state := 0;
|
||||
Result := char(sym) + Console.ReadLine;
|
||||
sym := -1;
|
||||
end
|
||||
else
|
||||
Result := Console.ReadLine;
|
||||
Result := Console.ReadLine;}
|
||||
|
||||
// SSM 28.02.23
|
||||
if rbpos >= rblen then // буфер строки пуст
|
||||
ReadNextConsoleBuf;
|
||||
|
||||
// Проблема - там может уже оставаться 1 или 2 символа. Если так, то строка будет пустой!
|
||||
var remlen := rblen - rbpos - NewLine.Length;
|
||||
if remlen <= 0 then
|
||||
Result := ''
|
||||
else Result := string.Create(read_buf,rbpos,remlen);
|
||||
rbpos := rblen;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
@ -7206,36 +7239,42 @@ procedure Print(params args: array of object);
|
|||
begin
|
||||
if args.Length = 0 then
|
||||
exit;
|
||||
if PrintDelimDefault<>'' then
|
||||
for var i := 0 to args.length - 1 do
|
||||
for var i := 0 to args.length - 1 do
|
||||
if PrintDelimDefault<>'' then
|
||||
Write(args[i], PrintDelimDefault)
|
||||
else
|
||||
for var i := 0 to args.length - 1 do
|
||||
Write(args[i])
|
||||
else Write(args[i]);
|
||||
end;
|
||||
|
||||
procedure Println(params args: array of object);
|
||||
begin
|
||||
Print(args);
|
||||
Writeln;
|
||||
if args.Length = 0 then
|
||||
exit;
|
||||
for var i := 0 to args.length - 2 do
|
||||
if PrintDelimDefault<>'' then
|
||||
Write(args[i], PrintDelimDefault)
|
||||
else Write(args[i]);
|
||||
Writeln(args[args.Length-1]);
|
||||
end;
|
||||
|
||||
procedure Print(f: Text; params args: array of object);
|
||||
begin
|
||||
if args.Length = 0 then
|
||||
exit;
|
||||
if PrintDelimDefault<>'' then
|
||||
for var i := 0 to args.length - 1 do
|
||||
for var i := 0 to args.length - 1 do
|
||||
if PrintDelimDefault<>'' then
|
||||
Write(f, args[i], PrintDelimDefault)
|
||||
else
|
||||
for var i := 0 to args.length - 1 do
|
||||
Write(f, args[i])
|
||||
else Write(f, args[i])
|
||||
end;
|
||||
|
||||
procedure Println(f: Text; params args: array of object);
|
||||
begin
|
||||
Print(f, args);
|
||||
Writeln(f);
|
||||
if args.Length = 0 then
|
||||
exit;
|
||||
for var i := 0 to args.length - 2 do
|
||||
if PrintDelimDefault<>'' then
|
||||
Write(f, args[i], PrintDelimDefault)
|
||||
else Write(f, args[i]);
|
||||
Writeln(f, args[args.Length-1]);
|
||||
end;
|
||||
|
||||
procedure Serialize(fileName: string; obj: object);
|
||||
|
|
|
|||
|
|
@ -343,8 +343,12 @@ type
|
|||
|
||||
/// Стандартная подсистема ввода-вывода
|
||||
IOStandardSystem = class(IOSystem)
|
||||
state := 0; // 0 - нет символа в буфере char, 1 - есть символ в буфере char
|
||||
sym: integer; // буфер в 1 символ для моделирования Peek в консоли
|
||||
//state := 0; // 0 - нет символа в буфере char, 1 - есть символ в буфере char
|
||||
//sym: integer; // буфер в 1 символ для моделирования Peek в консоли
|
||||
// SSM 28/02/24 - новая концепция для считывания из консоли без редиректа: буфер на одну строку
|
||||
read_buf := new char[0];
|
||||
rblen := 0;
|
||||
rbpos := 0;
|
||||
buf: array of char := new char[buflen];
|
||||
pos := 0;
|
||||
realbuflen := -1; // только вначале
|
||||
|
|
@ -352,6 +356,7 @@ type
|
|||
public
|
||||
constructor Create;
|
||||
procedure ReadNextBuf;
|
||||
procedure ReadNextConsoleBuf;
|
||||
function peek: integer; virtual;// использует state и sym (стар) или буфер buf (нов)
|
||||
function read_symbol: char; virtual;// использует state и sym (стар) или буфер buf (нов)
|
||||
procedure read(var x: integer); virtual;
|
||||
|
|
@ -5452,6 +5457,14 @@ begin
|
|||
pos := 0;
|
||||
end;
|
||||
|
||||
procedure IOStandardSystem.ReadNextConsoleBuf;
|
||||
begin
|
||||
var sbuf := Console.ReadLine + NewLine;
|
||||
read_buf := sbuf.ToCharArray;
|
||||
rbpos := 0;
|
||||
rblen := read_buf.Length;
|
||||
end;
|
||||
|
||||
|
||||
var
|
||||
_IsPipedRedirectedQuery := False;
|
||||
|
|
@ -5492,14 +5505,18 @@ begin
|
|||
if not console_alloc then
|
||||
AllocConsole;
|
||||
// SSM 29.11.14
|
||||
if state = 1 then // в sym - символ, считанный предыдущим Peek
|
||||
{if state = 1 then // в sym - символ, считанный предыдущим Peek
|
||||
Result := sym
|
||||
else // в sym ничего нет
|
||||
begin
|
||||
state := 1;
|
||||
sym := Console.Read(); // считываение в буфер из одного символа
|
||||
Result := sym;
|
||||
end;
|
||||
end; }
|
||||
// SSM 28.02.23
|
||||
if rbpos >= rblen then // буфер строки пуст
|
||||
ReadNextConsoleBuf;
|
||||
Result := integer(read_buf[rbpos]);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
@ -5518,7 +5535,7 @@ begin
|
|||
if not console_alloc then
|
||||
AllocConsole;
|
||||
// SSM 29.11.14
|
||||
if state = 1 then // в sym - символ, считанный предыдущим Peek
|
||||
{if state = 1 then // в sym - символ, считанный предыдущим Peek
|
||||
begin
|
||||
state := 0;
|
||||
Result := char(sym);
|
||||
|
|
@ -5526,7 +5543,12 @@ begin
|
|||
end
|
||||
else // в sym ничего нет
|
||||
Result := char(Console.Read());
|
||||
exit;
|
||||
exit;}
|
||||
// SSM 28.02.23
|
||||
if rbpos >= rblen then // буфер строки пуст
|
||||
ReadNextConsoleBuf;
|
||||
Result := read_buf[rbpos];
|
||||
rbpos += 1;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
@ -5608,14 +5630,25 @@ begin
|
|||
begin
|
||||
if not console_alloc then
|
||||
AllocConsole;
|
||||
if state = 1 then
|
||||
{if state = 1 then
|
||||
begin
|
||||
state := 0;
|
||||
Result := char(sym) + Console.ReadLine;
|
||||
sym := -1;
|
||||
end
|
||||
else
|
||||
Result := Console.ReadLine;
|
||||
Result := Console.ReadLine;}
|
||||
|
||||
// SSM 28.02.23
|
||||
if rbpos >= rblen then // буфер строки пуст
|
||||
ReadNextConsoleBuf;
|
||||
|
||||
// Проблема - там может уже оставаться 1 или 2 символа. Если так, то строка будет пустой!
|
||||
var remlen := rblen - rbpos - NewLine.Length;
|
||||
if remlen <= 0 then
|
||||
Result := ''
|
||||
else Result := string.Create(read_buf,rbpos,remlen);
|
||||
rbpos := rblen;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
@ -7206,36 +7239,42 @@ procedure Print(params args: array of object);
|
|||
begin
|
||||
if args.Length = 0 then
|
||||
exit;
|
||||
if PrintDelimDefault<>'' then
|
||||
for var i := 0 to args.length - 1 do
|
||||
for var i := 0 to args.length - 1 do
|
||||
if PrintDelimDefault<>'' then
|
||||
Write(args[i], PrintDelimDefault)
|
||||
else
|
||||
for var i := 0 to args.length - 1 do
|
||||
Write(args[i])
|
||||
else Write(args[i]);
|
||||
end;
|
||||
|
||||
procedure Println(params args: array of object);
|
||||
begin
|
||||
Print(args);
|
||||
Writeln;
|
||||
if args.Length = 0 then
|
||||
exit;
|
||||
for var i := 0 to args.length - 2 do
|
||||
if PrintDelimDefault<>'' then
|
||||
Write(args[i], PrintDelimDefault)
|
||||
else Write(args[i]);
|
||||
Writeln(args[args.Length-1]);
|
||||
end;
|
||||
|
||||
procedure Print(f: Text; params args: array of object);
|
||||
begin
|
||||
if args.Length = 0 then
|
||||
exit;
|
||||
if PrintDelimDefault<>'' then
|
||||
for var i := 0 to args.length - 1 do
|
||||
for var i := 0 to args.length - 1 do
|
||||
if PrintDelimDefault<>'' then
|
||||
Write(f, args[i], PrintDelimDefault)
|
||||
else
|
||||
for var i := 0 to args.length - 1 do
|
||||
Write(f, args[i])
|
||||
else Write(f, args[i])
|
||||
end;
|
||||
|
||||
procedure Println(f: Text; params args: array of object);
|
||||
begin
|
||||
Print(f, args);
|
||||
Writeln(f);
|
||||
if args.Length = 0 then
|
||||
exit;
|
||||
for var i := 0 to args.length - 2 do
|
||||
if PrintDelimDefault<>'' then
|
||||
Write(f, args[i], PrintDelimDefault)
|
||||
else Write(f, args[i]);
|
||||
Writeln(f, args[args.Length-1]);
|
||||
end;
|
||||
|
||||
procedure Serialize(fileName: string; obj: object);
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -173,6 +173,14 @@ begin
|
|||
|
|
||||
end.
|
||||
|
||||
[grabc]
|
||||
uses GraphABC;
|
||||
|
||||
begin
|
||||
|
|
||||
end.
|
||||
|
||||
|
||||
[wf]
|
||||
{$reference System.Windows.Forms.dll}
|
||||
{$reference System.Drawing.dll}
|
||||
|
|
|
|||
Loading…
Reference in a new issue