Problem mit Assign (Textfile, Textfilename)

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
tolleware
Beiträge: 9
Registriert: Fr 1. Mär 2024, 13:45

Problem mit Assign (Textfile, Textfilename)

Beitrag von tolleware »

Hallo,

ich habe ein Problem mit Assign. Beim Kompilieren der Zeile "Assign (CsvFile, OutCsvFileName);" kommt die Meldung
Error: Wrong number of parameters specified for call to "Assign"
Error: Found declaration: Assign(TPersitent).

Komischerweise funktioniert Assign vorher in einer andern procedure bei einem weiteren Textfile korrekt "Assign (LogFile, LogFileName);".

Ich habe daraufhin mal bei Assign (CsvFile, OutCsvFileName) "Finde Deklaration von Assign" aufgerufen und lande in "classesh.inc" und "procedure Assign(Source: TPersistent); virtual;"

Mache ich auf dem ersten Assign (LogFile, LogFileName) "Finde Deklaration von Assign", lande ich aber in "systemh.inc" und "Procedure Assign(out t:Text;const s:rawbytestring);"

Ich denke, der Verweis nach "systemh.inc" ist korrekt.
Warum funktioniert das beim 2. Aufruf nicht, wieso wird ein falscher Aufruf benutzt ?
Was muss ich machen, das das korrekt funktioniert ?

Über etwas Hilfe freue ich mich - Danke vorab !

Gruß
Uli

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Problem mit Assign (Textfile, Textfilename)

Beitrag von m.fuchs »

Benutz einfach statt Assign die gleichfunktionierende Prozedur AssignFile. Dann wirst du das Problem nicht mehr haben.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6770
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Problem mit Assign (Textfile, Textfilename)

Beitrag von af0815 »

tolleware hat geschrieben: Sa 4. Jan 2025, 11:04 Warum funktioniert das beim 2. Aufruf nicht, wieso wird ein falscher Aufruf benutzt ?
Vor Jahren wurde Assign (mit Files) zu AssignFile umbenannt, da es zu Namenskonflikten gekommen ist.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

icho2099
Beiträge: 47
Registriert: Fr 21. Feb 2020, 19:17
OS, Lazarus, FPC: Win10/64
CPU-Target: 64 Bit
Wohnort: Osterholz-Scharmbeck

Re: Problem mit Assign (Textfile, Textfilename)

Beitrag von icho2099 »

oder schreib den Unitnamen explizit davor: System.Assign()

PascalDragon
Beiträge: 954
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Problem mit Assign (Textfile, Textfilename)

Beitrag von PascalDragon »

tolleware hat geschrieben: Sa 4. Jan 2025, 11:04 Warum funktioniert das beim 2. Aufruf nicht, wieso wird ein falscher Aufruf benutzt ?
Die Klasse TPersistent hat eine Method Assign mit anderen Parametern. In allen Klassen, die von TPersistent direkt oder indirekt erben hat diese Method nach den allgemeinen Sprachregeln von Object Pascal Vorrang zu der globalen Funktion aus System mit dem gleichen Namen. Du kannst dies umgehen, indem du entweder den Alias AssignFile nutzt, der extra aus diesem Grund eingeführt wurde, oder du nutzt den vollen Namen System.Assign.
Ein gleiches Problem besteht übrigens auch bei TForm.Close und System.Close.
FPC Compiler Entwickler

tolleware
Beiträge: 9
Registriert: Fr 1. Mär 2024, 13:45

Re: Problem mit Assign (Textfile, Textfilename)

Beitrag von tolleware »

Danke an Alle, AssignFile() statt Assign() hat geholfen.

Antworten