einfache Lösung für 340 gleiche Problemchen gesucht...

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von Andy16823.

    einfache Lösung für 340 gleiche Problemchen gesucht...

    Hallo zusammen!

    ich bin noch gaaanz neu - und dementsprechend gering ist meine Ahnung im Umgang mit Programmiersprachen.
    Ich habe folgendes Probllem:

    Für ein Spiel habe ich eine .ini Datei mit Datensätzen zusammengetragen, die ich gern mit VB auslesen würde.
    Wie ich einzelne Zeilen aus einer .txt Datei in eine Listbox bekomme, weiß ich schon, und auch, wie ich den Inhalt angeklickter ListBoxItems als neue Datei abspeichere.

    meine "Datensätze" sehen wie folgt aus:

    "...
    ROW=05
    STR=05
    NAM=Huronen
    [ITEM0006]
    Bild=.\Theme_Cards\units\ITEM0006.bmp
    SON=0
    ABH=0
    ALL=1
    ZEI=REN
    KAT=08
    POS=A6
    KAM=05
    HAN=00
    KUL=00
    PRE=20
    ROW=10
    STR=05
    NAM=Irokesen
    [ITEM0007]
    Bild=.\Theme_Cards\units\ITEM0007.bmp
    SON=0
    ABH=1
    ALL=1
    ZEI=FRN
    KAT=01
    POS=A7
    KAM=00
    HAN=05
    KUL=15
    PRE=40
    ROW=05
    STR=15
    NAM=Louisiana
    [ITEM0008]
    Bild=.\Theme_Cards\units\ITEM0008.bmp
    ..."

    D.h. ein Satz reicht von [ITEMxxxx] zu [ITEMxxxx]

    Nun meine Frage: Wie bekomme ich es in VB hin, das, wenn ich in einer Listbox zB "Louisiana" anklicke,
    die Werte für Kampf, Handel, Kultur usw (KAM, HAN, KUL...) zB unter der Listbox in einer TextBox angezeigt werden?

    Zusatzfrage: wenn ich mehrere solcher Datensätze zusammenbündele (d.h. in irgendeiner Form zusammen abspeichere) die betreffenden Parameter addiert werden?

    Bevor ich aufgrund von Ahnungslosigkeit erschlagen werde:

    1. Ich habe google gefragt und nur unverständliches fach-chinesisch gefunden
    2. Ich habe mich durch Grundlagen-Tutorials gemüht, aber diese nicht verstanden. Es ist auch dort zuviel fachchinesich drin. ;(

    muß ich meine Datensätze anders formatieren? und wenn ja: wie?

    Vielen Dank im Voraus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Martin525“ ()

    Hey,

    willkommen im Forum!

    Du hast ganz richtig erkannt, dass es Datensätze sind. Datensätze speichert man nicht in .ini-Dateien. Jedenfalls würde mir kein Grund einfallen, dies zu tun. Hier ein Link, der Dich auf den richtigen Weg bringt.

    vb-paradise.de/allgemeines/tip…iten-einfachste-variante/

    Es womöglich nicht leicht, seinen Kopf da rein zu bekommen, gerade am Anfang. Jedoch erspart es Dir jede Menge Arbeit, wenn Du es begriffen hast.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Hm... den Thread hatte ich auch schon gefunden.
    Nur dummerweise habe ich keine ahnung wovon der Verfasser spricht. Das "datagridView" mir weiter helfen könnte, hatte ich mir auch schon ausgedacht - aber wie?
    -muß ich meine .ini in eine xml umwandeln? (geht ja immerhinn schnell und einfach)
    -was brauche ich für Steuerelemente um das erste beipsiel aus dem thread nachzuvollziehen?
    -wird das ganze durch einen Button ausgelöst? (zB der erste Beispiel Quellcode)
    -der erste Quellcode hatte bei mir schon 17 Fehler 8|

    ergo: ich weiß nicht mal wo ich anfangen muß. Das tutorial setzt einfach schon kenntnisse voraus, die ich nicht habe
    "Das Bild zeigt ein kleines typisiertes Dataset
    (Menü-Projekt-Hinzufügen-Dataset). Zu beachten vlt. die Einstellung
    AllowDBNull.False und der DefaultValue. So vermeidet man Fehler, die
    auftreten könnten, wenn ein Wert ühaupt nicht gesetzt wurde.

    Hingegen in anneren Szenarien (etwa in einem Addressbuch) mag es grade
    gewünscht sein, für einige Spalten auch ungesetzte Werte zulassen zu
    können
    ."
    (aus dem Tutorial text hab ich mal alles unterstrichen, was ich nicht verstehe...)
    Nun, ich denke, es fehlt Dir generell an Grundlagen. Darum microsoft.com/germany/msdn/akt…005DasEntwicklerbuch.aspx

    Setz Dich erstmal damit auseinander. Wenn das sitzt, dann weißt Du auch, wovon geredet wird. Besser gesagt, Du hast das Wissen, um Dir weiteres Wissen anzueignen.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Das Buch hab ich mir schon gezogen... wenn ichs verstanden hätte, hätte ich nichts gepostet :(
    (es ist ja nicht so das ich komplett dämlich wäre - aber ich dachte schon, alt-griechisch zu lernen wär kompliziert. Ich kann nur mit den vielen abstrakten Begriffen nichts anfangen... alles was ich brauche ist nur ne kleine Auflistung an den notwendigen Befehlen - die ich dann gern selbst mit try&error zusammenbasteln will... :rolleyes:
    Man lernt auch nicht altgriechisch, indem man gleich anfängt, altgriechische Tageszeitungen lesen zu wollen. Dann jemanden fragen, übersetz mir nur die 2 Wörter hier und den Rest reime ich mir selber zusammen. Weißt Du, wo das endet? Du wirst immer wieder jemand anders fragen: "Ach bitte übersetz mir nur diese 2 Wörter, den Rest mach ich selber". Nope. Grundlagen lernen, an kleinen Beispielen selber probieren und nicht gleich mit sowas ankommen. Das Forum ist nicht dazu da, Deine Faulheit zu unterstützen. Das Forum unterstützt Dich gerne bei Fragen auf Deinem Weg, die Sprache zu lernen. Wir schreiben Dir aber keinen Code und erklären Dir auch keine Dinge, die Du offensichtlich nicht verstehen kannst, weil es Dir an Grundlagen fehlt.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    wenn du dich mal sauber durch das buch durcharbeitest, jedes einzelne kapitel ließt von vorne an, und nciht nur dir sachen herauspicken willst, dann wirst du auch nach und nach verstehen. es wird zeit in anspruch nehmen, doch die zeit ist besser investiert, als in millionen try&error versuche, die durch das buch erst garnicht entstanden wären.

    eines Tages (noch ist sie sicherlich unverständlich) wird auch die MSDN ein guer freund von dir werden. dort kannst du dir jede einzelne Klasse des Frameworks ansehen und studieren. auch hier gilt, wer hier zeit investiert, kann u.U. viel zeit rausholen.
    Deine Daten

    Martin525 schrieb:

    "...
    ROW=05
    STR=05
    NAM=Huronen
    [ITEM0006]
    Bild=.\Theme_Cards\units\ITEM0006.bmp
    SON=0
    ABH=0
    ALL=1
    ZEI=REN
    KAT=08
    POS=A6
    KAM=05
    HAN=00
    KUL=00
    PRE=20
    ROW=10
    STR=05
    NAM=Irokesen
    [ITEM0007]
    Bild=.\Theme_Cards\units\ITEM0007.bmp
    SON=0
    ABH=1
    ALL=1
    ZEI=FRN
    KAT=01
    POS=A7
    KAM=00
    HAN=05
    KUL=15
    PRE=40
    ROW=05
    STR=15
    NAM=Louisiana
    [ITEM0008]
    Bild=.\Theme_Cards\units\ITEM0008.bmp
    ..."

    Das ist doch im Grunde eine Tabelle, mit den Spalten
    TEM0007, Bild, SON, ABH, ALL, ZEI, KAT, POS, KAM, HAN, KUL, PRE, ROW, STR, NAM
    Das wäre als erstes in einem typDataset als Tabelle anzulegen.
    Jo, und sobald son typDataset fertig angelegt ist, kannmans auch laden, speichern, editieren - wie im Tut gezeigt.
    auf vier Views-Videos, Film1 wird gezeigt, wie man sowas anlegt.

    Martin525 schrieb:

    -der erste Quellcode hatte bei mir schon 17 Fehler 8|
    Das hat nicht viel Sinn, iwelche Codesnippets aussm Tut-Text rauszukopieren. Sondern, um zu begreifen, wies tickt, musste den Sample-Code downloaden

    ein kleines Problem...

    Liebe Leute!

    1. entschuldige ich mich in aller Form für meine Ungeduld in den vorigen Posts... seit dem ist zeit vergangen, in denen ich einiges dazu gelernt habe. Die oben beschriebenen Probleme haben sich alle erledigt.

    2. dafür kaue ich nun auf einem anderen Problem herum, für das ich kein neues Thema aufmachen will.

    folgendes: Ich habe ein Panel mit 340 Buttons ("a1", "a2" usw.)
    nun möchte ich, das beim klick auf einen dieses buttons eine (bzw. mehrere) zeilen aus einer Textdatei geladen werden, die den gleichen namen haben (ebenfalls a1, a2 usw).
    Ich könnte natürlich für jeden Knopf das betreffende event schrieben, aber das wäre etwas langatmig..

    meine Lösungsidee, das ganze zu verkürzen, scheitert jedoch...

    VB.NET-Quellcode

    1. Sub knopp()
    2. For Each c As Control In GroupBox1.Controls()
    3. If TypeOf (c) Is Button Then
    4. Dim Lines() As String = IO.File.ReadAllLines("C:\Dokumente und Einstellungen\Martin\Desktop\S_a_R\NOVA CARTAE" & c.Name & ".ini")
    5. Label1.Text = Lines(14)
    6. End If
    7. Next
    8. End Sub
    9. Private Sub c_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBox1.Click
    10. knopp()
    11. End Sub
    12. End Class


    Ich würde mich freuen, wenn mir jemand einen Tipp geben könnte :)
    340 Buttons?

    Da frage ich mich ob es nicht einfacher wäre das Design zu ändern.
    z.B. eine Listebox mit 340 Einträgen und einen Button.

    Der Button öffnet dann die Datei entsprechend der Auswahl der Listbox
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    hm... die Buttons müssen schon sein, da es sich um ein Spielfeld handelt
    (hier meine vorgängerversion mit 256 buttons).
    Und wenn auf einen dieser Buttons geclickt wird, soll sollen die Infos der betreffenden Spielkarte angezeigt werden.

    (zuzügl. eines If Hintergrundfarbe = was anderes als black then zeig mir was an <- aber das ist ja sehr einfach zu machen, und nicht mein aktuelles probelm ;) )

    könnte ich... da ich aber (trotz aller Fortschritte) immer noch ein Anfänger bin, such ich nur eine geignete Methode wie ich dem Programm sage, das es beim Button-Click den Button namen nimmt, und diesen
    als Variable am Pfad-Ende bei der zu lesenden Datei benutzt. Damit wäre mir für die nächsten Tage schon sehr geholfen...
    Ich hatte das ganze schon mal gelöst, da hatte ich aber ALLE einzelnen Dateien bzw. deren Zeilen in eine große Datei geschrieben. Und jedem Button waren dann per ReadAllLines -> Lines() jeeils ein Bolck von 15 Zeilen zugewiesen. Nun hat aber jede r Button seine eigene Textdatei (bzw.ini))... :whistling:
    Hy so müsste es gehen
    du schreibst deine datei zeiele für zeile in eine List of String und dann so

    VB.NET-Quellcode

    1. Dim list As List(Of String)
    2. Dim z As Integer = 0
    3. Dim start As Integer
    4. Dim ende As Integer
    5. Dim handel As String
    6. Dim kultur As String
    7. For Each item As String In list
    8. If item.Contains("NAM=Louisiana") Then
    9. ' Start des Items
    10. For i = z To 0
    11. If list.Item(i).StartsWith("[ITEM") Then
    12. start = i
    13. Exit For
    14. End If
    15. Next
    16. ' Ende des Items
    17. For i = z To list.Count
    18. If list.Item(i).StartsWith("[ITEM") Then
    19. ende = i
    20. Exit For
    21. End If
    22. Next
    23. ' Schleife Beenden
    24. Exit For
    25. End If
    26. z += 1
    27. Next
    28. ' Durchlaufen von Start nach ende
    29. For i = start To ende
    30. If list.Item(i).Contains("KUL") Then
    31. kultur = list.Item(i).Split("=").GetValue(1)
    32. ElseIf list.Item(i).Contains("HAN") Then
    33. handel = list.Item(i).Split("=").GetValue(1)
    34. End If
    35. Next
    36. MessageBox.Show(kultur & " " & handel)
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    @Martin525

    Doch das geht.
    Du kannst im Designer alle Button markieren und dann in den Eigenschaften bei den Events das "Click"-Event auswählen.
    Anschließend kannst du den Text des Buttons mit sender.text ermitteln.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Ahhhhh :) Danke.... das werde ich sofort ausprobieren! :thumbup:


    Edit:
    @Schamash

    bin jetzt nur einen halben Schritt weiter:

    VB.NET-Quellcode

    1. Public Class BuyFieldB
    2. Private Sub CloseB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloseB.Click
    3. My.Computer.Audio.Play(bazi & "Sounds\klick.wav", AudioPlayMode.Background)
    4. Me.Close()
    5. Zentrum.Show()
    6. End Sub
    7. Public bazi As String = "C:\Dokumente und Einstellungen\Martin\Desktop\S_a_R"
    8. 'Public neima As String = "NOVAE IMAGINES"
    9. Public necad As String = "NOVA CARTAE"
    10. Sub knopp()
    11. For Each c As Control In KarteP1.Controls()
    12. If TypeOf (c) Is Button Then
    13. Dim Lines() As String = IO.File.ReadAllLines(bazi & necad & Sender.Text & ".ini")
    14. NaL.Text = Lines(14)
    15. End If
    16. Next
    17. End Sub
    18. Private Sub c_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles T9.Click, T8.Click, T7.Click, T6.Click, T5.Click, T4.Click, T3.Click, T2.Click, T17.Click, T16.Click, T15.Click, T14.Click, T13.Click, T12.Click, T11.Click, T10.Click, T1.Click, S9.Click, S8.Click, S7.Click, S6.Click, S5.Click, S4.Click, S3.Click, S2.Click, S17.Click, S16.Click, S15.Click, S14.Click, S13.Click, S12.Click, S11.Click, S10.Click, S1.Click, R9.Click, R8.Click, R7.Click, R6.Click, R5.Click, R4.Click, R3.Click, R2.Click, R17.Click, R16.Click, R15.Click, R14.Click, R13.Click, R12.Click, R11.Click, R10.Click, R1.Click, Q9.Click, Q8.Click, Q7.Click, Q6.Click, Q5.Click, Q4.Click, Q3.Click, Q2.Click, Q17.Click, Q16.Click, Q15.Click, Q14.Click, Q13.Click, Q12.Click, Q11.Click, Q10.Click, Q1.Click, P9.Click, P8.Click, P7.Click, P6.Click, P5.Click, P4.Click, P3.Click, P2.Click, P17.Click, P16.Click, P15.Click, P14.Click, P13.Click, P12.Click, P11.Click, P10.Click, P1.Click, O9.Click, O8.Click, O7.Click, O6.Click, O5.Click, O4.Click, O3.Click, O2.Click, O17.Click, O16.Click, O15.Click, O14.Click, O13.Click, O12.Click, O11.Click, O10.Click, O1.Click, N9.Click, N8.Click, N7.Click, N6.Click, N5.Click, N4.Click, N3.Click, N2.Click, N17.Click, N16.Click, N15.Click, N14.Click, N13.Click, N12.Click, N11.Click, N10.Click, N1.Click, M9.Click, M8.Click, M7.Click, M6.Click, M5.Click, M4.Click, M3.Click, M2.Click, M17.Click, M16.Click, M15.Click, M14.Click, M13.Click, M12.Click, M11.Click, M10.Click, M1.Click, L9.Click, L8.Click, L7.Click, L6.Click, L5.Click, L4.Click, L3.Click, L2.Click, L17.Click, L16.Click, L15.Click, L14.Click, L13.Click, L12.Click, L11.Click, L10.Click, L1.Click, K9.Click, K8.Click, K7.Click, K6.Click, K5.Click, K4.Click, K3.Click, K2.Click, K17.Click, K16.Click, K15.Click, K14.Click, K13.Click, K12.Click, K11.Click, K10.Click, K1.Click, J9.Click, J8.Click, J7.Click, J6.Click, J5.Click, J4.Click, J3.Click, J2.Click, J17.Click, J16.Click, J15.Click, J14.Click, J13.Click, J12.Click, J11.Click, J10.Click, J1.Click, I9.Click, I8.Click, I7.Click, I6.Click, I5.Click, I4.Click, I3.Click, I2.Click, I17.Click, I16.Click, I15.Click, I14.Click, I13.Click, I12.Click, I11.Click, I10.Click, I1.Click, H9.Click, H8.Click, H7.Click, H6.Click, H5.Click, H4.Click, H3.Click, H2.Click, H17.Click, H16.Click, H15.Click, H14.Click, H13.Click, H12.Click, H11.Click, H10.Click, H1.Click, G9.Click, G8.Click, G7.Click, G6.Click, G5.Click, G4.Click, G3.Click, G2.Click, G17.Click, G16.Click, G15.Click, G14.Click, G13.Click, G12.Click, G11.Click, G10.Click, G1.Click, F9.Click, F8.Click, F7.Click, F6.Click, F5.Click, F4.Click, F3.Click, F2.Click, F17.Click, F16.Click, F15.Click, F14.Click, F13.Click, F12.Click, F11.Click, F10.Click, F1.Click, E9.Click, E8.Click, E7.Click, E6.Click, E5.Click, E4.Click, E3.Click, E2.Click, E17.Click, E16.Click, E15.Click, E14.Click, E13.Click, E12.Click, E11.Click, E10.Click, E1.Click, D9.Click, D8.Click, D7.Click, D6.Click, D5.Click, D4.Click, D3.Click, D2.Click, D17.Click, D16.Click, D15.Click, D14.Click, D13.Click, D12.Click, D11.Click, D10.Click, D1.Click, C9.Click, C8.Click, C7.Click, C6.Click, C5.Click, C4.Click, C3.Click, C2.Click, C17.Click, C16.Click, C15.Click, C14.Click, C13.Click, C12.Click, C11.Click, C10.Click, C1.Click, B9.Click, B8.Click, B7.Click, B6.Click, B5.Click, B4.Click, B3.Click, B2.Click, B17.Click, B16.Click, B15.Click, B14.Click, B13.Click, B12.Click, B11.Click, B10.Click, B1.Click, A9.Click, A8.Click, A7.Click, A6.Click, A5.Click, A4.Click, A3.Click, A2.Click, A17.Click, A16.Click, A15.Click, A14.Click, A13.Click, A12.Click, A11.Click, A10.Click, A1.Click
    19. knopp()
    20. End Sub


    " Sender.text " ist nicht deklariert - und egal welches Knopf ich drücke, es wird immer "A1 ausgeführt (
    dh. es wird mir im betreffenden Label "alaska" angezeigt, was der a1.ini entspricht. Allerdings auch dann, wenn ich jeden anderen Button drücke...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Martin525“ ()

    Ich würde das mit Addhandler lösen. Sind so viele Buttons wirklich sinnvoll? ComboBoxen oder Listviews kannste auch zum auswählen nehmen.

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    2. For Each btn As Button In GroupBox1.Controls.OfType(Of Button)()
    3. AddHandler btn.Click, AddressOf Button_Clicks
    4. Next
    5. End Sub
    6. Private Sub Button_Clicks(sender As Object, e As EventArgs)
    7. Dim b As Button = DirectCast(sender, Button)
    8. Dim Lines() As String = IO.File.ReadAllLines("C:\Dokumente und Einstellungen\Martin\Desktop\S_a_R\NOVA CARTAE" & b.Text & ".ini")
    9. Label1.Text = Lines(14)
    10. End Sub


    *Dieses und das nachfolgende Posting wurden aus anderem Thread hierher verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()