| |
VB.NET - Ein- und UmsteigerStätige Reportdatei permanent auslesen, wie? | | | Autor: Tommi467 | Datum: 12.10.17 21:55 |
| Hallo zusammen,
ich habe hier eine Software, die unentwegt Reportdaten in eine Textdatei schreibt.
Zyklus etwa alle 8-10 Sekunden kommen 3-6 kurze Reportzeilen (ca.30 Zeichen) hinzu.
Diese stätig auflaufenden Daten bräuchte ich für meine eigene Software.
Wie kann ich nun die letzten hinzugekommenen Daten ermitteln, oder muss
ich jedes mal die ganze Datei auslesen? | |
Re: Stätige Reportdatei permanent auslesen, wie? | | | Autor: Manfred X | Datum: 12.10.17 22:32 |
| Hallo!
Wenn Du eine Textdatei (sequentielle Datei) verwendest,
mußt Du tatsächlich alles lesen um an die Daten am Dateiende
heranzukommen.
Verwende statt dessen eine lokale Datenbank und schreibe Deinen
Report jeweils in einen Datensatz (incl. eindeutigem Satzschlüssel). | |
Re: Stätige Reportdatei permanent auslesen, wie? | | | Autor: Tommi467 | Datum: 13.10.17 06:03 |
| Hallo Manfred,
vielen Dank für die rasche Antwort.
Nein, ich habe auf die Ursprungsdatei keinen Einfluss,
leider, das ist ein Fremdprogramm.
Ok, dann weiß ich wie ich es zu machen habe.
Umständlich, aber ich muss da ran...
Vielen Dank | |
Re: Stätige Reportdatei permanent auslesen, wie? | | | Autor: Tommi467 | Datum: 13.10.17 07:24 |
| So habe ich das jetzt erst einmal gemacht.
Ich bin noch bei den Trockenübungen, händisch alles
zu testen, also noch nicht mit der Fremdsoftware,
aber zumindest kann ich so Änderungen in der wachsenden
Textdatei ermitteln.
Irgendwelche Verbesserungsvorschläge?
oldText = aktText
Dim sr As New System.IO.StreamReader("all.txt", _
System.Text.Encoding.Default)
aktText = (sr.ReadToEnd)
sr.Close()
Dim LenOld As Integer
LenOld = Len(oldText)
TextBox1.Text = Mid$(aktText, LenOld + 1, Len(aktText)) | |
Anzahl Zeichen am Ende einer Textdatei lesen | | | Autor: Manfred X | Datum: 13.10.17 08:31 |
| Aufrufparameter:
File: Pfad/Name der Datei
LengthOfText: Anzahl der zu lesenden Text-Bytes am Dateiende
Public Function GetEndOfTextFile(ByVal File As String, _
LengthOfText As Integer) As String
If Not IO.File.Exists(File) Then Return Nothing
If LengthOfText < 1 Then Return Nothing
Dim fi As New IO.FileInfo(File)
If fi.Length < 1 Then Return Nothing
If fi.Length < LengthOfText Then LengthOfText = fi.Length
'Encoding ggf. anpassen
Dim enc As System.Text.Encoding = System.Text.Encoding.UTF8
Dim pos As Integer = fi.Length - LengthOfText
Dim EndOfText(LengthOfText - 1) As Byte
Try
Using fs As New IO.FileStream(File, _
IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.ReadWrite)
fs.Position = pos
fs.Read(EndOfText, 0, LengthOfText)
End Using
Return enc.GetString(EndOfText)
Catch
Return Nothing
End Try
End Function
Beitrag wurde zuletzt am 13.10.17 um 08:36:43 editiert. | |
Re: Stätige Reportdatei permanent auslesen, wie? | | | Autor: Franki | Datum: 17.10.17 04:05 |
| Hallo,
auch wenn es sich um ein Fremdprogramm handelt, dann sind Daten (viele Daten wie bei dir) natürlich in einer Datenbank besser aufgehoben als in einer Textdatei.
Also solltest du dir überlegen die Daten zeitnah in eine DB zu schreiben, dann kannst du in aller Ruhe damit weiter arbeiten.
Ganz zu schweigen von Datensicherung, oder Zugriffsproblemen weil die auszulesende Datei grade gesprerrt ist weil in ihr geschreieben wird usw.
Aber gestatte mir die Frage, um was für Daten es sich handelt? Denn mehmals pro Minute auf Daten zugreifen zu müssen erfordert schon einiges an Performance in Sachen Speicherung und auch in Sachen Analyse. Was genau machst du da eigentlich?
Gruß
Frank | |
Re: Stätige Reportdatei permanent auslesen, wie? | | | Autor: Tommi467 | Datum: 17.10.17 14:02 |
| Hallo Frank,
danke erst einmal für deine Antwort.
Aber um es noch einmal zu sagen.
Ich habe keinen Einfluss auf die Software.
Ich muss nur damit arbeiten.
Eine Datenbank ist hier auch nur bedingt angebracht, weil:
Es handelt sich um eine Software für den Amateurfunk.
Die Verbindungsdaten werden im Amateurfunk generell in sogenannten
ADIF-Dateien gespeichert. Eine "Art" XML. Der, der die erfunden hat
gehört erschlagen. Jedenfalls ist dieses ADIF Format das gängige Format
um die Verbindungsdaten zwischen unterschiedlichen Programmen auszutauschen.
Die Software die ich verwende ist von der Anzeige her absolut nicht
zu ende gedacht. Die Entwickler sträuben sich aber von den Usern Ratschläge
anzunehmen. Zum Glück werden aber alle eingehenden digitalen Signale in eine
Protokolldatei geschrieben.
Da setze ich nun mit meiner Software an.
Ich lese diese Protokolldatei wieder ein und werte die Daten so aus,
wie es Sinn macht um dem Amateur wirklich nützliche Informationen
liefern zu können.
Noch einmal. Datenbank ja, wäre ganz sicher sinnvoller.
Wenn sie der Entwickler aber nicht benutzt, kann ich es
auch nicht ändern. Ich selbst brauche die Datenbank nicht,
da ich nur die jeweils letzten 20 Einträge darstelle.
Ich hoffe das war eine ausführliche und verständliche Beschreibung
Beitrag wurde zuletzt am 17.10.17 um 14:04:46 editiert. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|