Pascal, paramcount

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
fischig
Beiträge: 3635
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Pascal, paramcount

Beitrag von fischig » 09.02.2021 14:44:52

Vielleicht vertehe ich die Beschreibungen nicht recht oder wende die Funktion falsch an.
Was ich will, ist, dass eine aufgerufene Pascal-Routine (Prozedur oder Funktion) feststellt, mit wie vielen Parametern sie aufgerufen wurde.

Benutzeravatar
MSfree
Beiträge: 10725
Registriert: 25.09.2007 19:59:30

Re: Pascal, paramcount

Beitrag von MSfree » 09.02.2021 14:54:27

https://www.freepascal.org/docs-html/3. ... count.html

Paramcount ist nicht dazu da, die Anzahl übergebener Parameter in eine Funktion zu ermitteln sondern die Anzahl der Parameter an das aufgerufenen Executable.

Wenn mich nicht alles täuscht (Pascal ist bei mir schon so verdammt lang her), gitb es unter Pascal gar keine Möglichkeit, Funktionen bzw. Subroutines mit variabler Parameterliste zu erstellen, womit dann aber auch die Anzahl der Parameter in die Funktion/Subroutine immer fest ist und nicht gezählt werden muß.

fischig
Beiträge: 3635
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: Pascal, paramcount

Beitrag von fischig » 09.02.2021 15:10:20

Ich wollte gar keine „variable Parameterliste" erstellen, ich wollte lediglich der aufgerufenen Routine die Anzahl der (festliegenden) Parameter nicht noch als weiteren Parameter übermitteln müssen. Aber das ist dann wohl nicht möglich.

Trotzdem danke!

Google übersetzt mir:

Code: Alles auswählen

Return number of command-line parameters passed to the program.
mit:

Code: Alles auswählen

Gibt die Anzahl der an das Programm übergebenen Befehlszeilenparameter zurück. 
Scheint mir schon im englischen Original nicht besonders glücklich ausgedrückt zu sein.

Benutzeravatar
MSfree
Beiträge: 10725
Registriert: 25.09.2007 19:59:30

Re: Pascal, paramcount

Beitrag von MSfree » 09.02.2021 15:18:02

fischic hat geschrieben: ↑ zum Beitrag ↑
09.02.2021 15:10:20
Scheint mir schon im englischen Original nicht besonders glücklich ausgedrückt zu sein.
Das englische Original ist absolut eindeutig und auch die deutsche Übersetzung ist völlig korrekt. Programm ist ein Executable. Function/Subroutine ist nur Teil eine Programmes.

fischig
Beiträge: 3635
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: Pascal, paramcount

Beitrag von fischig » 09.02.2021 15:22:21

Programm ist ein Executable. Function/Subroutine ist nur Teil eine Programmes.
Das war mir schon klar.
Das englische Original ist absolut eindeutig
Dazu habe ich eine abweichende Meinung.

Aber lassen wir's dabei. Das, was ich vorhatte gibt's wohl nicht.

tobo
Beiträge: 1989
Registriert: 10.12.2008 10:51:41

Re: Pascal, paramcount

Beitrag von tobo » 09.02.2021 17:05:21

fischic hat geschrieben: ↑ zum Beitrag ↑
09.02.2021 15:10:20
Ich wollte gar keine „variable Parameterliste" erstellen, ich wollte lediglich der aufgerufenen Routine die Anzahl der (festliegenden) Parameter nicht noch als weiteren Parameter übermitteln müssen.
Kannst du mal einen Grund oder Beispiel nennen, wieso man das tun muss oder will? Mir fällt da nämlich spontan nichts ein...

fischig
Beiträge: 3635
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: Pascal, paramcount

Beitrag von fischig » 09.02.2021 17:31:14

Also von „müssen“ kann gar keine Rede sein und zählen mit ganzen Zahlen kann ich auch schon. Das ist mein privates Hobbyprojekt und dem Publikum vorstellen möchte ich's nicht.
Kurzum:
Ich übergebe einer Prozedur eine Anzahl von Dateiendungen. Stecke die IN derselben in ein Array und lasse dann in einer Schleife alle Dateien mit diesen Endungen löschen. Ich finde es eben etwas unschön, dass ich etwas, was eigentlich kar ist, der Prozedur nochmal explizit klarmachen soll.

tobo
Beiträge: 1989
Registriert: 10.12.2008 10:51:41

Re: Pascal, paramcount

Beitrag von tobo » 09.02.2021 18:27:09

Mich hätte auch nicht dein Projekt, sondern der Kopf einer solchen Funktion/Prozedur interessiert. Da die ja offensichtlich keinen variablen Anteil hat, also nicht sowas hier ist
http://rvelthuis.de/articles/articles-openarr.html
sollten ja die Anzahl der Parameter aus der Parameterliste auch direkt ersichtlich sein. Ergo, ich verstehe noch immer dein Problem nicht - ist aber auch egal.

fischig
Beiträge: 3635
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: Pascal, paramcount

Beitrag von fischig » 09.02.2021 19:07:51

Mich hätte [...] der Kopf einer solchen [...] Prozedur interessiert.
Wie sollte der in so einem einfachen Fall wohl anders aussehen als :

Code: Alles auswählen

Procedure loeschen(ext1,ext2,ext3,...:str3);
?
sollten ja die Anzahl der Parameter aus der Parameterliste auch direkt ersichtlich sein.
Für dich und mich ist das wohl so, nicht aber für die in Rede stehende Routine, die will's offenbar noch mal explizit mitgeteilt bekommen haben. :mrgreen:

Benutzeravatar
MSfree
Beiträge: 10725
Registriert: 25.09.2007 19:59:30

Re: Pascal, paramcount

Beitrag von MSfree » 09.02.2021 19:42:17

fischic hat geschrieben: ↑ zum Beitrag ↑
09.02.2021 19:07:51
Mich hätte [...] der Kopf einer solchen [...] Prozedur interessiert.
Wie sollte der in so einem einfachen Fall wohl anders aussehen als :

Code: Alles auswählen

Procedure loeschen(ext1,ext2,ext3,...:str3);
?
Genau das wäre aber eine Funktion mit variabler Parameterliste, also solange die Anzahl der "ext"s mal eins mal drei sein kann, und genau das geht mit Pascal eben nicht.

Stecke die exts in ein Array und übergebe das Array und die Arraylänge, dann sind es genau zwei Parameter.

tobo
Beiträge: 1989
Registriert: 10.12.2008 10:51:41

Re: Pascal, paramcount

Beitrag von tobo » 09.02.2021 19:54:22

Und der Link zeigt es ohne die Arraylänge und somit nur mit einem Parameter...

fischig
Beiträge: 3635
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: Pascal, paramcount

Beitrag von fischig » 09.02.2021 19:57:59

Stecke die exts in ein Array und übergib(1) das Array und die Arraylänge
Der Möglichkeiten gibt's viele, aber ich hätte es gerne so lokal wie möglich.
Genau das wäre aber eine Funktion mit variabler Parameterliste
Ich schätze, das wäre etwas aufwendiger.

Lasst es gut sein: Dass man die Parameteranzahl innerhalb einer Routine feststellen kann ist offenbar nicht vorgesehen. Und wenn's so ist, dann ist's eben so.

edit:
tobos link ist mir zu Englisch und soweit ich ihn überflogen habe, setzt der auch objektorientiertes Programmieren voraus. Das ist nicht mein Ding.

(1) 'Tschuldigung, ich konnte nicht widerstehen. :wink:

tobo
Beiträge: 1989
Registriert: 10.12.2008 10:51:41

Re: Pascal, paramcount

Beitrag von tobo » 10.02.2021 10:52:40

Offene Array-Parameter setzen kein objektorientiertes Programmieren voraus. Hier ist mal ein Beispielprogramm mit mehreren Aufrufformen, die auch die für dich möglichst lokal Erscheinende enthalten mag:

Code: Alles auswählen

program t;

procedure f(const A: array of string);
var i: integer;
begin
    writeln('Länge: ', length(A));
    for i := low(A) to high(A) do
        writeln('Index[', i, ']: ', A[i]);
end;


var a1: array of string;
    a2: array[1..3] of string;
    s1, s2, s3: string;
begin
    writeln('1. Aufrufmöglichkeit:');
    f(['mp4', 'mkv', 'webm']);
    
    s1 := 'mkv'; s2 := 'webm'; s3 := 'mp4';
    writeln('2. Aufrufmöglichkeit:');
    f([s1, s2, s3]);

    setlength(a1, 3);
    a1[0] := 'webm'; a1[1] := 'mkv'; a1[2] := 'mp4';
    writeln('3. Aufrufmöglichkeit:');
    f(a1);

    a2[1] := 'mkv'; a2[2] := 'mp4'; a2[3] := 'webm';
    writeln('4. Aufrufmöglichkeit:');
    f(a2);
end.

Antworten