German Mehrere CSV-Dateien laden

Discussion in 'German Forum' started by Ida, May 28, 2009.

  1. Ida

    Ida Member Licensed User

    Hallo,

    kann man mehrere CSV-Dateien laden, dann z. B. in einer Listview-Tabelle anzeigen lassen, evtl. Änderungen/Ergänzungen anfügen und dann alle als CSV wieder speichern?
    Diese CSV-D. hängen teilweise von einander ab - so etwas "halb Relationales".

    Danke für jede Antwort und Hilfe.

    Ida
     
  2. Filippo

    Filippo Expert Licensed User

    Hallo Ida,

    Ja! Einfach so:

    'alle Datei in eine Tabelle laden
    lv.RemoveAllRows 'Inhalt von Listview löschen
    lv.LoadCSV("Test-1.csv","|",True,True) ' 1.Datei
    lv.LoadCSV("Test-2.csv","|",True,True) ' 2.Datei
    lv.LoadCSV("Test-3.csv","|",True,True) ' 3.Datei
    ...

    'alles in eine Datei speichern
    lv.SaveCSV("Test-4.csv","|",True)

    ich denke das sollte für erste helfen.


    Ciao,
    Filippo
     
  3. Ida

    Ida Member Licensed User

    Hallo Filippo,

    ich danke Dir für Deinen Beitrag! Werde ich morgen probieren und dann hier meine Erfolge (oder Mißerfolge?) melden.

    Gruß

    Ida
     
  4. klaus

    klaus Expert Licensed User

    Hallo Filippo,

    Ida's Frage hat mich auch interessiert, und habe zu esrt mit dem Table Control versucht und dann mit Deiner ListView Library.

    Ich habe da einige Unterschiede gesehen zwischen den LoadCSV Funktionen der beiden Controls.
    - mit ListView1.LoadCSV(AppPath&"\Test1.csv",";",True,True)
    wäre es schön wenn sich die Spaltenbreite auf die Headertextbreite anpassen würde
    - mit ListView1.LoadCSV(AppPath&"\Test1.csv",";",False,True) und mit ListView1.LoadCSV(AppPath&"\Test1.csv",";",False,False)
    ist kein Unterschied.

    Sollten beide Controls nicht ähnliche Funktionsweisen haben ?

    Beiliegend ein kleines Testprogramm zum Vergleich.


    Hallo Ida,
    In Filippo's Beispiel zum Anhängen einer 2ten CSV Datei muss die 2te LoadCsv Linie so heissen
    lv.LoadCSV("Test-2.csv","|",True,False) ' 2.Datei
    wenn es eine HeaderLinie in der Datei gibt, oder
    lv.LoadCSV("Test-2.csv","|",False,False) ' 2.Datei
    wenn es keine HeaderLinie in der Datei gibt,

    aber nicht so:
    lv.LoadCSV("Test-2.csv","|",True,Tue) ' 2.Datei
    denn in diesem Fall werden 3 neue Spalten erstellt

    Beste Grüsse.
     

    Attached Files:

  5. Filippo

    Filippo Expert Licensed User

    Hallo Klaus,

    Danke für das richtig stellen!
    Ich hatte es auf die schnelle, ohne Testen, geschrieben.


    Ciao,
    Filippo
     
  6. klaus

    klaus Expert Licensed User

    Hallo Filippo,

    Hast Du mal auf die unterschiedlichen Funktionsweisen zwischen Table.LoadCSV und ListView.LoadCSV geschaut ?

    Beste Grüsse.
     
  7. Filippo

    Filippo Expert Licensed User

    welche unterschied? Ich denke die Funktion ist genau gleich.
     
  8. klaus

    klaus Expert Licensed User

    Hallo Filippo,

    In meinem Post #4, habe Ich versucht die Unterschiede zu erklären.
    Das Testprogramm zeigt sie besser als lange Texte.

    Load1 läd eine erste Datei.
    Mit den RadioButtons kann man die 4 Möglichkeiten für True und False für die 'Header Exist' und 'Create Columns' wählen.
    Load 2 läd eine zweite Datei.

    Beste Grüsse.
     
    Last edited: May 29, 2009
  9. Filippo

    Filippo Expert Licensed User

    Hallo Klaus,

    probiere mal auf dem Device, da funktioniert es richtig!

    Das Listview-Control hat den Vorteil das man mehrere Dateien hinzu laden kann.
    Natürlich wenn die Parameter "True,True" sind, wird eine vorhandene HeaderLinie erstellt/hinzugefügt.


    Ciao,
    Filippo
     
  10. klaus

    klaus Expert Licensed User

    Hallo Filippo,

    Ich habe das Testprogramm jetzt auch auf dem Device getestet.
    Es läuft auf dem Device gleich wie auf dem Desktop.
    Ich habe die Unterschiede in der beiliegenden Textdatei beigefügt, musste es leider so machen da der Text im Post nicht akzepriert wurde, zu lang.

    Das Table Control erlaubt auch mehrere Dateien hinzu zu laden.

    Beste Grüsse.

     

    Attached Files:

  11. Filippo

    Filippo Expert Licensed User

    Hallo Klaus,

    in diese Reihenfolge ist es vollkommen richtig das es kein Unterschied geben darf!

    Hier meine kurze erklärung:
    1. eine HeaderLinie ist vorhanden und es soll erstellt werden.
    2. eine HeaderLinie ist vorhanden und es soll nicht erstellt werden.
    3. eine HeaderLinie ist nicht vorhanden und es soll erstellt werden(geht aber nicht weil kein HeaderLinie vorhanden ist).
    4. eine HeaderLinie ist nicht vorhanden und es soll nicht erstellt werden.

    PS. das Listview-Control ist nicht und kann auch nicht in alle Funktionen gleich sein wie eine Table-Control.


    Ciao,
    Filippo
     
  12. klaus

    klaus Expert Licensed User

    Hallo Filippo,

    Ich komme noch mal zur ListView Funktionalität zurück.

    Ich finde dass Fall 4
    ListView1.LoadCSV(AppPath&"\Test1.csv",";",False,False)
    nicht richtig funktioniert.

    In diesem Fall hat die zu ladente Datei keine Headerzeile, also beinhaltet die erste Zeile Daten, aber ListView läd sie nicht.

    Ich habe das Testprogramm etwas geändert um es zu zeigen.
    Die Datei Test3.csv beinhaltet 3 Zeilen aber ohne Headerzeile, wenn man sie mit läd
    ListView1.LoadCSV(AppPath&"\Test3.csv",";",False,False)
    fehlen die Daten 5;6;7 der ersten Zeile!

    Beste Grüsse.
     

    Attached Files:

  13. Ida

    Ida Member Licensed User

    Hallo Filippo und Klaus,

    jetzt habe ich mal bei mir ausprobiert, was ich erreichen wollte:

    mehrere CSV-Dateien, die relativ zusammenhängen, zu laden etc
    Deshalb schrieb ich ja "halb relational".
    Eine CSV enthält alle Spalten, eine andere CSV enthält z. B. nur die Spalte Hersteller. Diese CSV-D. erhalte ich durch Umwandlung von PalmOS-PDB-Dateien.
    "Mein" Beispiel Lizenzen habe ich angefügt. Da hatte mir specci48 schon sehr geholfen.

    Könntet Ihr freundlicherweise bitte einen Blick drauf werfen?

    Vielen Dank!

    Gruß
    Ida
     
  14. klaus

    klaus Expert Licensed User

    Hallo Ida,

    So wie Ich das sehe hättest Du 2 Möglichkeiten:
    - mit SQL DataBase zu arbeiten und nicht mit csv Dateien.
    Hier kenne Ich mich allerdings leider nicht aus.

    - mit den verschiedenen Dateien die Du schon hast zu arbeiten.
    Hier schon mal einige Bemerkungen:
    - die Liz-Hersteller Datei ist ja eigentlich eine einfache Text Datei da nur ein Eintrag pro Zeile drin ist.
    - Du kannst nicht die Lizenzen Datei mit der Liz-Hersteller Datei verknüpfen.
    Was Du machen müsstest ist in der Editierform die TextBox für den Hersteller durch eine ComboBox zu ersetzen und den Inhalt der Liz-Hersteller Datei in die ComboBox einfügen.
    Dann hat der Benützer nur die Auswahl der vorgegebenen Hersteller.
    Du musst aber dann noch die Möglichkeit geben einen neuen Hersteller hinzufügen zu können. Das ist möglich mit dem Text Parameter der ComboBox und einem Button zum anfügen, oder mit eine extra Editierform mit mehr Möglichkeiten.
    Ein Beispiel gibt es hier: http://www.basic4ppc.com/forum/german-forum/1421-expense-tracker.html

    Das gleiche gilt natürlich auch für die anderen Spalten.

    Beste Grüsse.
     
  15. specci48

    specci48 Well-Known Member Licensed User

    Hallo zusammen,

    während Villa Riba schon feiert, wird in Villa Bacho noch geschrubbt... ähem... :)

    Während Klaus seine Antwort gepostet hat, habe ich noch ein wenig am Programm herumgespielt (siehe Anhang).

    Meine Veränderungen treffen dabei genau die Aussagen von Klaus:
    1. Die Hersteller werden jetzt nur noch einmal am Programmanfang gelesen
    2. Die Combobox wird jetzt nur noch einmal am Programmanfang gefüllt
    3. Das Feld txtHersteller habe ich gelöscht
    4. Die Combobox mit den Herstellern ist an die Stelle des Textfeldes gerutscht
    5. Bei einer Neuaufnahme wird immer der erste Hersteller vorbelegt
    6. Bei einer Änderung wird immer der Hersteller aus dem Datensatz vorbelegt

    Was Dir (Ida) jetzt noch fehlt ist die auch von Klaus angesprochene Möglichkeit, die Hersteller in der Combobox zu editieren. Am Besten per separater Form (siehe Beispiel von Klaus).
    Kleiner Tipp am Rande:
    Falls Du die Möglichkeit vorsehen möchtest, einen Hersteller aus der Combobox auch zu löschen, vorher erst in der eigentlichen Datendatei prüfen, ob der Hersteller nicht irgendwo noch verwendet wird. Ansonsten läuft das Programm nämlich auf einen Fehler, wenn man den betroffenen Datensatz anzeigen/ändern will.


    Viele Grüße
    specci48
     
  16. Ida

    Ida Member Licensed User

    Hallo Klaus,

    vielen Dank für Deine Bemühungen!
    Ich werde mir morgen Dein expense-tracker anschauen. Bestimmt lerne ich da wieder eine Menge!
    Danke und Gruß

    Ida (nicht aus der Grube Messel und keine 47 Mil. Jahre alt) - hier sollte der Smilie im Kopf hin
     
    Last edited: Jun 1, 2009
  17. specci48

    specci48 Well-Known Member Licensed User

    Hallo Ida,

    aufgrund Deiner letzten Anwort (und den Zeiten der Postings sowie kein erfolgter Download des Anhangs) gehe ich mal davon aus, dass Du meinen Post #15 übersehen hast.
    Daher dieser Zusatzpost, damit der Thread für Dich wieder als ungelesen erscheint... :cool:


    Viele Grüße
    specci48
     
  18. klaus

    klaus Expert Licensed User

    Ein kleines Beispiel zum 'handling' von ComboBoxen und ListBoxen findest Du im beigelegten Programm.

    Beste Grüsse.
     

    Attached Files:

  19. Ida

    Ida Member Licensed User

    Hallo specci48,

    vielen Dank für Deine Hilfe - und die Erinnerung! Ich hatte Deinen 1. Beitrag überhaupt nicht gesehen, als nicht einmal übersehen, also noch schlimmer.
    Entschuldigung!:sign0013:
    Werde nachher alles ausprobieren - und natürlich Rückmeldung bringen.

    Gruß

    Ida
     
  20. Ida

    Ida Member Licensed User

    Hallo Klaus,

    auch Dir wieder vielen Dank für die Hilfe!
    Werde ich auch nachher probieren und dann melden, wie es ging.

    Gruß

    Ida
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice