AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi array of String als Result einer Funktion
Thema durchsuchen
Ansicht
Themen-Optionen

array of String als Result einer Funktion

Ein Thema von Brakeman · begonnen am 29. Sep 2003 · letzter Beitrag vom 13. Dez 2003
Antwort Antwort
Brakeman

Registriert seit: 23. Sep 2003
43 Beiträge
 
#1

array of String als Result einer Funktion

  Alt 29. Sep 2003, 20:54
Hallo,
ich habe vor, dass mir eine Funktion als Result ein array of String zurück liefert. Wenn ich folgendes schreibe:

Delphi-Quellcode:
function fillArray(array_name,Source, Ext:String): array of String;
begin
...
end;
bekomme ich die Compilermeldung:

Bezeichner erwartet, aber 'ARRAY' gefunden.

Hat jemand einen Rat, wie ich es dennoch hinbekomme?
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: array of String als Result einer Funktion

  Alt 29. Sep 2003, 20:59
Einen Typ definieren:
Delphi-Quellcode:
type TStringArray = Array of String;

function fillArray(array_name,Source, Ext:String): TStringArray;
begin
...
end;
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Brakeman

Registriert seit: 23. Sep 2003
43 Beiträge
 
#3

Re: array of String als Result einer Funktion

  Alt 29. Sep 2003, 21:05
Super, so funktionierts!

Danke!!!
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: array of String als Result einer Funktion

  Alt 30. Sep 2003, 08:37
Hintergrund: Der Grund dafür liegt in der Typenbehandlung von Pascal/Delphi. Dabei ist array of String eine Typenkombination, allerdings kein bestimmter Typ. Deswegen hast Du, vor der Einführung eines "neuen Datentypes" eine Typenfehlermeldung erhalten. (Stichwort: Strikte Typenbezeichnung)

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
combocracker

Registriert seit: 11. Dez 2003
3 Beiträge
 
#5

Re: array of String als Result einer Funktion

  Alt 13. Dez 2003, 14:13
Hallo,

ich habe auch mal eine Frage zu diesem Thema. Ich hatte anfangs das gleiche Problem wie oben. Mein Problem ist jetzt aber, dass die Funktion, die mir das Result zurückgeben soll, in einer anderen Unit liegt als die Prozedur, die das Array empfangen soll und, dass die Prozedur irgendwie nicht die Daten empfängt.

Die Unit, in der die Funktion liegt, heißt bei mir DBQuery.
Die Unit, die empfangen soll, heißt Adressbuch.

Habe Code in DBQuery folgendermaßen:


Code:

type
   TArray = array of array of string;

[...]


function TDBQuery.Query(SQLQuery: PChar): TArray;
//Zum Testen gibt sie nur ein Multidim. Array zurück.

var

Data: TArray;

begin

SetLength(Data, 1, 3);

Data[0, 0] := 'test';
Data[0, 1] := 'test';
Data[0, 2] := 'test';

result := Data

end;
In Adressbuch steht folgender Code:
Code:

type
TArray2 = DBQuery.TArray;

[...]


procedure TFrmAdressbuch.EintraegeAnzeigen;

var

EArray: TArray2;

begin

SetLength(EArray, 1, 3); // Ist dieser Schritt nötig?
EArray := Query.Query;

ShowMessage(EArray[0, 0]); // Ist Leer!! :-(


end;

So mein Problem ist also, dass EArray leer ist und darin keine Daten sind. Könnt ihr mir bitte helfen und mir sagen, wo der Fehler ist??

Vielen Dank im Voraus, Moritz.
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#6

Re: array of String als Result einer Funktion

  Alt 13. Dez 2003, 15:05
wenn du zweimal in zwei verschiedenen units ein und denselben typen deklarierst, geht das trotzdem nicht. du musst den typen in einer (evtl. eigenen) unit deklarieren, und dann mit uses das so basteln, dass alle anderen units drauf zugreifen können!
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
combocracker

Registriert seit: 11. Dez 2003
3 Beiträge
 
#7

Re: array of String als Result einer Funktion

  Alt 13. Dez 2003, 17:08
Bin mir nicht sicher, ob ich dich richtig verstehe.

Aber meinst du, dass ich in der Prozedur EintraegeAnzeigen folgendes mache?

Code:
var

EArray: DBQuery.TArray;
Jetzt greift der ja direkt auf den Typen in der Unit DBQuery zu. In der Unit Adressbuch ist die Unit DBQuery natürlich über uses eingebunden.

Leider funzt es so aber auch nicht. EArray ist immer noch leer.

Und was ist mit "SetLength(EArray, 1, 3); // Ist dieser Schritt nötig?"? Muss ich das machen, oder setzt Delphi die Größe von EArray automatisch fest, wenn ich das Array (wenn es denn dann mal funktioniert) über die Funktion als Result bekomme.

Gruß, Moritz.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#8

Re: array of String als Result einer Funktion

  Alt 13. Dez 2003, 18:19
Setlength musst du nicht explizit aufrufen.
Also deine Codeschnipsel sind entweder etwas unvollständig, oder der Fehler steckt in der Klasse Query. Also ich weiß nicht, warum du Query.Query zuweist.
Die SetLength kannst du weglassen, da nur ein Zeiger auf das erste Element des Arrays übergeben wird. Hierin könnte ein weiteres Problem liegen. Die Variable Data ist nur lokal. Es kann also gut sein, dass du den Speicherbereich des Arrays erstmal in aller Ruhe freigibst und anders verwendest. Ich gehe mal davon aus, dass die Klasse Query die Funktion aufruft und das Ergebnis von TDBQuery.Query in ihrer Variablen Query speichert. Wie gesagt, genau genommen wird nur ein Zeiger gespeichert und es ist egal was in dem entsprechendem Speicherbereich steht.
Du musst Data einfach nur etwas globaler definieren und dafür sorgen, dass dieses Array garantiert erst freigegeben wird, wenn du mit der Auswertung fertig bist.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz