powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Read чтение до пробела
11 сообщений из 11, страница 1 из 1
Read чтение до пробела
    #40059760
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В консоли / текстовом файле есть строка
Код: pascal
1.
1 A B


Вопрос можно ли A и B считать в разные переменные?

Код
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var
  LInt: Integer;
  LStr1: string;
  LStr2: string;
begin
  Read(LInt, LStr1, LStr2);
  Writeln('LInt: ', LInt);
  Writeln('LStr1: "', LStr1, '"');
  Writeln('LStr2: "', LStr2, '"');
end.

Дает такой результат
Код: plaintext
1.
2.
3.
4.
1 A B
LInt: 1
LStr1: " A B"
LStr2: ""
Т.е. в первую стоку попадает даже лидирующий пробел.

Про считать сразу всю строку, а потом вызвать Str.Split(' ') знаю. Интересно можно ли заставить работать Read()?

С уважением, Vasilisk
...
Рейтинг: 0 / 0
Read чтение до пробела
    #40059765
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а readln?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Read чтение до пробела
    #40059779
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
а readln?
Аналогично
...
Рейтинг: 0 / 0
Read чтение до пробела
    #40059780
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.04.2021 13:56, _Vasilisk_ пишет:
>
> Аналогично
>

а через запятые, или точку с запятой?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Read чтение до пробела
    #40059830
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос снят. Никак
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
function ReadAnsiLineEx2(var t: TTextRec; buf: Pointer; maxLen: Integer; var Count: Integer): Pointer;
var
  c : Byte;
  eof: Boolean;
  p : PByte;
begin
  if t.MBCSLength <> 0 then
    Exit(ReadAnsiLineEx(t, buf, maxLen, Count, t.CodePage));

  Result := @t;
  Count := 0;

  if t.Mode <> fmInput then
    if not TryOpenForInput(t) then
      exit;

  if maxLen <= 0 then Exit;

  p := PByte(buf);
  while (maxLen > 0) do
  begin
    c := _ReadByte(t, eof);
    if eof then Exit;
    if c = cLF then
    begin
      Dec(t.BufPos);
      Exit;
    end
    else if c = cCR then
    begin
      c := _ReadByte(t, eof);
      if (c = cEOF) then Exit;
      if c = cLF then
      begin
        _PushCRLF(t);
        Exit;
      end
      else
      Dec(t.BufPos);
      continue;
    end
    else
    begin
      p^ := c;
      Inc(p);
      Dec(maxLen);
      inc(Count);
    end;
  end;
end;

Только три условия выхода: Eof, CR, LF
...
Рейтинг: 0 / 0
Read чтение до пробела
    #40059840
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Вопрос снят. Никак
сломали TurboPascal, сволочи
...
Рейтинг: 0 / 0
Read чтение до пробела
    #40059871
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
var LInt:integer;
     LStr1,LStr2: CHAR;   // <-----


А потом уже read(); Read() для строки - все в строку и запихнет.
...
Рейтинг: 0 / 0
Read чтение до пробела
    #40059900
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
сломали TurboPascal, сволочи
Не уверен, что в Паскале было по другому
...
Рейтинг: 0 / 0
Read чтение до пробела
    #40060004
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

Вопрос снят. Никак


Я попросил бы!

mReadln.txt

Код: pascal
1.
1 A B C



mReadln.pas


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
program mReadln;

{$M $4000, 0, 0}

uses
  Crt, Dos;

var
  mrFile: Text;

  sBuffer: string;

  pCount: Integer;

  mChar: Char;

begin
  ClrScr;

  Assign(mrFile, ParamStr(1));

  {$I-}

  Reset(mrFile);

  {$I+}

  if IOResult = 0 then
    begin
      Readln(mrFile, sBuffer);

      Close(mrFile);

      SwapVectors;

      Exec(ParamStr(0), sBuffer);

      SwapVectors;
    end

  else
    for pCount := 1 to ParamCount do
      begin
        sBuffer := Copy(ParamStr(pCount), 1, 1);

        mChar := sBuffer[1];

        if mChar in ['0'..'9'] then
          Writeln('Is int value: ', ParamStr(pCount));

        if UpCase(mChar) in ['A'..'Z'] then
          Writeln('Is str value: ', ParamStr(pCount));
      end;
end.




Alt + F5

Код: pascal
1.
2.
3.
4.
Is int value: 1
Is str value: A
Is str value: B
Is str value: C



Вот, что водка жывотворящая в пн. делает.

з.ы. Память уже не та, поэтому вытаскивал Char из String отдельно.

з.з.ы. Запуск mReadln.exe mReadln.txt
...
Рейтинг: 0 / 0
Read чтение до пробела
    #40060105
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPC
Я попросил бы!
Сравни это
LocksmithPC
Код: pascal
1.
Readln(mrFile, sBuffer);

с этим
_Vasilisk_
Код: pascal
1.
Read(LInt, LStr1, LStr2);

Т.е. в паскале идея та же - читаем всю строку, а потом парсим по разделителю. А для входной строки
Код: pascal
1.
123 abc xyz

твой код еще и работать не будет
...
Рейтинг: 0 / 0
Read чтение до пробела
    #40060160
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_


Код: pascal
1.
123 abc xyz



твой код еще и работать не будет



Нихрена ты в прыжке умеешь как!

И почему не будет? Анализ считанных данных переделаю и получу все тоже самое.


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
program mReadln;

{$M $4000, 0, 0}

uses
  Crt, Dos;

var
  mrFile: Text;

  pCount: Integer;

  sBuffer: string;
  iBuffer: Integer;
  iError: Integer;
  

begin
  ClrScr;

  Assign(mrFile, ParamStr(1));

  {$I-}

  Reset(mrFile);

  {$I+}

  if IOResult = 0 then
    begin
      Readln(mrFile, sBuffer);

      Close(mrFile);

      SwapVectors;

      Exec(ParamStr(0), sBuffer);

      SwapVectors;
    end

  else
    for pCount := 1 to ParamCount do
      begin
        sBuffer := ParamStr(pCount);

        Val(sBuffer, iBuffer, iError);

        if iError = 0 then
          Writeln('Is int value: ', iBuffer)

        else
          Writeln('Is str value: ', sBuffer);

      end;
end.


...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Read чтение до пробела
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]