Text aus .txt-Datei einlesen und aktualisieren

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von picoflop.

    Text aus .txt-Datei einlesen und aktualisieren

    hallo zusammen, ich bin dabei ein programm zu schreiben, welches einen text aus einer .txt-Datei einliest, dies funktioniert auch soweit, nun will ich aber das, wenn ich den text in dieser .txt-datei änder das dieser auch in dem Programm geändert wird (ohne das ich das Programm neu starten muss).

    Vielen Dank schon mal, peeen ;-)
    Eigentlich gar nicht so schwer - und auf jeden Fall die bessere Lösung als ein timer:

    msdn.microsoft.com/de-de/libra…systemwatcher(VS.80).aspx

    VB.NET-Quellcode

    1. Dim myFSW As New System.IO.FileSystemWatcher 'neuer Watcher
    2. myFSW.EnableRaisingEvents = True 'Events -> Ja
    3. myFSW.Path = "C:\MeinOrdner" ' Pfad wo die Datei liegt
    4. myFSW.NotifyFilter = IO.NotifyFilters.LastWrite 'Nur Dateiänderungen
    5. AddHandler myFSW.Changed, AddressOf FileUpdated 'Event zuweisen


    VB.NET-Quellcode

    1. Private Sub FileUpdated(ByVal source As Object, ByVal e As System.IO.FileSystemEventArgs)
    2. 'ggf noch prüfen ob e.Name die "zu überwachende" Datei ist.
    3. MsgBox(e.FullPath & " has been changed. i think i must reload the file")
    4. End Sub
    so ganz hab ich das immer noch nicht verstanden. hier wird jetzt meine datei eingelesen...

    VB.NET-Quellcode

    1. Function eingabe()
    2. Dim a
    3. eingabe = InputBox("Markt") 'Marktnummer eingeben
    4. Const ForReading = 1
    5. Dim fso
    6. fso = CreateObject("Scripting.FileSystemObject")
    7. a = fso.OpenTextFile("c:\" & eingabe & ".txt", ForReading)
    8. eingabe = a.ReadAll
    9. End Function


    und wie muss das jetzt aussehen das diese immer aktualisiert werden muss?
    Was ist das für eine besch...eidene Funktion? Hast du dir die selber zusammen gestellt oder woher hast du so ein murks?

    VB.NET-Quellcode

    1. Function Eingabe() As String
    2. Dim Markt As String = InputBox("Markt")
    3. Dim Datei As String = "c:\" & Markt & ".txt"
    4. Dim Text As String = ""
    5. If System.IO.File.Exists(Datei) Then
    6. Text = System.IO.File.ReadAllText(Datei)
    7. Return Text
    8. Else
    9. MessageBox.Show("Datei existiert nicht")
    10. End If
    11. Return Nothing
    12. End Function


    So ist das wenignstens mal eine anständige Funktion.
    Ansonsten kommt der Aufruf dieser Funktion in die Sub Routine die ausgeführt wird wenn sich die Datei ändern, in dem oben genannten Beispiel FileUpdated.
    Also ein bischel sollte man sich schon damit auseinander setzten. Vielleicht zuvor mal das Galileo OpenBook zu VB.NET lesen, weil du scheinst noch nichtmal die Basics zu kennen, was sich bei so einem Vorhaben doch sehr nachteilig auswirkt und wir nur sehr ungern einen fertigen Copy und Paste Code vorkauen, den der Fragesteller eh nicht versteht, ihn übernimmt und später dann noch hunderte folgefragen stellt, weil er eben nichts versteht was er dort tut.
    so ich habe grade festgestellt, dass dieser filesystemwatcher für mich das falsche tool ist, da ich das programm an mehrer user-PCs verteilen möchte die jeweils alle auf andere .txt-dateien zurückgreifen. aber so käm ja dann bei jeder änderung einer .txt-datei eine aufforderung an alle user ihre eigene datei neu zu laden. die ganzen dateien sollen nämlich im gleichen ordner sein und ich habe keine lust hunderte male das programm zu ändern.....also denk ich für mich wäre es besser wenn ich den timer benutzen würde, dabei ist aber das problem, das der dann immer wieder nach der marktnummer fragt, aber trotzdem die datei nicht neu lädt.

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

    folgend sieht der code aus, dabei geht die abfrage für den markt immer wieder auf:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private WithEvents t As New System.Windows.Forms.Timer With {.Enabled = False, .Interval = 25}
    3. Function Eingabe() As String
    4. Dim Markt As String = InputBox("Markt")
    5. Dim Datei As String = "c:\" & Markt & ".txt"
    6. Dim Text As String = ""
    7. If System.IO.File.Exists(Datei) Then
    8. Text = System.IO.File.ReadAllText(Datei)
    9. Return Text
    10. Else
    11. MessageBox.Show("Datei existiert nicht")
    12. End If
    13. Return Nothing
    14. End Function
    15. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    16. Dim s As String = eingabe()
    17. While TextRenderer.MeasureText(s, TextBox1.Font).Width < TextBox1.Width
    18. s &= " "
    19. End While
    20. s = s.Substring(0, s.Length - 1)
    21. TextBox1.Text = s
    22. TextBox1.ReadOnly = True
    23. t.Enabled = True
    24. End Sub
    25. Private Sub t_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles t.Tick
    26. Dim s As String = TextBox1.Text
    27. Dim c As Char = s(s.Length - 1)
    28. TextBox1.Text = c.ToString & s.Substring(0, s.Length - 1)
    29. End Sub
    30. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    31. Dim x As String
    32. x = eingabe()
    33. End Sub
    34. End Class

    peeen schrieb:

    habe kb das bei jedem zu ändern

    Nur weil du absolut Null Plan vom Programmieren hast, must du nicht annehmen, dass eine dir vorgestellte Lösung unkorrekt ist. Du solltest vielmehr vermuten, dass du offensichtlich noch sehr viel zu lernen hast, bevor du auch nur ansatzweise eine qualifizierte Meinung hast.

    Am besten fängst du mal an zu lernen, was eine "Variable" ist.

    BTW: Ich KÖNNTE dir den Code schreiben ... aber das tue ich mit Sichernicht NICHT!
    Hier rastet doch keiner aus.

    Er hat dir nur erklärt, dass deine "Annahme" der FSW wäre ungeeignet nicht stimmt.

    Ferner platzierst du hier einfach deinen Code, frei nach dem Motto: "Das geht nicht, macht mal, dass das geht".

    Besser wäre es, Eigeninitiative zu zeigen.

    - Wie hast du es versucht?
    - Warum glaubst du es geht nicht auf mehrere Computern?
    - tauchen Fehler(Meldungen) auf?
    - etc.

    Aber das wichtigste: Mitdenken

    - Warum geht die Abfrage für den Markt immer wieder auf?
    - Wo muss sie hin, damit es nicht passiert?
    - Muss ich vielleicht doch noch was am Code umschreiben?

    Wie gesagt kannst du ein Programm entsprechend dem Computer durch nutzereingaben anpassen.
    Oder hast du schonmal gesehen, dass Windows für jeden Computer individuell programmiert wird?

    Ich nicht...

    peeen schrieb:

    warum rastest du so aus?

    Weil du immer wieder behauptest: geht nicht!, wenn du doch fragen solltest: wie geht das?
    Außerdem haben deine bisherigen Code-Schnipsel gezeigt, dass du offensichtlich bislang noch nicht die Bürde auf dich genommen hast, mal ein gutes Buch zum Thema "Programmieren mit VB.Net" zu lesen. Denn dir fehlen offensichtlich noch so viele GRUNDLAGEN, dass man dir kaum sinnvoll helfen kann, ohne dir den kompletten Code zu geben.
    Außerdem hast du bislang dein Gesamtproblem nur unzureichend beschrieben, da zb völlig unklar ist, welche Rolle die anderen PCs spielen und warum die Datei heißt, wie sie heißt.