In eine bestimmte zeile einer datei etwas schreiben

  • VB.NET

Es gibt 40 Antworten in diesem Thema. Der letzte Beitrag () ist von klopfie.

    In eine bestimmte zeile einer datei etwas schreiben

    Hey
    Vielen dank erstmal das so schnell eine antwort auf mein erstes thema gekommen ist :)
    Jetzt habe ich ein neues Problem , google habe ich schon durchsucht finde aber nix verwertbares oder verstehe es nicht.

    Ich möchte in eine datei in jede zeile ein bestimmten befehl schreiben z.b. soll in zeile 5 "hallo" stehen
    dass sollte dann gespeichert werden und in zeile 10 soll dann "heyho " stehen

    ich habe bisher

    VB.NET-Quellcode

    1. Private Karte_setzen() As String = IO.File.WriteAllLines("C:\Test\haus", lines)
    2. Private lines(42)
    3. Private sub setzen()
    4. lines(4)="Hallo"
    5. Karte_setzen()
    6. end sub


    Geschreiben weiss aber nicht wo der fehler liegt

    Vielen dank schonmal im vorraus

    Mit freundlichen Grüßen

    Domenic Drechsel

    *Topic verschoben (WPF->Grundlagen)*

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

    Ich verstehe den Code irgendwie garnicht.

    Du deklarierst nen Stringarray... Soweit sogut. Aber du weist ihm etwas zu... Aber WriteAllLine SCHREIBT etwas IN ne Datei und liest sie nicht Oo

    Dann deklarierst du dir lines (wohl gemerkt... danach) als Array (welchen Typs auch immer) mit der Anzahl von 43 Feldern...
    Nun hast du nen Sub namens setzen (der nirgendwo aufgerufen wird), welcher in die Variable lines an der stelle 5 (index 4) ein Hallo schreibt, welches vermuten lässt, dass du lines als String deklarieren wolltest...
    Nun rufst du Karte_Setzen auf, welches ne Variable ist und keine Routine!

    Mach mal Option Strict ON!!!! Dann knallt dir ein Fehler nach dem Anderen um die Ohren!

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim Zeile(255) As String 'Erstellen eines 256 Zeilen großen Arrays
    3. Zeile(5) = "Test" 'schreiben in Zeile 6
    4. Zeile(12) = "Test2" 'schreiben in Zeile 13
    5. System.IO.File.WriteAllLines(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "Test.txt"), Zeile) 'speichern unter eigene Dateien
    6. End Sub
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

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

    Ok... das hört sich wirklich sinnlos an was ich da geschreiben habe
    aber im internet habe ich so etwas in der art gefunden und dachte ich , hey da stehen die befehle drin , habe mir die rausgezogen und versucht dass irgend wie anzupassen
    Erstmal musst du lernen zu unterscheiden zwischen
    Sub
    Function
    Variablen (Integer, Long, Double, Char, String, Boolean...)

    Ne Sub kann man aufrufen (mit oder ohne Parameterübergabe)... Sie tut was und das wars...
    ZB

    VB.NET-Quellcode

    1. Private Sub LoescheTxt
    2. System.IO.File.Delete("Test.txt")
    3. End Sub


    Oder

    VB.NET-Quellcode

    1. Private Sub LoescheTxt(ByVal Datei As String)
    2. System.IO.File.Delete(Datei )
    3. End Sub


    Eine Function ist ähnlich wie ne Sub... Ihr kannst du aber einen Wert als Antwort zurück geben...

    VB.NET-Quellcode

    1. Private Function LoescheTxt(ByVal Datei As String) As Boolean
    2. If System.IO.File.Exists(Datei) Then
    3. System.IO.File.Delete(Datei)
    4. return True
    5. Else
    6. return False
    7. End If
    8. End Function


    Variablen sind dagegen einfach nur Orte wo du was rein speichern kannst... Wie in den obigen Beispielen die Variable "Datei" mit dem Typ String (Text).

    EDIT: Kurz korrigiert... Tippfehler XD Immer dieses erklären und telefonieren gleichzeitig XD
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Naja du rufst ja ne Sub oder Function von wo anders auf...
    ZB: wieder nen Button Klick:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim Zeile(255) As String 'Erstellen eines 256 Zeilen großen Arrays
    3. Dim TextDatei As String = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "Test.txt")
    4. Zeile(5) = "Test" 'schreiben in Zeile 6
    5. Zeile(12) = "Test2" 'schreiben in Zeile 13
    6. If loescheDatei(TextDatei) = True Then MessageBox.Show("Die Datei existierte schon und wurde soeben zur Neuerstellung gelöscht!")
    7. System.IO.File.WriteAllLines(TextDatei, Zeile) 'speichern unter eigene Dateien
    8. End Sub
    9. Private Function loescheDatei(ByVal Datei As String) As Boolean
    10. If System.IO.File.Exists(Datei) Then
    11. System.IO.File.Delete(Datei)
    12. Return True
    13. Else
    14. Return False
    15. End If
    16. End Function
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    @klopfie
    Vielleicht hast du das in der Schule im Informatik Untericht mal gemacht. Oft sind Funktionen in Visual Basic "Getter". D.h. sie geben einen Wert zurück.
    Du sagst also: Private Function test() as Boolean oder Public Function test() as String. Hinten dran kommt der Datentyp, den du zurück bekommen willst/sollst.
    Mit der Zeit lernt man wie man Code in z.B Functions auslagern kann. Achte allerdings drauf, dass alles vernünftige Namen bekommt.
    So kann man sich sehr viel zum Nutzen machen und den Rückgabewert anpassen. Hier ein Beispiel wenn man überprüfen will ob der Vorgang geklappt hat.

    VB.NET-Quellcode

    1. Public Function ioFileWrite(ByVal text As String) As String
    2. Try
    3. IO.File.WriteAllText("path", text)
    4. Return "geklappt"
    5. Catch ex As IO.InvalidDataException
    6. Return ex.Message
    7. End Try
    8. End Function
    9. Public Sub write()
    10. MessageBox.Show(ioFileWrite("Hallo"))
    11. End Sub
    Ah ok vielen dank

    Ein problem habe ich noch

    Undzwar wenn ich durch den wert der in der datei steht verschiedene bilder lade wird der wert nicht aktualisiert also was in der zeile steht.
    wie kann ich das realtisieren dass er die datei immer wieder neu lädt ?
    also neu abfragt ?
    Hier ist die Frage, wann, wie und wo lädst du Bilder von der Datei.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Bilder laden

    VB.NET-Quellcode

    1. Private Sub karte_bauen1()
    2. If übergabe = "" Then
    3. rückgabe = New BitmapImage(New Uri("C:\Test\Images\gras.png"))
    4. ElseIf übergabe = "Holz" Then
    5. rückgabe = New BitmapImage(New Uri("C:\Test\Images\Holz.png"))
    6. ElseIf übergabe = "Stein" Then
    7. rückgabe = New BitmapImage(New Uri("C:\Test\Images\Stein.png"))
    8. ElseIf übergabe = "Eisen" Then
    9. rückgabe = New BitmapImage(New Uri("C:\Test\Images\Eisen.png"))
    10. End If
    11. End Sub

    die bilder liegen in dem gleichen verzeichnis wie die datei

    Erst klickt der user auf ein button (es gibt mehrere), dann lädt sich so eine art "karte" die aus labels besteht ,dann soll er auf einen punkt auf der karte (die karte besteht aus labels)drücken, dann wird in eine variable (second) reingeschreiben welche position das ist also einseins/einszwei usw....
    diese variable wird gecheckt und je nachdem was dadrin steht soll er eine zeile in dem textdokument raussuchen und reinschreiben welcher button das ist
    Okay, darf ich fragen wo du
    übergabe
    und
    rückgabe

    Definiert hast? Und wie?

    Ich selber kenne BitmapImage nicht (könnte sein weil ich net WPF programmiere?!)
    Aber eigentlich wäre hier eine Function und kein Sub zu benutzen...

    Erweiterung:
    Ich hätte es vom Sinn her so gebaut:

    VB.NET-Quellcode

    1. Private Function karte_bauen1(uebergabe As String) As Bitmap
    2. If uebergabe = "" Then
    3. karte_bauen1 = New Bitmap("C:\Test\Images\gras.png")
    4. ElseIf uebergabe = "Holz" Then
    5. karte_bauen1 = New Bitmap("C:\Test\Images\Holz.png")
    6. ElseIf uebergabe = "Stein" Then
    7. karte_bauen1 = New Bitmap("C:\Test\Images\Stein.png")
    8. ElseIf uebergabe = "Eisen" Then
    9. karte_bauen1 = New Bitmap("C:\Test\Images\Eisen.png")
    10. Else
    11. karte_bauen1 = Nothing
    12. End If
    13. End Function
    14. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    15. PictureBox1.Image = karte_bauen1("Holz")
    16. End Sub


    Bin mir aber nicht sicher was du da schon alles geschrieben hast. Was du mit karte_bauen1 so machst... Wie du sie aufrufst und was du mit dem Bild machen willst?
    Mein Beispiel schreibt da sentsprechende Bild einfach in ne PictureBox auf der Form mit dem Namen PictureBox1
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

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

    Schau mal oben was ich als Edit geschrieben hab. Kannst du damit was anfangen?

    Die gekürzte Form davon wäre:

    VB.NET-Quellcode

    1. Private Function karte_bauen1(uebergabe As String) As Bitmap
    2. If uebergabe = "" then
    3. karte_bauen1 = New Bitmap("C:\Test\Images\gras.png")
    4. else
    5. karte_bauen1 = New Bitmap(System.IO.Path.Combine("C:\Test\Images", String.Concat(uebergabe, ".png")))
    6. End if
    7. End Function
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Das ist die Frage ;)

    Wohin schreibst du denn die neu erstellten Bildchen? Die müssen ja irgendwo hin oder nicht? Oder ist bei WPF ein BitmapImage sowas wie bei WinForms eine PictureBox?

    Ich mach mir eben mal ne WPF anwendung XD
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Soooo XD

    Ich hab mir einfach mal ne WPF Anwendung gemacht...
    Hab auf die Form nen Button und nen Image gezogen

    Der Button heißt also Button1 und das Image heißt Image1

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
    2. Me.Image1.Source = karte_bauen1()
    3. End Sub
    4. Private Function karte_bauen1(Optional ByVal uebergabe As String = "") As BitmapImage
    5. If uebergabe = "" Then
    6. karte_bauen1 = New BitmapImage(New Uri("C:\Test\Images\gras.png"))
    7. Else
    8. karte_bauen1 = New BitmapImage(New Uri(System.IO.Path.Combine("C:\Test\Images", String.Concat(uebergabe, ".png"))))
    9. End If
    10. End Function


    Das wäre ein Code um das Bild aus C:\Test\Images\gras.png im Image darzustellen.

    VB.NET-Quellcode

    1. Me.Image1.Source = karte_bauen1("Keks")

    würde hingegen das Bild C:\Test\Images\Keks.png
    darstellen
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    ok dann mach dir mal 2 buttons
    1 button = lädt 2 Images und macht sie sichtbar und fragt ab ob in zweile 1 und 2 (die jeweils für Image eins und 2) stehen etwas drinsteht
    und wenn etwas drinsteht soll der ein anderes bild nehmen.
    2 button = lädt die zwei Images auch und dann mus sman auf ein abel klicken, daraufhin schreibt er in die datei rein in zeile 1 (z.b.) i was rein

    2 Images
    1 Image= bild 1 und wenn in zeile 1 etwas drinsteht bild 2
    2 Image= bild 1 und wenn in zeile 1 etwas drinsteht bild 2


    und dann soll der immerwieder abfragen nach jedem buttonclick ob etwas in der datei drinsteht

    PS: vielen dank für deine hilfe

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „klopfie“ () aus folgendem Grund: Labels in images geändert

    Für nen WPF neuling. Wie lässt du denn nen Bild in nem Label anzeigen. Ich dachte in WPF geht das nur im Image.
    Oder kann man das verschachteln?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D