Чтение строковых данных отличается от чтения числовых данных в Паскале.
С числами инструкция Read
потребляет данные до тех пор, пока не достигнет пробела или конца файла.Теперь в этом случае пробел может быть символом пробела, символом табуляции, символом EOL.Поэтому, если в одной строке текста 2 числа, вы можете прочитать их одно за другим, используя два последовательных Read
s.
. Я полагаю, вы уже знали это.
И я считаю,Вы думали, что это будет работать так же со строками.Но это не так, вы не можете прочитать два строковых значения из одной строки текста, просто используя две последовательные инструкции Read
.Read
будет использовать весь текст до EOL или EOF.После чтения строковой переменной присваивается столько символов, сколько она может содержать, а остальные данные выбрасываются в забвение.В этом отношении он по существу эквивалентен ReadLn
.
Решение?Расположите все данные во входном файле в отдельных строках и лучше используйте ReadLn
s вместо всех Read
s.(Но я думаю, что последнее может быть ненужным, и перестановки входных данных может быть достаточно.)
В качестве альтернативы вам может понадобиться прочитать всю строку текста во временную строковую переменную, затем разделить ее вручную и назначитьчасти к соответствующим полям записи, не забывая также преобразовать числовые значения из string
в integer
.
Вы выбираете то, что вам больше подходит.