Page 2 of 2 FirstFirst 1 2
Results 16 to 27 of 27

Thread: NLDDanyUtils

  1. #16
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    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
    !

  2. #17
    @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:
    Het is alleen niet netjes omdat er algemeen geldt: wie een instantie aanmaakt, geeft die zelf ook weer vrij
    Suggestie? doen of niet doen?
    Vriendelijke groeten,
    Dany

  3. #18
    Yay: Student(je) af
    Join Date
    Jun 2003
    Location
    Harderwijk
    Posts
    2,621
    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.

  4. #19
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    niet doen dus
    !

  5. #20
    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

  6. #21
    Yay: Student(je) af
    Join Date
    Jun 2003
    Location
    Harderwijk
    Posts
    2,621
    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)
    In welk geval, wat ik dus eigenlijk bedoelde, de procedure helemaal niets aanmaakt maar alleen een (lege) StringList aangereikt krijgt en die vult.
    My software never contains bugs. Perhaps just undocumented features.

  7. #22
    @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:
    In welk geval, wat ik dus eigenlijk bedoelde, de procedure helemaal niets aanmaakt maar alleen een (lege) StringList aangereikt krijgt en die vult.
    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.

    Ik kan natuurlijk ook nog de andere procedure er hetzelfde laten uitzien:
    Code:
    procedure TStringsToString(T: TStrings; var S: string); 
    // in plaats van
    function TStringsToString(T: TStrings): string;
    @Allen:
    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

  8. #23
    <OffTopic>
    Originally posted by Dany Rosseel
    "bla bla", "boem boem"
    Teveel naar Mieke Vogels geluisterd?
    </OffTopic>
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  9. #24
    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

  10. #25
    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

  11. #26
    @GolezTrol,

    Zie een van mijn vorige posts:
    @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.
    ---
    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.
    In principe zijn de routines "TStringsToString" en "StringToTStrings" in de unit "NLDRcsStrings" niet meer nodig.
    Vriendelijke groeten,
    Dany

  12. #27
    Vriendelijke groeten,
    Dany

Page 2 of 2 FirstFirst 1 2

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •