Je kunt wél een TStrings teruggeven als functie-resultaat.. Het is alleen niet netjes omdat er algemeen geldt: wie een instantie aanmaakt, geeft die zelf ook weer vrij
Je kunt wél een TStrings teruggeven als functie-resultaat.. Het is alleen niet netjes omdat er algemeen geldt: wie een instantie aanmaakt, geeft die zelf ook weer vrij
!
@SvG:
Het zou dus toch gaan om een TStrings terug te geven en er een functie van te maken. Prachtig. Alleen werk ik in mijn toepassingen met TStrings die al 'ge-creërd' zijn v????r de functieaanroep. Ik gebruik dus zelf altijd de versie die een TStrings meegeeft als parameter en daarin ook het resultaat verwacht.
Misschien moet ik in de NLDRcsStrings ook wel een overloaded versie van de functie opnemen die een TStrings cre-eert, vult en als functieresultaat teruggeeft. Dat zou een mooie aanvulling zijn.
Jouw opmerking blijft natuurlijk geldig:Suggestie? doen of niet doen?Het is alleen niet netjes omdat er algemeen geldt: wie een instantie aanmaakt, geeft die zelf ook weer vrij
Vriendelijke groeten,
Dany
SvG heeft wel gelijk, ik zou er dan ook eerder voor kiezen om van beide een procedure te maken (eventueel overloaded)
My software never contains bugs. Perhaps just undocumented features.
Ik ben over het algemeen ook wel tegen functies die objecten teruggeven die ze zelf maken. Als je dit toch wilt doen, dan zou ik wel goed kijken naar de naamgeving zodat die aangeeft dat er een object gecreate wordt.
Als je een string naar een stringlist wilt converteren, dan zou het het mooist zijn als de stringlist daar een speciale constructor voor had. Je zou dan die constructor aan kunnen roepen:
StringList := TStringList.CreateFromString('JouwString');
Helaas heeft een stringlist dat niet, maar je zou wel een functie kunnen maken met een soortgelijke naam:
StringList := CreateStringListFromString('JouwString');
De functienaam geeft duidelijk aan dat hij een stringlist maakt. Je kunt het dan zien als een alternatieve constructor. Het is nu duidelijk dat de functie een stringlist maakt, zowel door de naam als door de syntax. Dat is niet zo duidelijk wanneer je de stringlist als var parameter meegeeft.
1+1=b
In welk geval, wat ik dus eigenlijk bedoelde, de procedure helemaal niets aanmaakt maar alleen een (lege) StringList aangereikt krijgt en die vult.Originally posted by CompuChip
SvG heeft wel gelijk, ik zou er dan ook eerder voor kiezen om van beide een procedure te maken (eventueel overloaded)
My software never contains bugs. Perhaps just undocumented features.
@GolezTrol:
Er zijn inderdaad problemen om strings die met TStringList.CommaText aangemaakt zijn korrekt terug te lezen met TIniFile.ReadString. De laatste verwacht alleen dubbele quotes aan het begin en het einde van de gehele string, niet er middenin.
Toegevoegd aan een van mijn vorige mails (ter volledigheid):
---
Na enig ge-experimenteer blijkt inderdaad TIniFile het probleem te zijn: de string "een twee", "drie vier" die bv door TStringList.CommaText wordt aangemaakt, wordt door TIniFile.ReadString teruggegeven als een twee", "drie vier en prompt door TStringList.CommaText verkeerd naar een TStringList omgezet. Ik kan dus inderdaad TStrinList.CommaText niet gebruiken om een TStrings om te zetten naar een String en omgekeerd.
---
@CompuChip:
Dat is precies wat de procedure nu doet:procedure StringToTStrings(S: string; T: TStrings);. De aanroeper zorgt dat T door hem aangemaakt is en vernietigd wordt. De procedure zelf vult alleen maar T.In welk geval, wat ik dus eigenlijk bedoelde, de procedure helemaal niets aanmaakt maar alleen een (lege) StringList aangereikt krijgt en die vult.
Ik kan natuurlijk ook nog de andere procedure er hetzelfde laten uitzien:
@Allen:Code:procedure TStringsToString(T: TStrings; var S: string); // in plaats van function TStringsToString(T: TStrings): string;
Ik denk dat we in deze thread 2 verschillende discussies voeren:
1. De "originele" over hoe TStrings te converteren naar een String en omgekeerd (en waarom het fout liep als je die string tracht weg te schrijven in een INI file - zie hierboven het antwoord aan GolezTrol-, en
2. De "additionele" over hoe een resultaat teruggegeven wordt: als waarde van een functie of via een (impliciete var) parameter.
Moeten we deze niet uit elkaar halen? Het wordt wat onoverzichtelijk. Ik denk dat discussie 2 meer thuishoort in de "Algemeen" thread.
Last edited by Dany; 18-May-04 at 21:18.
Vriendelijke groeten,
Dany
<OffTopic>
Teveel naar Mieke Vogels geluisterd?Originally posted by Dany Rosseel
"bla bla", "boem boem"
</OffTopic>
DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden
En dit wordt dan de derde discussie...
De voorbeeldstring in mijn post is al veranderd. Het was inderdaad die "beruchte" bla-bla-boem-boem.
Last edited by Dany; 18-May-04 at 21:20.
Vriendelijke groeten,
Dany
Hoi,
Er zijn net nieuwe versies ingecheckt van:
- NLDSimpleRegistry -
Deze unit is nu ook in staat een "TStrings" te schrijven naar en te lezen uit de registry.
en
- NLDRcsStrings -
1. Er is een fout gecorrigeerd in de functie "TStringsToString".
2. De procedure "TrimTStrings" is toegevoegd.
Veel plezier.
Last edited by Dany; 30-May-04 at 17:56.
Vriendelijke groeten,
Dany
@GolezTrol,
Zie een van mijn vorige posts:
Het probleem is opgelost door naar de inifile een "QuotedStr(TStringList.CommaText )" te sturen. Ik zie nog wel een paar rare fenomenen (als er quotes zelf in de strings zitten b.v.) maar die zullen zeer zelden voorkomen.@GolezTrol:
Er zijn inderdaad problemen om strings die met TStringList.CommaText aangemaakt zijn korrekt terug te lezen met TIniFile.ReadString. De laatste verwacht alleen dubbele quotes aan het begin en het einde van de gehele string, niet er middenin.
---
Na enig ge-experimenteer blijkt inderdaad TIniFile het probleem te zijn: de string "een twee", "drie vier" die bv door TStringList.CommaText wordt aangemaakt, wordt door TIniFile.ReadString teruggegeven als een twee", "drie vier en prompt door TStringList.CommaText verkeerd naar een TStringList omgezet. Ik kan dus inderdaad TStrinList.CommaText niet gebruiken om een TStrings om te zetten naar een String en omgekeerd.
---
In principe zijn de routines "TStringsToString" en "StringToTStrings" in de unit "NLDRcsStrings" niet meer nodig.
Vriendelijke groeten,
Dany
De source is nu te vinden op: https://svn.apada.nl/svn/NLDelphi-op.../nlddanyutils/
Vriendelijke groeten,
Dany
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks