Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi var eine Funktion übergibt wert nicht (https://www.delphipraxis.net/95757-var-eine-funktion-uebergibt-wert-nicht.html)

gandime 12. Jul 2007 16:47


var eine Funktion übergibt wert nicht
 
Hi,
also ich habe eine Funktion:

Delphi-Quellcode:
function split_filename(s_filename,s_dir,s_name:string):boolean;
begin
  dir:='aaa';
  s_name:='bbb';
end;
diese Funktion rufe ich so auf:

Delphi-Quellcode:
var
  s_dir,s_name:string;
begin
  split_filename('C:\blabla\a.txt',s_dir,s_name);
  showmessage(s_dir);
  showmessage(s_name);[
aber sowohl s_dir als auch s_name =''

warum?

mfg
gandime

Neutral General 12. Jul 2007 16:49

Re: var eine Funktion übergibt wert nicht
 
Hi,

Du gibst erst mal in deiner Funktion nichts zurück. Das solltest du machen, sonst kannst du auch proceduren benutzen.

Delphi-Quellcode:
procedure split_filename(var s_filename,s_dir,s_name: String);
begin
  s_dir:='aaa';
  s_name:='bbb';
end;
So würde es klappen.

Gruß
Neutral General

mkinzler 12. Jul 2007 16:52

Re: var eine Funktion übergibt wert nicht
 
es sind auch keine Var Parameter

gandime 12. Jul 2007 16:53

Re: var eine Funktion übergibt wert nicht
 
das ist jetzt nicht die richtige Funktion ich hab die blos einmal beispielhalber geschrieben
aber der booleanwert wird benötigt

mkinzler 12. Jul 2007 16:55

Re: var eine Funktion übergibt wert nicht
 
Wie sollen wir den wissen, wie deine Funktion/Prozedur aussieht?Die gepostete funktioniert so nicht.

Delphi-Quellcode:
procedure split_filename(var s_filename; var s_dir, var s_name: String);

Chemiker 12. Jul 2007 16:55

Re: var eine Funktion übergibt wert nicht
 
Hallo,

es wird doch nichts zurückgegeben.

Bis bald Chemiker

SirThornberry 12. Jul 2007 16:56

Re: var eine Funktion übergibt wert nicht
 
wenn du mit deiner richtigen funktion ein problem hast und mit der geposteten nicht solltest du deine richtige posten.

gandime 12. Jul 2007 16:59

Re: var eine Funktion übergibt wert nicht
 
hier:
Delphi-Quellcode:
function split_filename(s_filename,s_dir,s_name:string):boolean;
var
  i_dir_l:integer;
  s_temp:string;
begin
  if (pos('\',s_filename)<>0) then
  begin
    i_dir_l:=length(s_filename);
    s_temp:='';
    repeat
      s_temp:=s_temp+s_filename[i_dir_l];
      i_dir_l:=i_dir_l-1;
    until (i_dir_l=0);
    s_name:=split_vor(s_temp,'\',true);
    s_dir:=split_nach(s_temp,'\',true);
    i_dir_l:=length(s_name);
    s_temp:='';
    repeat
      s_temp:=s_temp+s_name[i_dir_l];
      i_dir_l:=i_dir_l-1;
    until (i_dir_l=0);
    s_name:=s_temp;
    i_dir_l:=length(s_dir);
    s_temp:='';
    repeat
      s_temp:=s_temp+s_dir[i_dir_l];
      i_dir_l:=i_dir_l-1;
    until (i_dir_l=0);
    s_dir:=s_temp+'\';
    result:=true;
  end
  else
  begin
    s_dir:='';
    s_name:='';
    result:=false;
  end;
end;

Christian Seehase 12. Jul 2007 16:59

Re: var eine Funktion übergibt wert nicht
 
Moin gandime,

Du musst zwischen vier Varianten von Parametern unterscheiden:

Konstante-Parameter (const):
Der Wert wird an die Funktion/Prozedur übergeben, und man kann dem Parameter nichts zuweisen (wird schon vom Compiler geblockt).

Wert-Parameter (kein Prefix):
Der Wert wird als Kopie an die Funktion/Prozedur übergeben. Man kann dem Parameter etwas zuweisen, das hat dann aber nur innerhalb der Funktion/Prozedure Gültigkeit.

Var-Parameter (var):
Der Wert wird an die Funktion/Prozedur übergeben, man kann etwas zuweisen, und es wird hierbei in die Variable geschrieben, die angegeben wurde.

Out-Parameter (out):
Es wird kein Wert an die Funktion/Prozedur übergeben. Dieser Paramtertyp dient nur dazu Werte zurückzugeben. (Result reicht ja nicht immer ;-))

gandime 12. Jul 2007 17:08

Re: var eine Funktion übergibt wert nicht
 
danke für die info jetzt hab ichs

marabu 12. Jul 2007 17:15

Re: var eine Funktion übergibt wert nicht
 
Hallo,

du musst einen String nicht umständlich per Hand umkehren, wenn du Zugriff auf die Funktion StrUtils.ReverseString() hast. Wenn du das ganze auch noch machst um an das letzte Trennzeichen zu gelangen, dann solltest du dir mal SysUtils.LastDelimiter() anschauen. Wenn du aus einem Pfadnamen den Namen von Verzeichnis und Datei getrennt herausziehen möchtest, dann helfen dir ExtractFileDir() und ExtractFileName().

Grüße vom marabu

Blackheart 12. Jul 2007 17:19

Re: var eine Funktion übergibt wert nicht
 
Pfade etc.

DP-Maintenance 12. Jul 2007 21:56

DP-Maintenance
 
Dieses Thema wurde von "Christian Seehase" von "Internet / LAN / ASP.NET" nach "Object-Pascal / Delphi-Language" verschoben.
Nicht wirklich ein Netzwerkproblem ;-)

sirius 12. Jul 2007 22:30

Re: var eine Funktion übergibt wert nicht
 
Zitat:

Zitat von Christian Seehase
Konstante-Parameter (const):
Der Wert wird an die Funktion/Prozedur übergeben, und man kann dem Parameter nichts zuweisen (wird schon vom Compiler geblockt).

"..wird ausschließlich vom compiler geblockt" :mrgreen:
In der Exe sieht es völlig identisch aus. Aber unser Delphi will ja alles schön aufgeräumt haben :hello:

3_of_8 12. Jul 2007 22:34

Re: var eine Funktion übergibt wert nicht
 
Nein, bei const-Parametern wird das meist so gemacht, dass der Compiler dann darauf verzichtet, die Parameter zu "retten", was etwas Zeit spart, aber eben dazu führt, dass man den Wert nicht verändern darf (außer man will das, wie eben bei einem var-Parameter.

Sidorion 13. Jul 2007 09:45

Re: var eine Funktion übergibt wert nicht
 
Kleiner Nachtrag noch zu out-Parametern: Selbst wenn ein vernünftiger Wert beim Aufruf im Paramerter steht, wird dieser 'neutralisiert', d.h. der Parameter muss immer in der Methode initialisiert werden. Hier kann es bei Nichtbeachtung zu bösen Zugriffsverletzungen kommen. Out-Parameter werden quasi analog zu lokal deklarierten Variablen behandelt. Auch ist zu beachten, dass eine evtl. übergebene Objektinszanz nicht freigegeben wird.

Christian Seehase 13. Jul 2007 13:36

Re: var eine Funktion übergibt wert nicht
 
Moin Zusammen,

ich hätte da auch noch einen Nachtrag zu const-Parametern:
Wenn hier eine Objektreferenz übergeben wird, kann man natürlich die Methoden und Eigenschaften des Objektes benutzen (letztere auch ändern, wenn sie nicht Read-Only sind).


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz