AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion Rückgabewert

Ein Thema von kingmarv · begonnen am 25. Aug 2009 · letzter Beitrag vom 26. Aug 2009
Antwort Antwort
kingmarv

Registriert seit: 25. Aug 2009
14 Beiträge
 
#1

Funktion Rückgabewert

  Alt 25. Aug 2009, 14:32
Hallo

Ich habe einen String der durch mehrere Trennzeichen getrennt ist und verschiedene Informationen enthält.
Jetzt habe ich eine Funktion geschrieben die diesen String in seine einzelnen Informationen aufteilt und als Rückgabe wert hab ich z.Z Boolean, weil es bisher gereicht hat.

Jetzt möchte ich, dass man die Funktion z.B so Aufrufen kann :

explorestring('String', spieltag);

Wobei in der Variable Spieltag keine informationen übermittelt werden sollen, sondern es soll der Funktion sagen das er nur die Informationen über den Spieltag zurückgeben soll.

Leider weiß ich nicht wie man so eine Funktion aufbaut, es wäre nett wenn mir das einer verraten könnte.
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Funktion Rückgabewert

  Alt 25. Aug 2009, 15:11
Hallo und Willkommen

Ich denke, dass noch einpaar Informationen fehlen, damit wir dir wirklich helfen können. Was genau soll den z.B. die Funktion am Ende zurückgeben und vor allem: was soll sie den eigentlich genau machen?

Zu deinem Problem wegen "Spieltag": Du könntest dir einen Typ bauen, z.B.:

TMeinTyp = (mtTest1, mtTest2, mtTest3); und dann bei der Funktion:

function ExploreString(AStr : string; AWas : TMeinTyp) : boolean; Innerhalb der Funktion kannst du dann auf "AWas" natürlich zugreifen und für verschiedene Dinge verschiedene Sachen tun.

Vielleicht hilft dir das schon mal weiter, vielleicht hab ich dich aber auch vollkommen falsch verstanden. Gib doch einfach noch einpaar mehr Informationen zu deinem Problem.

mfG

Patti

Edit: Mein 300. Beitrag
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

Re: Funktion Rückgabewert

  Alt 25. Aug 2009, 15:25
Zitat:
Ich habe einen String der durch mehrere Trennzeichen getrennt ist und verschiedene Informationen enthält.
Das würde ich so schnell wie möglich in einen passenden record packen. Damit kann man dann viel leichter herumhantieren.

Um den String zu zerteilen schau dir mal explodeexplode an
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#4

Re: Funktion Rückgabewert

  Alt 25. Aug 2009, 15:29
Wieso nicht so etwas?function explorestring(const s: string; const spieltag: TStrings): Boolean; So eine Funktion könnte z.B. zurückgeben, ob alles in Ordnung war. Wenn ja, steht der "zerpflückte" String anschließend in spieltag, welches als TStrings z.B. Memo.Lines, ListBox.Items oder eine TStringlist sein könnte.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
kingmarv

Registriert seit: 25. Aug 2009
14 Beiträge
 
#5

Re: Funktion Rückgabewert

  Alt 25. Aug 2009, 15:37
erstmal danke für eure schnelle und netten Antowrten.
Ich dachte zuerst ich müßte mir jetzt anhören ich soll google benutzten. Echt gut hier.

Herzlichen Glückwunsch Patti zum 300ten Post


AWas : TMeinTyp) : boolean;

Ich glaube das ist interessant für mich

Um mein Problem nochmal zuerläutern:

So sieht mein String aus.

s:='spieltag=1|nachname=kamp|vorname=marvin|tippst ring=bochum2gegner6;dortmund1gegner1;schalke1gegne r0;leverkusen3gegner1;|';

Die Funktion um die Informationen von einen zu Trennen hab ich auch schon geschrieben, sieht zwar nicht sonderlich schön aus ^^ aber funktioniert:

Delphi-Quellcode:
function getstring(s:string) :boolean;
var
st,nn,vn,ts:string;
pos1,pos2,pos3,pos4,trenn:integer;
begin

pos1:=pos('spieltag=',s);
st:=copy(s,pos1+9,1);
showmessage(st);
trenn:=pos('|',s);
delete(s,1,trenn);


pos2:=pos('nachname=',s);
trenn:=pos('|',s);
nn:=copy(s,pos2+9,trenn-10);
showmessage(nn);
Delete(s,1,trenn);


pos3:=pos('vorname=',s);
trenn:=pos('|',s);
vn:=copy(s, pos3+8,trenn-9);
showmessage(vn);
Delete(s,1,trenn);


pos4:=pos('tippstring=',s);
trenn:=pos('|',s);
ts:=copy(s, pos4+11,length(s));
showmessage(ts);


end;
Das er mir die Ergebnisse in Showmessage ausgibt war nur zu testzwecken.

Jetzt möchte ich die Funktion aber so umschreiben, das wenn ich die Funktion aufrufe

getstring(....) möchte ich dir Funktion genau sagen welcher dieser Informationen er mir als Rückgabewert ausgeben soll.

z.B getstring('string', spieltag) ausgeben soll er mir dann "1" oder "Spieltag=1".

Ich denke da kommt das ins spiel "AWas : TMeinTyp)" nur wie baue ich diese Klasse auf um mein Problem zu realisieren.
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#6

Re: Funktion Rückgabewert

  Alt 25. Aug 2009, 15:46
Ein Tip zum Zerlegen des Strings ist die TStringList. Schau dir da mal die Eigenschaften Delimiter, StrictDelimiter und DelimitedText an, damit hast du deinen String schon mal auf einfachste Weise zerlegt.

Das andere Problem wurde ja von Patti schon fast komplett gelöst:

Delphi-Quellcode:

type

  TMeinTyp = (mtSpieltag, mtNachname); //Alle weiteren kannst du ergänzen

function GetString(AStr : string; AWas : TMeinTyp) : String;
begin

  case AWas of
    mtSpieltag: begin
                  Result := ... //Hier kommt die richtige Zuweisung hin
                end;
    mtNachname: ... //usw.
  end;
end;

Edit: Variante mit TStringList. Ungetestet.

Delphi-Quellcode:
type
  TSubString = (ssSpieltag, ssNachname, ssVorname, ssTippstring);

function GetString(AStr: String; const ASubString: TSubString): String;
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  sl.Delimiter := '|';
  sl.StrictDelimiter := True;
  sl.DelimitedText := AStr;
  Result := sl.Strings[Integer(ASubString)];
  sl.Free;
end;
  Mit Zitat antworten Zitat
kingmarv

Registriert seit: 25. Aug 2009
14 Beiträge
 
#7

Re: Funktion Rückgabewert

  Alt 26. Aug 2009, 00:01
hey danke eure tips waren super habs so gemacht und es klappt viel kürzer und zuverlässiger

danke nochmals
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#8

Re: Funktion Rückgabewert

  Alt 26. Aug 2009, 07:34
TStringList kann übrigens noch mehr... Sie kann auch mit Namen-Wertepaaren umgehen, d.h.
"Name=Wert", was ja bei dir der Fall ist.

Solltest du also beim Rückgabewert nur den Teil nach dem "=" benötigen musst du nur

Result := sl.ValueByIndex[Integer(ASubString)]; schreiben.
  Mit Zitat antworten Zitat
kingmarv

Registriert seit: 25. Aug 2009
14 Beiträge
 
#9

Re: Funktion Rückgabewert

  Alt 26. Aug 2009, 10:59
hey guido

danke noch für den zusätzlich tipp. Muss man erst einmal wissen das es das auch noch gibt

Hab es dann über ne eigene Function gelöst, wobei deine Variante sicherlich eleganter gewesen wäre

Delphi-Quellcode:
function format(s:string) : string;
var
s2:string;
i:integer;
begin
i:=pos('=',s);
Delete(s,1,i);
Result:=s;
end;
Danke nochmal an ALLE für den guten Support
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#10

Re: Funktion Rückgabewert

  Alt 26. Aug 2009, 11:09
Zitat:
Unit

SysUtils

Syntax

function Format(const Format: string; var Args: array of TVarRec): string; overload;

function Format(const Format: string; var Args: array of TVarRec; var FormatSettings: TFormatSettings): string; overload;
Die Funktion Format ist übrigens bereits in den SysUtils definiert. Du solltest bei der Vergabe deiner Namen für Variablen, Prozeduren, Funktionen usw. darauf achten, dass es den Namen noch nicht gibt, um später Probleme zu vermeiden.

Ein einfacher Weg wäre es z.B. der eigenen Variablen, Routine usw. etwas voranzustellen (MyFormat, kmFormat [km steht hier für kingmarv]).

Edit:

Noch was wichtiges: Die Möglichkeit mit TStringList, wie oben vorgestellt funktioniert nur solange die gesuchten Substrings in dieser Reihenfolge im String stehen. Falls sich das mal ändert, musst du das anders lösen:

Delphi-Quellcode:
function GetSubStringByName(AStr: String; const AName: String): String;
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    sl.Delimiter := '|';
    sl.StrictDelimiter := True;
    sl.DelimitedText := AStr;
    Result := sl.Values[AName];
  finally
    sl.Free;
  end;
end;

//Aufruf:

GetSubStringByName(Quellstring, 'nachname'); //liefert als Ergebnis den Teil der hinter nachname= steht
Falls du den anderen Aufruf bevorzugst, dann könnte das so aussehen:

Delphi-Quellcode:
type
  TSubstring = (ssSpieltag, ssNachname, ssVorname, ssTippstring);

const
  CSubstring: Array[TSubstring] of Shortstring = ('spieltag', 'nachname', 'vorname', 'tippstring');

function GetSubStringByName2(AStr: String; const ASubstring: TSubstring): String;
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    sl.Delimiter := '|';
    sl.StrictDelimiter := True;
    sl.DelimitedText := AStr;
    Result := sl.Values[CSubstring[ASubstring]];
  finally
    sl.Free;
  end;
end;

//Aufruf:

GetSubStringByName2(Quellstring, ssNachname); //liefert als Ergebnis den Teil der hinter nachname= steht
Diese beiden Varianten richten sich nur nach dem, was VOR dem "=" steht und funktionieren auch wenn sich die Reihenfolge ändert.

Jetzt solltest du nur noch verstehen, was in den beiden Routinen passiert...
  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 04:37 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