Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
rix
Anmeldungsdatum: 20.03.2007 Beiträge: 20
|
Verfasst am: 20.03.2007, 15:20 Titel: letzten Datensatz einer Datei. |
|
|
Hallo an die Gemeinde,
also folgendes ich benötige aus einer Datei mit ca. 100.000 Datensätzen den letzten Datensatz. Ich möchte aber nicht die ganze Datei einlesen von 1.....100000. Gibt es da eine Möglichkeit?
Ich komme aus der THEOS Welt, da gibt es die Möglichkeit eine Datei von "hinten" zu lesen mit READPREV. Gibts das hier auch? |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 20.03.2007, 15:39 Titel: |
|
|
Es gibt viele Arten eines Dateiaufbau, es wäre schon etwas hilfreich wenn Du mehr darüber schreiben würdest mit welcher Methode Du vor hast diese datei einzuladen, bzw wie diese gespeichert ist. _________________
 |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 20.03.2007, 15:50 Titel: |
|
|
Hallo
Wenn die Länge dieses letzten Datensatzes bekannt ist oder man dessen Anfang irgendwie erkennen kann, könnte man die Datei mit OPEN...FOR BINARY öffnen und die entsprechende Zahl von Bytes von hinten her einlesen.
Gruß
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
rix
Anmeldungsdatum: 20.03.2007 Beiträge: 20
|
Verfasst am: 20.03.2007, 15:54 Titel: |
|
|
Hallo Danke, für die Antwort.
Es ist eine reine Textdatei. (.txt)
Es geht um ein logfile was ich auf neue Einträge analysieren möchte.
Code: |
CLS
CLEAR MERKER, ZEIT
MERKER = 1
INPUT "Geben Sie den Pfad zur Logdatei an: ", logdatei$
INPUT "Geben Sie das Zeitintervall ein: ", ZEIT
PRINT " "
WORK:
SLEEP ZEIT
OPEN logdatei$ FOR INPUT SHARED AS #99
IF MERKER = 1 THEN
DO
LINE INPUT #99, inhalt1$
LOOP UNTIL (EOF(99))
CLOSE #99
MERKER = 2
GOTO WORK
ELSE
DO
LINE INPUT #99, inhalt2$
LOOP UNTIL (EOF(99))
CLOSE #99
IF inhalt2$ <> inhalt1$ THEN
PRINT "Server l„uft ...."
inhalt1$ = inhalt2$
GOTO WORK
ELSE
CLOSE #99
PRINT "Server ist wohl abjeraucht ..."
PRINT "F?hre Rettungsmaánahmen aus .."
SLEEP 3
PRINT "hier werden jetzt Befehle ausgef?hrt"
inhalt1$ = inhalt2$
MERKER = 1
GOTO WORK
END IF
END IF
|
So in der Art habe ich mir das gedacht - nur wenn die Datei viele viele viele Datensätze enthält dauert das ne Weile.
P.S der Code ist nicht optimal - nur mal so dahin geklatscht
P.P.S unter THEOS kann man strings mit "clear einstring$" leeren - in qb geht das anscheinend nicht
Code: |
6:13 ClientUserinfoChanged: 1 n\^7Motorhead\t\3\c\0\r\0\m\0000000\s\0000000\dn\\dr\0\w\0\lw\0\sw\0\mu\0\ref\0
6:35 ClientUserinfoChanged: 1 n\^7Motorhead\t\3\c\0\r\0\m\0000000\s\0000000\dn\\dr\0\w\3\lw\3\sw\0\mu\0\ref\0
6:35 ClientBegin: 1
6:44 ClientUserinfoChanged: 0 n\the killer\t\3\c\0\r\0\m\0000000\s\0000000\dn\\dr\0\w\3\lw\3\sw\0\mu\0\ref\0
6:44 ClientBegin: 0
6:49 ClientUserinfoChanged: 1 n\^7Motorhead\t\1\c\0\r\0\m\0000000\s\0000000\dn\\dr\0\w\3\lw\3\sw\2\mu\0\ref\0
6:49 ClientUserinfoChanged: 1 n\^7Motorhead\t\1\c\2\r\0\m\0000000\s\0000000\dn\\dr\0\w\3\lw\3\sw\2\mu\0\ref\0
6:49 ClientBegin: 1
6:56 ClientUserinfoChanged: 1 n\^7Motorhead\t\2\c\2\r\0\m\0000000\s\0000000\dn\\dr\0\w\3\lw\8\sw\7\mu\0\ref\0
6:56 ClientUserinfoChanged: 1 n\^7Motorhead\t\2\c\2\r\0\m\0000000\s\0000000\dn\\dr\0\w\8\lw\8\sw\7\mu\0\ref\0
6:56 ClientBegin: 1
7:10 ClientUserinfoChanged: 0 n\the killer\t\1\c\0\r\0\m\0000000\s\0000000\dn\\dr\0\w\3\lw\3\sw\2\mu\0\ref\0
7:10 ClientBegin: 0
7:47 WeaponStats: 1 0 20 0 16 0 0 0 0 5 0 0 0 0 0 0 2 10
7:47 ClientDisconnect: 1
8:36 WeaponStats: 0 0 520 0 1 0 0 0 0 1 0 0 0 0 0 0 0
|
So sieht das Log aus.
Zuletzt bearbeitet von rix am 20.03.2007, 16:16, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 20.03.2007, 16:12 Titel: |
|
|
Hättst nich wenigstens zur Freundlichkeit die langen Zeilen kürzen können? |
|
Nach oben |
|
 |
chutullu
Anmeldungsdatum: 18.10.2005 Beiträge: 77
|
Verfasst am: 20.03.2007, 16:14 Titel: |
|
|
Nur so eine Idee
Warum modelst Du den ganzen Spaß nicht etwas um, legst einen Datenstruktur mit fester Länge fest, merkst dir die Anzahl der Einträge in einer seperaten Datei und liest mit GET bzw. schreibst mit PUT
So als Beispiel :
Code: |
type logType
datum as String * 10 ' 2007-10-10
time as String * 8 ' 12:10:24
entry as String * 50 ' Vermerke
end type
dim shared maxEntry as Integer
dim _read1 as logType
'Anzahl der Datensätze holen
open "dataSheets.num" for input as #1
input #1, maxEntry
close #1
'letzen Datensatz holen
open "logFile.log" for input as #1
get #1,maxEntry,_read1
close #1
Print _read1.entry |
Solltest Du die neusten Einträge analysieren wollen, würde ich dir Raten für jeden Tag ein neues Logfile anzulegen. Ob sich der neuste Eintrag geändert hat könntest Du so ermitteln :
Code: | dim _read1,_read2 as logtype
open "logFile.log" for input as #1
get #1, maxEntry-1,_read1
get #1, maxEntry, _read2
if _read1.entry <> _read2.entry then
...
else
...
end if
close #1 |
|
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 20.03.2007, 16:14 Titel: |
|
|
Ein Befehl zum Strings leeren ??
Ich mach immer String="" dann isser leer  _________________
 |
|
Nach oben |
|
 |
rix
Anmeldungsdatum: 20.03.2007 Beiträge: 20
|
Verfasst am: 20.03.2007, 16:19 Titel: |
|
|
Vielen Dank für Eure Antworten.
@chutullu - das werde ich gleich mal probieren - THX! |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 20.03.2007, 16:25 Titel: |
|
|
du könntest auch einfach in einer festen Step sequenz von hinten einlesen, den neu eingelesenen Block auf Zeilenumbrüche, und gefundene Zeilen auf das Datum hin untersuchen.
Code: |
For X = <Maximum> to 1 step -<StepSequenz>
next |
Code: | Dim X_Step as Long
Dim D as string
X_Step = 8092
For X = Lof(#1) to 1 step -X_Step
d = String(x_Step, " ")
Get #1, x, d
'...
next
|
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
chutullu
Anmeldungsdatum: 18.10.2005 Beiträge: 77
|
Verfasst am: 20.03.2007, 16:50 Titel: |
|
|
Noch ne' Idee
das Logfile kommt doch vom Client ? Warum PING'st Du den Server nicht direkt an und kommt PONG zurück dann ist die Verbinung getrennt oder gestört. |
|
Nach oben |
|
 |
|