В настоящее время мне поручено перевести старый скрипт на паскале на python. Проблема в том, что у меня нет опыта работы с паскалем ... До сих пор все прошло хорошо (большая часть сценария довольно понятна), но теперь я столкнулся с небольшим фрагментом кода, который просто не могу понять. из:
# some other code here...
type MeasurementPoint = record
lambda : double;
value : double;
end;
# some more code...
procedure foo(MyFileName: string, somemoreargs):
var somevars: integer;
somemorevars: double;
temp: MeasurementPoint;
# even more code...
i:= 0;
Assign(MyInFile,MyFileName);
Reset(MyInFile);
repeat
Inc(i);
SetLength(Reflexion, i);
readln(MyInFile, temp.lambda, temp.value);
Reflexion[i-1]:=temp;
until EoF(MyInFile);
Close(MyInFile);
Я просто не могу обернуться вокруг того, что эта часть кода должна делать ...
Я так понимаю, что полный файл MyInFile
читается строка за строкой, и что каждая строка содержит два значения, а именно 'lambda'
и 'value'
, которые извлекаются как двойные.
Согласно паскаль-вики, record
- это контейнер, способный хранить объекты разных типов и логически группировать их (можно ли сравнить со словарем в python?). Если я правильно понимаю SetLength
, он используется для определения длины массива, что здесь имеет смысл. i
увеличивается при каждом чтении строки, поэтому длина temp
увеличивается, чтобы соответствовать числу пар lambda
и value
, уже извлеченных из файла (пожалуйста, исправьте меня, если мои предположения неверны!) , Но я не понимаю, что должен делать остальной код, особенно Reflexion[i-1]:=temp
. Является ли Reflexion
объектом типа MeasurementPoint
длиной i-1? Или что эта часть означает? Почему lambda
и value
извлекаются как temp.lambda
и temp.value
? это автоматически соединяет их вместе в записи ...?
Если бы кто-нибудь мог мне помочь, объяснив это, я был бы очень признателен. И, конечно, если у вас есть идея, как это можно перевести на python 3.x, было бы еще лучше; -)