Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

letzten Datensatz einer Datei.

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
rix



Anmeldungsdatum: 20.03.2007
Beiträge: 20

BeitragVerfasst am: 20.03.2007, 15:20    Titel: letzten Datensatz einer Datei. Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 20.03.2007, 15:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 20.03.2007, 15:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
rix



Anmeldungsdatum: 20.03.2007
Beiträge: 20

BeitragVerfasst am: 20.03.2007, 15:54    Titel: Antworten mit Zitat

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 happy - 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
Benutzer-Profile anzeigen Private Nachricht senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 20.03.2007, 16:12    Titel: Antworten mit Zitat

geschockt geschockt geschockt geschockt geschockt
Hättst nich wenigstens zur Freundlichkeit die langen Zeilen kürzen können?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
chutullu



Anmeldungsdatum: 18.10.2005
Beiträge: 77

BeitragVerfasst am: 20.03.2007, 16:14    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 20.03.2007, 16:14    Titel: Antworten mit Zitat

Ein Befehl zum Strings leeren ??
Ich mach immer String="" dann isser leer zwinkern
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
rix



Anmeldungsdatum: 20.03.2007
Beiträge: 20

BeitragVerfasst am: 20.03.2007, 16:19    Titel: Antworten mit Zitat

Vielen Dank für Eure Antworten.

@chutullu - das werde ich gleich mal probieren - THX!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 20.03.2007, 16:25    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
chutullu



Anmeldungsdatum: 18.10.2005
Beiträge: 77

BeitragVerfasst am: 20.03.2007, 16:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz