Спасибо! С нулями при добавлении новых записей помогло.
Насчет зависания программы, выяснилось, что это возникает во время обращения к функции IC_field. Заменил ее на рукописную и все заработало.
Для интересующихся привожу код функции. Чур ногами не пинать
function FindField(Strings:TStrings; fld:integer;Sign:char=#0):String;
Var i,j:integer;
strtmp:string;
begin
result:='';
strtmp:=inttostr(fld)+'#';
j:=length(strtmp);
for i := 4 to Strings.Count - 1 do
if copy(Strings.Strings[i],1,j)=strtmp then
// строка найдена
if Sign=#0
then Result:=copy(Strings.Strings[i],j+1,length(Strings.Strings[i]))
else // отыскиваю нужную букву
if POS('^'+Sign,Strings.Strings[i])<>0 then
begin
strtmp:=copy(Strings.Strings[i],POS('^'+Sign,Strings.Strings[i])+2,length(Strings.Strings[i]));
if POS('^',strtmp)<>0
then result:=copy(strtmp,1,POS('^',strtmp)-1)
else result:=strtmp;
end;
end;
Пример использования:
Var Strs:TStrings;
rec:string;
begin
Strs:=TStringList.Create;
I:=IC_read(PCHAR('RDR'),j,0,answer,32000);
Strs.Text:=UTF8toAnsi(answer);
rec:=FindField(Strs,10); // фамилия
...
rec:=FindField(Strs,90,'E'); // номер группы
if rec=''
then // поле/подполе не найдено или пустое
else // поле/подполе найдено