Results 1 to 15 of 15

Thread: NLDRcsCsv

  1. #1

    Talking NLDRcsCsv

    ------------
    De sources van NLDDanyUtils zijn te vinden in:
    ftp://ftp.nldelphi.com/public/OpenSo.../NLDDanyUtils/
    ------------

    Hoi, hier is weer een nieuwe unit.

    Deze unit laat toe "CSV" files te beheren.
    CSV (comma separated value) files bestaan uit een aantal regels (waarbij 1 regel = 1 "record"), met in iedere regel een aantal "Fields". Deze fieldwaarden zijn gescheiden door komma's. Alle fieldwaarden zijn in ascii (dus leesbare tekst). De eerste regel in de file geeft altijd de "field" namen, ook gescheiden door komma's. Als een fieldwaarde zelf een komma bevat dan komt die fieldwaarde tussen dubbele quotes.

    De code in de unit laat toe
    - fields toe te voegen, te inserten of weg te laten,
    - records (regels) toe te voegen, te inserten of weg te laten
    - de file te laden of weg te schrijven,
    - de waarde van een field op te halen (get) of te wijzigen (set),
    - "berekende" fields toe te voegen (rekenkundige functies, datum/tijd functies en sommige statistische functies)
    - ..., dus bijna net zoals in een database.


    Veel plezier.

    Dit is de interface van de class "TCommaSeparatedValues"
    Code:
      TCommaSeparatedValues = class (TObject)
      private
        FIndex: Integer;
        FLines: TStringListList;
        FLineCount: LongInt;
        FFileName: string;
        FChanged: Boolean;
        procedure SetIndex(No: Integer);
        function IndexValid: boolean;
        function FieldNumberValid(No: Integer): boolean;
        procedure ReadFields; // at position Index
        procedure WriteFields; // at position Index
      public
        FieldNames, Fields, NewEntry: TStrings;
        function Count: Integer;
        function FieldCount: Integer;
        function FieldIndex(const Name: string): Integer;
        property Index: Integer read FIndex write SetIndex;
        procedure LoadFromFile(const Fn: string);
        procedure SaveToFile(const Fn: string);
        constructor Create(const fn: string = '');
        destructor Destroy; override;
        procedure Clear;
        function GetField(const No: Integer): string; overload;  // data = "Fields"
        function GetField(const Name: string): string; overload; // data = "Fields"
        procedure SetField(const No: Integer; const Fld: string); overload;
          // data = "Fields"
        procedure SetField(const Name: string; const Fld: string); overload;
          // data = "Fields"
        procedure Add; // data = "NewEntry"
        procedure Insert(const No: Integer); // data = "NewEntry"
        procedure Delete(const No: Integer);
        procedure AddField(const Name: string; const Txt: string = '');
        procedure InsertField(const No: Integer; const Fld: string; const Txt: string
          = '');
        function AddCalculatedField(const FieldDef: string): integer;
        procedure DeleteField(const No: Integer);
        procedure CheckIndex(No: Integer);
        procedure CheckFieldNumber(No: Integer);
      end;
    Last edited by Dany; 18-Jun-07 at 20:22.

  2. #2
    Kan je dit niet omwerken naar een TDataSet-descendant? Dat lijkt me pas echt gemakkelijk (om te gebruiken dan, het bouwen is een ander verhaal).
    Ik weet dat je CSVs ook via bv ODBC kan uitlezen, maar dat is zo'n zwaargewicht, een TDataSet is gewoon veel lichter.

  3. #3

  4. #4
    He, die kende ik niet, dank voor de tip Dees (btw da's de achternaam van mn vrouw ). Maar dan moet je neem ik aan midas.dll meeleveren, nietwaar? Anders kan je niet met TClientDataSet aan de slag, neem ik aan. Niet iedereen wil of kan dat, dus ik laat mn wens nog even staan.

  5. #5
    TCustomBuild Rob Bos's Avatar
    Join Date
    Jan 2003
    Location
    Eindhoven
    Posts
    4,213
    Als je de unit MidasLib (dacht ik uit mijn hoofd) mee compiled (toevoegen aan je uses dus) dan hoef je hem niet als dll mee te leveren...

  6. #6
    Hoi, er is een funtie toegevoegd: "AddCalculatedField".
    Die functie laat toe een "berekend" (uit andere velden) veld toe te voegen aan de Csv File.

    De interface:
    Code:
    {
    AddCalculatedField adds a new field (or updated an existing field)
    with values calculated from already existing fields.
    
    The "FieldDef" has the following formats:
      Newfield = Oldfield1 + OldField2              (sum of two fields)
      Newfield = Oldfield1 - OldField2              (difference btw two fields)
      Newfield = Oldfield1 * OldField2              (product of two fields)
      Newfield = Oldfield1 / OldField2              (quotient of two fields)
      NewField = OldField1 % OldField2  		(percentage: 100 * OldField1 / OldField2)
      Newfield = DaySpan(Oldfield1, OldField2)      (days between date fields)
      Newfield = HourSpan(Oldfield1, OldField2)     (hours between date fields)
      Newfield = CumulSum(Oldfield)                 (cumulative sum of a field)
      Newfield = AVG(Oldfield)                      (cumulative average of a field)
      NewField = MovingAVG(OldField, Prev, Next)    (moving average of a field)
      NewField = Delta(OldField)                    (Difference with the OldField value in the previous record)
      NewField = DateToWeekNo(OldField)             (converts a date to a weeknumber format "yww.d")
      NewField = DateToWeekNoOnly(OldField)         (converts a date to a weeknumber format "yww")
      NewField = WeekNoToDate(OldField)             (converts a weeknumber format "yww.d" or "yww" to a date)
                                                    ( a Weeknumber has the format "yww.d")
    
    The result of the function:
     0 = all fine
     1 = "OldField1" does not exist
     2 = "OldField2" does not exist
     3 = operator not recognized
    }
    
    Last edited by Dany; 27-May-06 at 20:28.

  7. #7
    Hoi,
    De functie "AddCalculatedField" is uitgebreid en het format van de definitiestring ("FieldDef") is gewijzigd. Zie bovenstaande post.

  8. #8
    Hoi,
    De functie "AddCalculatedField" is uitgebreid met de "Delta" operator. Zie twee posts terug voor de betekenis ervan.

  9. #9
    Hoi,
    Weer een uitbreiding van de functie "AddCalculatedField": de operatoren "DateToWeekNo", "DateToWeekNoOnly" en "WeekNoToDate" zijn toegevoegd.
    Zie 3 posts terug voor meer uitleg.

  10. #10

    Exclamation

    Gisteren een update gedaan: een fout verwijderd uit "LoadFromFile".

  11. #11
    Hoi,

    De expressies om fields te berekenen met onderstaande operatoren kunnen nu meer dan 2 operanden ("OldFieldx") bevatten, verschillende soorten operatoren, haakjes en ook constanten.

    Newfield = Oldfield1 + OldField2 (sum of two fields)
    Newfield = Oldfield1 - OldField2 (difference btw two fields)
    Newfield = Oldfield1 * OldField2 (product of two fields)
    Newfield = Oldfield1 / OldField2 (quotient of two fields)
    Newfield = Oldfield1 % Oldfield2 (percentage: 100 * OldField1 / OldField2)


    Dus, volgende expressie is bv mogelijk:
    Code:
    Newfield = (Oldfield1 + OldField2 - 1.4) / (OldField3 + 2.5) % 20
    
    De evaluatie gebeurt altijd van links naar rechts, tenzij er haakjes voorkomen, dan wordt de inhoud daarvan eerst ge-evalueerd (weer van links naar rechts, tenzij ...).
    Dus "1 + 3 * 5" is identiek aan "(1 + 3) * 5".

    Veel plezier.
    Last edited by Dany; 29-Jun-07 at 14:38.

  12. #12
    Hoi,

    Een uitbreiding:
    - De operand "^" is toegevoegd (machtsverheffing)
    - de volgende functie aanroepen zijn nu mogelijk (TSimpleEval wordt nu gebruikt om numerieke expressies te evalueren):
    'abs', 'int', 'frac', 'round', 'ceil', 'floor', 'sum', 'min', 'max', 'sqrt', 'pi', 'logn', 'log', 'power', 'sign', 'rad', 'deg', 'cmp', 'ln', 'exp', 'sin', 'cos', 'tan', 'arcsin', 'arccos', 'arctan'
    Zie de beschrijving ervan in TSimpleEval (NLDRCSEval). http://www.nldelphi.com/Forum/showpo...43&postcount=1

    Veel plezier.
    Last edited by Dany; 15-Dec-07 at 19:17.

  13. #13
    Nieuwe versie van NLDRcsCSV, see attachment: NLDRcsCSV.pas
    Vriendelijke groeten,
    Dany

  14. #14
    Last edited by Dany; 28-May-18 at 20:07.
    Vriendelijke groeten,
    Dany

  15. #15
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    Heb je nog iets gedaan met de suggestie in post #2 en #3 ?
    Nu ie bruikbaar, maar ik mis de koppeling naar een TDataset
    10.4.2, Delphi2010, of Lazarus 2.2.0

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
  •