mehrere TXT auslesen und in datagridview einfügen

  • VB.NET

Es gibt 52 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    mehrere TXT auslesen und in datagridview einfügen

    ich möchte mehrere TXT's auslesen und zeilenweise in ein datagridview einfügen.

    also TXT 001 Inhalt:
    x
    y
    z

    data grid view:

    1.Zeile 2.Zeile 3.Zeile
    ....x.......y.........z.....

    PS.: Punkte diennen nur als platzhalter




    usw...




    könnt ihr ir bitte helfen ;(
    ich frag ja immer nach dem Datenmodell ;) .
    Offenbar soll aus jeder Datei ein Datensatz gemacht werden, und die Zeilen der Datei stellen die Spaltenwerte dar.
    Dann erste Frage: Haben auch alle diese Dateien dieselbe Zeilen-Zahl?
    Weil sonst bräuchtest du ja ein DGV mit "Flatter-Rand".
    also mein beispiel stellt jetzt bspw. 1.txt in reihe 1 mit den werten x, y und z dar.
    dass könnte jetzt bspw. mit datei 2.txt in reihe 2 mit den werten a, b und c weitergeführt werden.

    usw...

    PS: ich glaube ich brauche keinen Flatterrand, aber ne erklärung was das ist wäre nicht schlecht.
    Flatterrand ist ein Begriff aussm Buchdruck. Man kann Blocksatz machen, dann werden die wortzwischenräume so gedehnt, dass alle Zeilen gleich breit sind.
    Bei Flatterrand sind die Zeilen unterschiedlich breit, weil der Wort-Umbruch halt nicht immer mit derselben Zeichenzahl aufgeht.

    Beim DGV wäre Flatterrand, wenn die Zeilen verschieden viele Zellen enthielten - was aber praktisch kaum möglich ist.

    Aber deine text-Dateien haben immer zB 3 Zeilen, und daraus ergäbe sich dann ein 2-spaltiges DGV?

    Aber man sollte noch genauer hingucken, evtl. bedeuten in deine txt-Dinger ja die Zeilen auch was spezifisches, etwa zeile1 ist ein Name, zeile 2 ein Datum, zeile 3 eine Telefonnummer?

    Sowas wäre nützlich, beim Aufbau eines typisierten Datasets mit zu berücksichtigen, da ist möglich und vorgesehen, dass du am Ende Datensätze erhälst mit so sinnfälligen Properties wie
    Name As String
    BirthDay As DateTime
    Phone As String

    und sowas.
    Halt ein vernünftiges Datenmodell.


    Hach jeh! ich hab doch konkret danach gefragt, ob die Dateien alle dieselbe Zeilenzahl haben - ist das eiglich schwer zu beantworten?
    schon.
    Ich empfehleja ein typisiertes Dataset anzulegen, und das Zeug da einzuspielen. Kannstedann sogar abspeichern als eine Datei.
    Dazu bräuchteste nur eine DataTable darin anzulegen, mit so sinnigen Spalten wie
    Grundform
    Genitiv-Form
    Geschlecht
    Dekliniationsart
    ... usw.


    ZB Dekliniationsart ist doch nicht uninteressant - prinzipiell kann man aus sonem Ding auch alle unregelmäßigen Verben abfragen und so Zeugs - aber das käme erst im nächsten Schritt.

    Zunächstmal würden die SpaltenNamen, die du im Dataset definierst, automatisch im daran angebundenen DGV wieder auftauchen, nämlich als Spaltenüberschriften, und allein dafür tate sichs schon lohnen.

    guggemol Daten laden, speichern, verarbeiten
    Das ist natürlich weit mehr als deine Anforderung, aber nurmal, dassde son typ Dataset mal gesehen hast.
    Und wie man ein daran gebundenes DGV erstellt, steht da glaub auch, nämlich einfach aus dem Datenfenster die Tabelle aufs Form ziehen.
    Datenfenster kennste?
    Ansonsten gugge Tut :)

    Das einlesen von deine DateiOrdner wäre dann eine kleine Sub, aber die kann man erst schreiben, wenn das typDataset da ist.

    Kulki-See schrieb:

    ich bräuchte dafür glatt drei Jahre!

    also das Dataset ist in 10 min zusammengeklickst, und auch der Roh-Entwurf des Guis.

    Tückisch sind DataGridViewComboboxColumns, denn die verlangen die Existenz gültiger übergeordneter Datensätze.
    tückisch, weil
    1. Dataset.ReadXml kümmert sich nicht um die Reihenfolge, in der die Tabellen geladen werden. Dadurch sind im DGV schon Daten drin - die Combos sind aber noch garnet bereit.
      Deshalb die Methode Phonebook.SetDataLoading()
      Das ist aber außerdem eine effektive Beschleunigung bei LadeVorgängen.
    2. WinForms hat den Bug, dass beim Schließen erst die Components disposed werden (also auch die BindingSources), danach erst die Controls. Da meckern die ComboColumns auch rum, wenn man ihnen ihre DataSource unterm Hintern disposed.
      Deshalb die Methode Overrides Phonebook.Dispose()
      Dassis richtig tricky, denn diese Methode muß man aussm DesignerCode in den UserCode verschieben, und modifizieren.
    ist wahrscheinlich die blödeste aller fragen, aber ähm

    wie erstellt man eine XML-Datei in VB

    file.create(Beispiel.xml)

    oder wie??? ?(



    PS: du sprachst von typisierten DataSets, wie füge ich die denn im vorraus in mein Programm ein??? ich hab mir zwar mal ein Programmierbuch gekauft, aber das ist meistens sehr oberflächlich

    PPS: Wie kommst du den jetzt auf Comboboxen? Und wie kann man die nun verwenden? ich binnicht der typ programmierer, der dir in 10 minuten blind einen virus schreibt um Bill Gates' Privat PC zu hacken. :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Kulki-See“ ()

    1. Ich find die Frage nicht blöd. Hätteste glatt zum tut direkt stellen können.
      Antwort: Erstmal garnet.
      Du mußt nur einen Speicherpfad bestimmen, deine Anwendung laufen lassen, und dann auf Save klicksen.
      Vmtl. willst du schon im Form_Load Daten laden, das müssteste entweder zunächstmal auskommentieren, oder dort abfangen, wenn die Datei nicht existiert (fileInfo.Exists).

    2. Die Frage ist schon blöder, weil das steht im Tut direkt unter dem ersten Dataset-Bildchen, welches Menü da zu klicksen ist.

    3. Gugge Post#2 des Tuts, da werdense doch verwendet

    Ich hab das mit den ComboColumns übrigens noch nachgebessert im Post#2 des Tuts, und auch eine einfachere Lösung für den WinForm-Bug drangemacht (sowohl im Text als auch im Download)
    1: hätte ich machen können, stimmt

    2: achso, ich dachte Programmieren ist schwer, aber wenns so einfach is ... ich dachte nicht dass das schon alles ist. :thumbsup: sorry

    3: ich war noch mit TUT #1 beschäftigt

    OK, vielen Dank

    ich poste dann meine ergebnisse

    eine Frage noch zum Code:

    VB.NET-Quellcode

    1. Imports PersistData.DataSet1


    soll da dann stehen:

    VB.NET-Quellcode

    1. Imports Form1.vokabeldataset


    oder wieso nimmt er das nicht an?






    STATUS-REPORT (20:25):
    ... XML-Datei steht --- (abgeschlossen)
    ... DGV verknüpft --- (abgeschlossen)
    ... versuche nun mit Daten zu füllen --- (nicht abgeschlossen)
    ....... Fehler: Daten werden nicht geschrieben!
    ....... entsprechender Code:
    .......

    VB.NET-Quellcode

    1. Private Sub button_Speichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button_Speichern.Click Me.Validate() Vokabeln1.WriteXml(_Datafile.FullName) 'Me.Close() End Sub


    wo ist der Fehler???




    PS: Um zum eigentlichen Thema zurückzukehren:

    ich habe LektionsTXTs (001.txt, ....)
    deren Erste Zeile ihren Namen beinhaltet bspw. "Latein A-H", damit mehrere gleichnamige Datein erlaubt sind und besondere Zeichen wie "\".

    Die ersten zeilen sollen in die listbox...
    wenn ich nun einen Eintrag markieren und nen button klicke soll die entsprechende xml aufgehen.

    Meine übliche Frage: "Wie bewerkstellige ich das?"
    ich will nicht unbedingt code schnorren...


    um es in VB zu sagen:

    VB.NET-Quellcode

    1. Private Sub mein_Erfolg() Handles ich_glücklich_button.click
    2. Dim ich as String
    3. ich = "Ich nix glücklich"
    4. Dim Erfahrung as Integer
    5. Erfahrung = 0
    6. Dim Motivation as Integer
    7. Motivation = 100
    8. Dim Ergebnis as String
    9. Dim Ergebnis2 as Integer
    10. Dim Hilfeleistung as String
    11. Dim Hilfeleistung2 as Boolean
    12. Hilfeleistung = "Befehl mit Syntax und Beispiel" & vbcrlf& "Netter Antworter namens ErfinderDes Rades"
    13. if Hilfeleistung = "Befehl mit Syntax und Beispiel" & vbcrlf& "Netter Antworter namens ErfinderDes Rades" Then
    14. Hilfeleistung2 = True
    15. end if
    16. For each Versuch in this_programm
    17. Erfahrung = Erfahrung + 1
    18. Next
    19. Ergebnis2 = Erfahrung * Motivation
    20. If Ergebnis2 = 10000 and Hilfeleistung2 = True Then
    21. ich = "Ich sehr glücklich"

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Kulki-See“ ()

    STATUS-REPORT (20:25):
    ... XML-Datei steht --- (abgeschlossen)
    ... DGV verknüpft --- (abgeschlossen)
    ... versuche nun mit Daten zu füllen --- (nicht abgeschlossen)
    ....... Fehler: Daten werden nicht geschrieben!
    ....... entsprechender Code:
    .......

    VB.NET-Quellcode

    1. Private Sub button_Speichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button_Speichern.Click
    2. Me.Validate()
    3. Vokabeln1.WriteXml(_Datafile.FullName)
    4. Me.Close()
    5. End Sub



    wo ist der Fehler???

    <histeric> wo? wo!? </histeric>

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kulki-See“ ()

    setz dochma'n Haltepunkt drauf, und guck, ob der Code ausgeführt wird.
    und dann lösch die Datei, schreib sie neu, und guck im explorer, wie die Datei entsteht, die vorher nicht da war.
    man vertut sich leicht mit dateinamen.
    also genannte dann mal reingugge, und genannte datei bequemerweise auch in projekt einbinden (gugge tut)
    die datei entsteht aber hat nur die kopfzeile:


    XML-Quellcode

    1. <?xml version="1.0" standalone="yes"?>
    2. <Vokabeln xmlns="http://tempuri.org/Vokabeln.xsd" />





    Vielleicht bin ich ja blind, aber wo wird die datei nochmal eingebunden? also welche zeile?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Kulki-See“ ()

    ja, dann ist das Dataset, was du abspeicherst, wohl leer.
    vlt. speicherst du ein anderes Dataset ab, als das wo die Daten drin sind.

    das mittm Einbinden dient nur der Bequemlichkeit. Inne Sample-Solution des Tuts findest du eine eingebunden .xml-Datei wo die Daten meines Datasets drinne sind. Einbinden kann man über den Projekt-Explorer - hat aber wie gesagt, mitte Funktionalität nix zu tun.