[Lazarus] Assign not working on text files

Michael Van Canneyt michael at freepascal.org
Sun Nov 9 15:50:50 CET 2014



On Sun, 9 Nov 2014, Bart wrote:

> On 11/9/14, Stefanos Beligiannis <smpel at yahoo.com> wrote:
>
>> If somebody has met this problem please advise.
>> ----------------code var    f : text;
>>     fn,nam : string;
>>
>> begin
>>      fn:=Edit2.Caption;
>>      {$I-}
>>      assign(f,fn);
>>      if (not FileExists(fn)) then Rewrite(f) else Append(f);
>>      {$I+}----------------- end codecompiler error
>> report-----------------  startk2u.pas(92,18) Error: Wrong number of
>> parameters specified for call to "Assign"k2u.pas(93,44) Hint: Local variable
>> "f" does not seem to be initialized----------------- end
>> use Lazarus # 1.2.6
>>
>>
>>
>
> Use TextFile instead of Text, use AssignFile instead of Assign.
> Alternatively prepend both Text and Assign with system. (note the dot!).

Explanation:

The code most likely is inside a TForm. TForm descends from TPersistent.
TPersistent has a .Assign() method, which is totally unrelated to the Assign() of the system unit.

When compiling your code, the compiler needs to know which Assign() to use.
It finds first the TPersistent.Assign, stops searching and gives an error 
because it has different arguments from the system version.

By prepending your "text" and "assign" with system: system.text, system.assign,
the compiler does not search in TPersistent and finds the correct routines.

Michael.




More information about the Lazarus mailing list