Abfrage eines Dateiinhaltes mit anschließender Reaktion

  • VB.NET

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von Otti.

    Abfrage eines Dateiinhaltes mit anschließender Reaktion

    Hallo und guten Tag zusammen...
    Habe eine für Euch vermutlich, einfache Frage...

    Ich habe eine txt.* auf einem Server liegen die ich vom Inhalt her abfrage. Abgefragt wird, ob Status EIN oder AUS.
    Dies setze ich wie folgt um:

    VB.NET-Quellcode

    1. ​Dim MeineStringLicht As String = Serververbindung.DownloadString("http://xxxxxxxxxx.txt")
    2. Dim EinträgeLicht = MeineStringLicht.Split({":", Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
    3. If EinträgeLicht(1) = "ein" Then .....bla bla bla


    Jetzt zum Problem. Das Ergebnis der Abfrage schaltet ein elektronisches Bauteil.
    Da ich diese Abfrage über einen Timer (alle 0,5 Sec) mache, kann man sich ja denke was passiert...

    Die Frage wäre nun, wie kann ich eine Abfrage dauerhaft halten (alle 0,5 Sec), aber so das nur bei Änderung des Eintrags (Ein/Aus) in der txt.* eine Reaktion passiert?

    Danke im Vorfeld
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Hey, danke für den Tip, habe da auch so was im Netz gefunden allerdings stehe ich mit der Umsetzung bischen auf dem Schlauch.
    Könntest du mir einen Einsatz vorschlagen?

    Habe da was versucht allerdings bekomme ich folgenden Fehler, siehe Anhang.
    Datei Inhalt stimmt...Wie prüfe ich denn Zeilenweise mit FileSystemWatcher?
    Bilder
    • Unbenannt.PNG

      33,19 kB, 438×321, 48 mal angesehen

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

    Otti schrieb:

    hler, siehe Anhang
    Weißt du was ein Path ist? Du schreibst da formatierten Text rein.

    Guck dir an was FileSystemWatcher eigentlich tut. Am besten schreibst du auch was dein eigentliches Problem ist und nicht "könnt ihr euch selbst denken", denn da kann man sich schnell verschätzen.
    @RodFromGermany

    ​FileSystemWatcher geht auch auf eine URL?
    Ich dache das geht nur mit einer lokalen Dateiüberwachung ...
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Du hast das falsch hervorgehoben. Wenn du weißt was ein Path ist hättest du darüber reflektieren sollen. Nicht nur bestätigen, dass du es weißt^^

    Es gibt keinen Pfad mit dem Namen "MeinText in der txt"

    Das was Dive meint ist durchaus ein Problem, du hast keinen Pfad, den du dem FileSystemWatcher anbieten könntest.

    Ultimativ sind wir wieder bei dem Wunsch nach einer detailierteren Beschreibung des erforderlichen Ergebnisses.
    Pfad = DATEIpfad. Versuch mal eine Datei in Windows lichtwohnbereich:ein zu nennen. Das scheitert, da ungültige Zeichen drin sind. Daher ist die Fehlermeldung berechtigt. Der FSW kann keine solche Datei überwachen. Also kurz: Du musst den vollständigen Dateipfad angeben, also Verzeichnis plus Dateiname plus Erweiterung.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Liegt die Datei auf einem Netzwerkordner oder ist sie nur über einen fernen Server/über HTTP erreichbar?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Dann bleib bei Deinen regelmäßigen Abfragen und speichere den ersten Abfragestatus. Und reagiere nur dann, wenn er sich ändert. Also:
    • erste Abfrage ergibt True oder ein oder wasweißich
    • den Wert packst Du in eine Variable
    • zweite Abfrage ergibt das gleiche
    • Vergleich mit dem gespeicherten Wert ergibt keinen Unterschied -> nix machen
    • xte Abfrage ergibt False/aus/irgendwas -> ist ein Unterschied zum gespeicherten Wert -> drauf reagieren und neuen Zustand in der o.g. Variable speichern
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed

    Hey, also ich komme wenn ich drüber nachdenke, immer zum selben Ergebnis. Einen Timer brauche ich grundsätzlich.
    Wenn ich nun mit Variablen und Vergleichen (Equal) arbeite, ist es allerdings genauso als würde ich nur einen Timer nehmen.
    Problem ist ja das, dass im Fall eines Ereignisses , dies nur einmal ausgeführt werden darf und nicht im Tackt des Timers.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Otti“ ()

    Entweder ist die Aufgabenbeschreibung falsch oder irgendwas hängt gedanklich fest.
    Wenn nur ein einziges Mal was passieren soll, dann schalte den Timer nach Wertänderungs-Reaktion Deines Programms ab.
    Wenn immer was passieren soll, wenn sich der Wert ändert, dann lass den Timer laufen, aber führe etwaigen Programmcode nur aus, wenn sich der Wert ändert, wie in Post#14 beschrieben.
    Wenn Dir das irgendwie warum auch immer nicht passt, beschreib bitte ganz genau/detailliert, was wann passieren soll und was wann nicht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Otti schrieb:

    @VaporiZedHey, also ich komme wenn ich drüber nachdenke, immer zum selben Ergebnis. Einen Timer brauche ich grundsätzlich.
    jo, sehe ich auch so in deim Fall. (Vorrausgesetzt, du meinst mit "grundsätzlich", was ich mit "auf jeden Fall" bezeichnen würde - ("grundsätzlich" bedeutet in meiner Welt was anderers))

    Otti schrieb:

    Wenn ich nun mit Variablen und Vergleichen (Equal) arbeite, ist es allerdings genauso als würde ich nur einen Timer nehmen.
    äh waas? Bahnhof? Bratkartoffeln?
    Wenn dieser Satz einen Sinn hat - ich verstehe ihn nicht.

    .

    Otti schrieb:

    Problem ist ja das, dass im Fall eines Ereignisses , dies nur einmal ausgeführt
    werden darf und nicht im Tackt des Timers.
    Im Fall von welchem Ereignis??
    Das einzige Ereignis, was bislang erwähnt wurde ist das Timer-Tick-Event, und - sorry - das erfolgt immer im Takt des Timers - wie denn sonst??



    Wie dem auch sei.
    also du kannst, durch einem Timer angestossen, regelmässig das File downloaden. Danach solltest du gucken, ob das File sich geändert hat, und wenn ja, irgendwie reagieren.

    (Das hast du zwar nicht gesagt, aber das reime ich mir so zusammen, dass du das meinen könntest, weil so würds einen Sinn ergeben...)

    Falls ich mir das richtig zusammenreimtete: Was ist das Problem? Festzustellen, ob die Datei sich geändert hat?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()

    @VaporiZednullHey evt. habe ich mich auch falsch ausgedrückt, Sorry dafür.
    Zum Verständniss habe ich ein Beispiel geschrieben.
    Klick ich auf den Button, wäre die Reaktion darauf +1, jenach dem ob Ein oder Aus.
    Würde ich diesen Code in einen Timer packen, würde im Timerinterval immer +1.
    Das möchte ich nicht. Wenn ich dies in eine Timer packe, möchte ich dies so das, immer nur 1x , +1 gerechnet wird,
    obwohl der Timer weiterläuft. Ändert sich der Sting von Ein auf Aus, müsse eine Reaktion bei Aus kommen, allerdings nur 1x

    Hoffe ich habe mich nun besser ausgedrückt :huh:

    VB.NET-Quellcode

    1. Private Sub bt_Click(sender As Object, e As EventArgs) Handles bt.Click
    2. If bt.Text = "ein" Then
    3. bt.Text = "aus" 'simuliert dies Abfrage aus der txt vom Server
    4. laus.Text += 1 'wenn in txt "aus" dann ein Event nur einmal
    5. Else
    6. bt.Text = "ein" 'simuliert dies Abfrage aus der txt vom Server
    7. lein.Text += 1 'wenn in txt "ein" dann ein Event nur einmal
    8. End If
    9. End Sub
    Das war kontraproduktiv. Das Beispiel bringt mir leider gar nix, allein schon deswegen, weil ich Augenkrebs bekomme, wenn ich laus.Text += 1 sehe.
    Daher bat ich um echte Details zum Programmablauf.

    Otti schrieb:

    Klick ich auf den Button, wäre die Reaktion darauf +1
    Inhaltlich unklar.

    Otti schrieb:

    würde im Timerinterval immer +1.
    Kein vollständiger (Neben)Satz.

    Otti schrieb:

    Wenn ich dies in eine Timer packe, möchte ich dies so das, immer nur 1x , +1 gerechnet wird, obwohl der Timer weiterläuft.
    What? Ich blick gar nix mehr.

    Wie oft soll im gesamten Programm eine Reaktion auf Ein und wie oft soll im gesamten Programm eine Reaktion auf Aus auftreten?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.