Я хотел бы сделать процедуру, которая принимает массив коротких строк в качестве аргумента
procedure f(const a, b: Array of shortstring);
Я хотел бы вызвать это с массивами известной длины и короткими строками известной длины, например,
var
A, B: array[1..2] of string[5];
C, D: array[1..40] of string[12];
begin
f(A,B);
f(C,D);
end;
Это приводит к ошибке компилятора E2008 Несовместимые типы.Это почему?Могу ли я написать процедуру, которая может принимать массивы коротких строк (любой длины массивов / строк)?
Зачем использовать короткую строку?
Короткие шорты являются полями в существующей записи,Есть много этих записей с тысячами коротких строк.В попытке перенести данные из Turbo Power B-Tree Filer в базы данных SQL одним шагом является преобразование записи в набор данных и обратно в запись, чтобы убедиться, что все поля правильно преобразованы в обоих направлениях.Я использовал CompareMem
в записях, чтобы проверить это, но он не предоставляет достаточно информации о том, в каком поле находится ошибка преобразования. Таким образом, была создана небольшая программа, которая из определения записи может сгенерировать код для сравнения двухзаписей.Именно для этого генератора кода мне нужна была функция для сравнения коротких строк.В итоге получилось использовать CompareMem
на коротких струнах.