Results 1 to 13 of 13

Thread: Import wizard voor CSV files

  1. #1
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    160

    Import wizard voor CSV files

    Ik ben op zoek naar een wizard component waarmee ik CSV files kan gaan importeren.
    Met name de mapping van velden is belangrijk.
    Tevens moet dit dan ergens opgeslagen worden zodat een eerdere mapping behouden blijft.

    In de wereld van POI's (Point Of Interests) is een wirwar aan verschillende bestanden.
    De ene heeft X,Y, Name. De ander weer Name, Longitude, latitude (of andersom).
    Kortom een chaos.

    Ik was begonnen dit per type bestand op te lossen in mijn code maar achteraf gezien niet de meest handige methode.

    Vandaar op zoek naar een wizard (voorbeeld of component) wat makkelijk te implementeren valt.
    Ik heb dus nog niks hiervoor gebouwd en ben dan ook nog zoekende.

    Enige hulp (lees: schop de goede kant op) is welkom :-)

    Alvast bedankt

    Herby

  2. #2
    Ik snap dat je CSV's in wilt lezen, op de een of andere manier kolommen mappen naar iets anders (al dan niet met conversie?), die mapping ergens op wilt slaan, (en misschien de data ook wel?) En wellicht een UI voor het configureren van die mapping...

    Maar wat is nou eigenlijk je probleem?
    1+1=b

  3. #3
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    160
    LOL

    Dat ik eigenlijk niet goed weet waar te beginnen.

  4. #4
    Je zou een eigen component kunnen maken, op basis van TList en Generics. Zo heb ik het gedaan met mijn M3U Parser component, om verschillende tags te parsen, en overeenkomende tags (tvg-group) bij elkaar te steken in een parent class genaamd group. Hiermee kan ik een hele makkelijke interface opstellen ook al is het bestand zelf redelijk plat..

  5. #5
    Senior Member EricLang's Avatar
    Join Date
    May 2002
    Location
    Holland
    Posts
    3,098
    Start met iets dat csv's kan inlezen..
    Inlezen / converteren is een kunst die lang niet altijd te generaliseren is.

  6. #6
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,377
    Als het bestand niet te groot is, zal dit het begin kunnen zijn (de meest klassieke opstelling):

    [Uit de losse pols ]

    Delphi Code:
    1. unit clDistances
    2.  
    3. interface
    4.  
    5. type TPOI = record
    6.   name : string;
    7.   x : double;
    8.   y : double;
    9. end;
    10.  
    11. TDistances = class
    12.   fPOI : array of TPOI
    13.   public
    14.    function Inlezen(const aFilename : string) : boolean;
    15. end;
    16.  
    17. implementation  
    18.  
    19. function TDistances.Inlezen(const aFilename : string) : boolean;
    20. var Importbestand : TSTringlist;
    21.      ImportRegel     : TStringlist;
    22.      Index : integer;
    23. begin
    24.   Importbestand : TSTringlist.create;
    25.   ImportRegel     : TStringlist.create;
    26.   try
    27.     ImportRegel.Delimiter := ';';
    28.     ImportRegel.StrictDelimiter := true; //heel belangrijk om alleen die teken te parsen
    29.     ImportRegel.Delimited := true;
    30.     Importbestand.LoadFromFile(aFilename);
    31.     For index := 0 to Importbestand.count - 1 do
    32.     begin
    33.        Importregel.Delimitedtext := Importbestand[index];
    34.        setlength(fPOI,(index + 1));
    35.        fPIO[index].Name := Importregel[0];
    36.        fPIO[index].X := Importregel[1];
    37.        fPIO[index].Y := Importregel[2];
    38.     end;
    39.   finally
    40.     result := length(fPIO) > 0;
    41.     Importbestand.free;
    42.     ImportRegel.free;
    43.   end;  
    44. end;
    Delphi is great. Lazarus is more powerfull

  7. #7
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    160
    Hoi Jos

    Het importeren zelf lukt prima. Ik ben eigenlijk op zoek naar iets waardoor de gebruiker zelf de import kan bepalen, onafhankelijk van de file die gebruikt wordt.
    De bedoeling is dat ik niet voor ieder type file een import routine ga schijven.

    Liever zie ik dat ze de CSV toevoegen en dat dan de vraag komt wat staat er in kolom 1, kolom 2, etc.
    Dat ze daar kolom 1 bv mappen naar de kolom 3 van mijn VirtualListView.

    Gr
    Herby

  8. #8
    Zelf zou ik denk ik twee (memory) datasets gebruiken één voor het originele CSV bestand en één voor de gewenste output. In bijvoorbeeld een INI file kun je dan per CSV type aangeven welke bron kolom met welk doel kolom correspondeert.

    In de praktijk kan er verschil zitten tussen verschillende CSV bestanden. Bijvoorbeeld van financiële transacties, denk hierbij aan een -/"af" voor bedragen. Dit is iets wat lastiger om aan de eindgebruiker overgelaten kan worden. Je zou misschien de meest gebruikte varianten zelf kunnen inbouwen.

  9. #9

  10. #10
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,377
    Quote Originally Posted by Delphiwizard View Post
    Is deze tool zo intelligent dat het het verschil weet tussen de verschillende velddefinities en plaats van de kolommen?
    Delphi is great. Lazarus is more powerfull

  11. #11
    Quote Originally Posted by jkuiper View Post
    Is deze tool zo intelligent dat het het verschil weet tussen de verschillende velddefinities en plaats van de kolommen?
    Op vroeg naar 'wizard component waarmee ik CSV files kan gaan importeren' met mapping van velden, dat is precies wat dit is, daarnaast ondersteunt het ook xls, dbf, access.

    Dus ja, je kan in de component wizard bvb de csv kolommen aan velden in je dataset.

    Click image for larger version. 

Name:	ascii2.png 
Views:	7 
Size:	21.6 KB 
ID:	7844

    Een eigen implementatie maken heeft uiteraard ook zijn voordelen maar als hij wil kan hij een trial proberen van dit third party component en dan nog zijn keuze maken.
    Naast de import is er trouwens een gelijkaardig 'export' component.
    Last edited by Delphiwizard; 03-Dec-18 at 19:48.

  12. #12
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    160
    Dat is inderdaad naar waar ik op zoek ben. Was ondertussen zelf al begonnen en net gestart met ValueListEditor.
    De destination fields wil ik in een combobox plaatsen zodat de gebruiker kan/moet kiezen waar naar toe te mappen.

    Merkte al wel dat de ValueListEditor niet echt makkelijk is.....
    Mijn app is gewoon gratis, dus ben ik dan niet zo van het "kopen" :-)
    $220,- is dan een beetje teveel van het goede

    Toch bedankt voor je tip

  13. #13
    Senior Member
    Join Date
    Mar 2002
    Location
    Edam
    Posts
    363
    De ingebouwde jet-engine in windows kan via een tadoconnection een CSV bestand direct inlezen in een tadoquery. Dan is het slechts een kwestie van de kolommen de juiste naam te geven en eventueel het veldtype toe te wijzen. Met van oorsprong angelsaksische CSV interpreters moet je rekening houden met het gegeven dat die niet altijd rekening wordt gehouden met een afwijkende decimal separator ( de komma in de nederlandse nummerieke weergave). Als er ergens een "nederlandse" tussen slag is gemaakt waarbij decimale getallen zijn weggeschreven naar een CSV dan zouden die moeten zijn voorzien van quotjes om niet te interfereren met de komma als veldscheider maar mijn ervaring is dat dat niet altijd gebeurt.
    Last edited by Willem; 06-Dec-18 at 14:25.

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
  •