![]() |
Funktion Rückgabewert
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. |
Re: Funktion Rückgabewert
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.:
Delphi-Quellcode:
und dann bei der Funktion:
TMeinTyp = (mtTest1, mtTest2, mtTest3);
Delphi-Quellcode:
Innerhalb der Funktion kannst du dann auf "AWas" natürlich zugreifen und für verschiedene Dinge verschiedene Sachen tun.
function ExploreString(AStr : string; AWas : TMeinTyp) : boolean;
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 :party: :spin: |
Re: Funktion Rückgabewert
Zitat:
Um den String zu zerteilen schau dir mal ![]() |
Re: Funktion Rückgabewert
Wieso nicht so etwas?
Delphi-Quellcode:
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.
function explorestring(const s: string; const spieltag: TStrings): Boolean;
|
Re: Funktion Rückgabewert
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:
Das er mir die Ergebnisse in Showmessage ausgibt war nur zu testzwecken.
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; 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. |
Re: Funktion Rückgabewert
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; |
Re: Funktion Rückgabewert
hey danke eure tips waren super habs so gemacht und es klappt viel kürzer und zuverlässiger ;)
danke nochmals |
Re: Funktion Rückgabewert
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
Delphi-Quellcode:
schreiben.
Result := sl.ValueByIndex[Integer(ASubString)];
|
Re: Funktion Rückgabewert
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:
Danke nochmal an ALLE für den guten Support :)
function format(s:string) : string;
var s2:string; i:integer; begin i:=pos('=',s); Delete(s,1,i); Result:=s; end; |
Re: Funktion Rückgabewert
Zitat:
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:
Falls du den anderen Aufruf bevorzugst, dann könnte das so aussehen:
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
Delphi-Quellcode:
Diese beiden Varianten richten sich nur nach dem, was VOR dem "=" steht und funktionieren auch wenn sich die Reihenfolge ändert.
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 Jetzt solltest du nur noch verstehen, was in den beiden Routinen passiert... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 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 by Thomas Breitkreuz