Ваш код у меня работает.
Переменные i, s, buffer используются одновременно в двух функциях. Я правильно понял, что i и s локальные в каждой, а у буфера стоит флаг VAR?
Код:
f_main()
f.TEXTMODE(TRUE);
f.OPEN('C:\111.txt');
f.CREATEINSTREAM(StreamInObj);
i := 1;
WHILE NOT (StreamInObj.EOS()) DO BEGIN
StreamInObj.READTEXT(buffer);
s:=Explode(buffer,2); //второе поле
MESSAGE('Line No. %1 %2', i , s); //показать второе поле
i+=1;
END;
f.CLOSE();
Explode(VAR buffer : Text[1024];number : Integer) s2 : Text[1024]
FOR t:=1 TO Number DO BEGIN
s2:=COPYSTR(Buffer,1,STRPOS(Buffer,';')-1);
Buffer:=COPYSTR(Buffer,STRPOS(Buffer,';')+1);
END;