Text aus Textdatei auslesen

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von Marja.

    Text aus Textdatei auslesen

    hi.
    ich weiß dieses Thema gibt es bestimmt schon 1000 mal, aber ich habe in der Forensuche nichts gefunden.
    Also, wie der Titel schon sagt, will ich einen Text aus einer Textdatei auslesen, und in eine Textbox einfügen lassen.
    Die Datei liegt auf der Festplatte C:.
    Das mit dem schreiben hab ich schon hingebracht. Aber wie funktioniert das lesen?
    bitte um eure Hilfe.
    LG
    Hi.
    Zum einen gibt es da IO.File.ReadAllText, allerdings kann diese Funktion keine Umlaute und Unicode-Zeichen auslesen (= ? im Text). Am besten benutzt du für so etwas IO.StreamReader:

    VB.NET-Quellcode

    1. Dim Reader As New StreamReader("C:\Datei.txt", System.Text.Encoding.Default)
    2. TextBox1.Text = Reader.ReadToEnd()
    3. Reader.Close()


    ~ Chris
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.
    ok. danke schon mal.
    Aber jetzt ist folgendes Problem.
    Bestimmt nur ne kleinigkeit, aber ich bin noch eine ziemliche Laie was VB angeht.
    VB schreibt an: Der Typ "StreamReader" ist nicht definiert.
    Was muss ich tuen?

    habs gelöst mit

    VB.NET-Quellcode

    1. Dim inhalt As String = My.Computer.FileSystem.ReadAllText("C:\text.txt")
    2. RichTextBox1.Text = inhalt

    Danke. LG

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

    der Thread ist zwar schon etwas älter, möchte aber dennoch folgende Frage loswerden.

    Für einen Ticker lese ich auch die Infos aus einer txt Datei. Dafür habe ich ein Timer erstellt er jede Sekunde auf die TXT Datei zugreift und die Informationen ausliest und übernimmt. Zusätzlich wenn der Ticker minimiert ist im Traybereich poppt dieser nur auf, wenn die Datei sich verändert hat und dann natürlich mit den neusten Infos.

    Ich verwende zum auslesen folgenden Code:

    VB.NET-Quellcode

    1. Dim AllText, LineOfText As String
    2. FileOpen(1, txtPfad, OpenMode.Input)
    3. Do Until EOF(1)
    4. LineOfText = LineInput(1)
    5. AllText = AllText & LineOfText & " "
    6. Loop
    7. sNews = AllText : FileClose(1) 'Schließen der Textdatei


    Nun hatte ich aber zur Laufzeit schon sporadisch einen Fehler, das er auf die txt Datei nicht zugreifen kann. Daher ist meine befürchtung wenn ihn mehere offen haben (geöffnet haben zu unterschiedlichen Zeiten) das sich dann beio dem ein oder anderen auch der Fehler produziert wird, da ein andere gerade die Datei ausliest.

    Kann man irgendwie aus einer geschlossenen Textdatei oder anders auslesen, das es nicht zu einem Fehler kommen kann. Oder wie kann ich den Fehler in VB auffangen, das beim einlesen (update) es gar nicht erst zu dieser Ausnahmehandlung kommt. Der User hat ja die Möglichkeit auf Weiter oder Beenden zu klicken, somit schließt sich das Tool. Das soll es aber nicht.

    Ist StreamReader ne alternative?
    Edit: ich habe erstmal den StreamReader genommen, ist weniger Code ;)

    VB.NET-Quellcode

    1. Dim sText As IO.StreamReader = New IO.StreamReader(txtPfad)
    2. sNews = sText.ReadLine
    3. sText.Close()

    Edit2: Streamreader liest aber keine Sonderzeichen zumindest nicht mit dem o.g. Code und keine Zeilenumbrüche.
    Na da muß ich mir das mal genau anschauen, mit Streamreader.

    LG Marja

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

    vielleicht nutz lieber die FileSystemWatcher-Klasse für sowas. Ich denke, damit kannst du das Problem recht gut umgehen (einfach ma danach googlen, da wirst du mit Lösungen überhäuft)

    Der Ticker ist zu laaangsam

    Hallo

    nachdem ich den Ticker mit meheren Personen (ca. 5-10) getestet hatte, lief der Ticker tadellos. Ich konnte News direkt via Tool in der angeschlossenen Textdatei schreiben, diese wurden dann innerhalb von 60 Sekunden auf den jeweiligen Testrechnern angezeigt. Nun habe ich es wie gesagt für alle verfügbar gemacht >500 Mitarbeiter. Nun habe ich das Problem, das das Tool sehr träge funktioniert/läuft.

    Änderungen also News können nicht mehr eingetragen werden, da die Textdatei ständig bereits benutzt wird.

    Nun würde ich probieren, den Zugriff auf die Textdatei auf 3 Minuten statt 1 Minute zuzugreifen und einfach die News auszulesen. Ich denke aber das wird auch nicht die Lösung sein.

    Kann ich und wie geht es das nur News in den Ticker angezeigt werden, wenn die auch wirklich neu sind, ohne Timer.
    Ich hoffe ihr versteht was ich meine. Ich möchte nur den Timer umgehen, das nicht aller xx Sekunden/Minuten der Text aus der Textdatei ausgelesen wird, sondern wirklich nur, wenn sich was geändert hat.

    Die Exe Datei befindet sich bei jedem Mitarbeiter lokal auf den rechner und wird via Autostart mit der aktuellsten Version immer überschrieben. Die Textdatei befindet sich zentral auf den Server.

    ich hoffe ihr könnt mir weiterhelfen.

    LG Marja
    Verstehe ich das Richtig, dass du das via Server im Intranet machst?
    Wenn ja könnte man auch noch andere Lösungsansätze verfolgen:
    a) Anstatt einer Textdatei eine HTML - Datei (sollte mit den Zugriffen besser zurechtkommen)
    b) Die beste Lösung wäre warscheinlich Die News per TCP/IP Protokoll zu verschicken.
    danke dir Phil. ich dachte Filesystemwatcher wäre in einem anderen zusammenhang.

    @Magerquark
    jein, wir haben Intranet und mehere Serverlaufwerke und halt die lokalen Laufwerke.
    bzgl. a) als html sollte der Zugriff besser sein, als eine Text? d.h. ich erstelle ne html, auf die dann per Ticker immer zugegriffen wird.
    bzgl. b) Kannst du mir einen Tipp/Link/Suchrichtung (bestimmt Google ;) geben?

    gruß Marja
    Hej Marja,
    verscuh mal folgende:
    mit dem FileSystemWatcher auf Aktualisierung der Datei prüfen und dann statt zu lesen erst auf die lokale Maschiene laden, lesen (und dann vielleicht wieder löschen). Dann hast du den Ärger mit dem Zugriffsproblemen beim Schreiben nicht´, da die User erst zugreifen, wenn das Update fertig ist. Und du kommst ohne Timer aus. Nachteile: du musst dich mit Delegaten beschäftigen, da du sonst eine Zugriffsverletzung durch den FSW bekommst, ist aber eigentlich recht simple zu realisieren.

    Grüße
    Phil
    Hallo ihr lieben

    also das mit dem FileSystemWatcher funktioniert super. Das System ist wieder Flüssig. Danke für den Tipp.

    VB.NET-Quellcode

    1. Private WithEvents fsw As New System.IO.FileSystemWatcher()
    2. Private Sub cmdStart_Click_1(ByVal sender As System.Object, ByVal e As _
    3. System.EventArgs) Handles cmdStart.Click
    4. With fsw .Path = "D:\Users\"
    5. .IncludeSubdirectories = True
    6. .Filter = "*.*"
    7. End With
    8. fsw.EnableRaisingEvents = True
    9. End Sub
    10. Private Sub fsw_Changed(ByVal sender As Object, ByVal e As _
    11. System.IO.FileSystemEventArgs) Handles fsw.Changed
    12. 'Hier rein was dann passieren soll ....
    13. End Sub


    Also wie gesagt, das System läuft gut. Heute früh habe ich es getestet und den Inhalt der Text Datei geändert, jetzt aber das koriose ...
    Manche PC haben das Popup angezeigt, bei anderen hat sich der Newsticker beendet, ohne Fehlermeldung oder sonstiges.
    In meinem "Ausweich"Büro wo ich heute mal sitze, haben von 4 PC, 2 PCs das Programm beendet.

    ich bin ehrlich, mit den "Delegaten" habe ich mich noch nicht beschäftigt, könnte dies was damit zu tun haben?

    Lg Marja
    stimmt da gabs doch was, oh jeh ich bin wirklich schon lange raus.

    Try ... Catch ...

    war doch wie folgt ...

    VB.NET-Quellcode

    1. Try
    2. 'Anweisung was passieren soll
    3. Catch ex As Exception
    4. 'Ausgabe(Info bsp. per Messagebox mit Fehler
    5. End Try


    D.h. ich setze vor der Anweisung "Try" und wenn in der Anweisung ein fehler auftritt, wird dieser dann entsprechend nach "Catch" angezeigt. Das Programm bricht dann aber dennoch ab? D.h. er bringt zwar den Fehler, aber hängt sich da nicht auf, das ist doch richtig?

    das Problem ist nämlich, das immer nur wenn das Tool gestartet wird, die neuste Version auf den lokalen rechner des Mitarbeiters kopiert wird, jetzt nicht einfach so zwischendurch. Soweit bin ich leider mit meinen VB Kenntnissen noch nicht. D.h. wenn ich heute was ändere sehe ich das ggf. an meinem PC, aber spätestens erst morgen an den User/Mitarbeiter PCs, da dann erst die neuste Version beim Starten kopiert wird. Leider bin ich auch bis dato mehr in Access VBA noch eingebunden und anderen Tätigkeiten, komme leider selten dafür mehr wieder für VB zu tun. Habe da zwar schon 2 kleine Programme erstellt (Newsticker und Reminder, reminder ist so ähnlich wie ein Newsticker), aber ich müßte wieder mehr damit arbeiten.

    Danke dir Marja

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

    Hallo Marja,
    es könnte durchaus mit dem Delegaten zusammenhängen, da der FSW auf einem anderen Thread läuft als dein Programm und dann versucht etwas in deinem Programm zu ändern. Das kann gut gehen muss es aber nicht immer :)

    Die Syntax des Tray Catch ist korrekt. Wenn man es sich sehr einfach machen will kommt in den catch Teil nur folgendes:

    VB.NET-Quellcode

    1. try
    2. '...
    3. catch ex as Exception
    4. MessageBox.show(ex.Message)
    5. end try


    Damit hat man immer die neusten Nachrichten von der Fehlfunktionsfront :).

    Grüße
    Phil
    danke dir phil

    gut dann muß ich nur noch schauen wie ich immer an den evtl. Fehlercode herakomme, soll heißen der Fehler wird ja beim Nutzer/Mitarbeiter angezeigt, der kann in einem ganz anderen Raum sitzen. Wenn ihm nun das völlig egal ist der Fehler, wird er es mir nicht unbedingt mitteilen. Bei mehr als 500 Arbeitsplätzen wäre die Suche schon aufwendig. Also muß man auf die Mitteilung der Kollegen hoffen. Aber das ist ne andere Baustelle.

    Obwohl, ich könnte doch ggf. solch ein Fehler doch bsp. in einer Datei speichern lassen, mit PC Nummer ;) Ich glaube ich habe da eine Idee. Es würde evtl. noch was per Mail gehen, das ich was zugeschickt bekommen, das wäre dann ne zweite Idee.

    Ihr habt mir aber auf jedenfall weitergeholfen, danke ;)

    Gruß Marja