Если вы хотите узнать, была ли строка заполнена или равна нулю, лучше всего добавить явный флаг, который вы использовали бы, чтобы пометить реальные строки из удаленных, например, в файлах DBF. Не заполненные ячейки могут считаться такими же, как и удаленные, если вы не хотите изменять длину массива в прогоне.
type UserRecord = record
Forename : string[20];
Surname : string[20];
Username : string[20];
Password : string[20];
gender : boolean;
FreeSpot : Boolean;
end;
После этого добавления вы должны инициализировать переменные, так что они не будут содержать неверные данные или даже мусор. Вы должны запустить цикл через буфер хранения, и отметьте все неиспользованные как
for I := Low(UserArray) to High(UserArray) do
deleteRecord(I); // initialize buffer so we can start saving data
procedure deleteRecord(const I: integer);
begin
UserArray[ I ].FreeSpot := true;
end;
После того, что вы можете сделать спасительный ряд данных рутина, как, что:
// returns the array index where the data was stored, or -1 if did not saved
function storeRecord(const data: UserRecord): integer;
begin
for Result := Low(UserArray) to High(UserArray) do
if UserArray[ Result ].FreeSpot then
begin
UserArray[ Result ] := data;
UserArray[ Result ].FreeSpot := false;
Exit();
end;
Result := -1; // out of the loop - found no free cell to take
end;
В случае, если вы не можете добавить поля к записи вы можете попробовать
type UserRecord = record
Forename : string[20];
Surname : string[20];
Username : string[20];
Password : string[20];
gender : boolean;
end;
UserRecordSlot = record
Data : UserRecord;
FreeSpot : Boolean;
end;
UserArray : array of UserRecordSlot;
// returns the array index where the data was stored, or -1 if did not saved
function storeRecord(const data: UserRecord): integer;
begin
for Result := Low(UserArray) to High(UserArray) do
if UserArray[ Result ].FreeSpot then
begin
UserArray[ Result ].Data := data;
UserArray[ Result ].FreeSpot := false;
Exit();
end;
Result := -1; // out of the loop - found no free cell to take
end;
не использовать массивы фиксированной длины. Используйте динамические массивы 'TList'. Не используйте короткие струны. Используйте 'string'. Кроме того, пол не является 'Boolean' !!! –
Когда вы используете 'файл записи', вы должны объявить свою запись как« упакованную », иначе вы будете сохранять хлам. –
О, и прекратите использовать файл записи! –