Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit Logfile auslesen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
24.04.2003, 10:27 Uhr
Hacku



Hallo!
Ich möchte versuchen, eine Logfile auszulesen. Jedoch ist diese in verschiedene Abschnitte geteilt und hat nicht die übliche Form einer Tabelle.
Statt groß zu erklären habe ich hier mal ein Stück draus ausgeschnitten:

.START. .HOL.
.START. .HOLDATA.
DATE 3-26-2003
TEILPROGRAM CVERZEICHNIS\DAT.LFG
TEILNAM CU 666
TEILFARBE GREEN
TEILVERS X,Y
NumParts 20
ANZTEST 3
.END. .HOLDATA.
.START. .HOLTESTDATA.
ORT hangar_2bc
EINH_NR 23
CIRCA 5.23598
MINWERT 4.85324
HOCHWERT 6.52525
.END. .HOLTESTDATA.
.START. .TEIL_ERG.
TEILNR 13
TEIL_TIME 2-26-2003 at 09:23
HOL_NR 0
SERIENR 0
ANZ_TEST 19
TEST PASS
AKT 9.151358

Auf der linken Seite stehen die jeweiligen Domänen, die später in einer Datenbank erstellt werden (da sollen die ganzen Daten rein), auf der rechten die einzelnen Daten. Mein Problem ist es die Daten so auszulesen, also dass das Programm versteht das der Wert nach z.B. TEILFARBE in die Variable farbe des Objekts gerät gespeichert wird und dass dann der nächste Datensatz ausgelesen wird. Ich hoffe, jemand hat verstanden was ich meine und kann mir helfen. Vielen Dank!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.04.2003, 11:46 Uhr
virtual
Sexiest Bit alive
(Operator)


Das hört sich nach Handarbeit an: Die Datei sollte also Zeilenweise eingelesen werden, jede Zeile wird dahingehend gesplittet, daß das erste Wort der Key und der rest der Zeile der Value ist. Bis dahin wohl noch langweilig. Dann muß man wohl eine große if-Abfrage starten, ggf eine std::map verwenden und die Values in die Variablen bringen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.04.2003, 12:14 Uhr
Hacku



Hmm, Die Datenbank erstelle ich im voraus, da sie blß mit den Daten gefüllt werden soll. Problem ist eben die Daten richtig heraus zubekommen. Ich habe schon etwas rumprobiert und bin jetzt soweit, eine Zeile auszulesen, jedoch scheitere ich am Sprung nach unten in die nächste Zeile. Ich habe mir gedacht, es mit seekg() oder ähnlichem zu realisieren.

Die if-Abfrage hab ich mir auch überlegt, das kommt aber eh erst später... ;-)

Sorry, aber was ist eine std::map, davon habe ich noch nix gehört/...???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.04.2003, 13:31 Uhr
Hacku



So, den Zeilensprung hab ich nach haufenweise Versuchen und etwas kopfzerbrechen auch geschafft. Hier der Code, damit es sich bewegt:

fstream finout("datei.txt",ios::in | ios::out | ios::ate | ios::binary);
finout.seekg(0L);
finout.seekp(4,ios::cur);
finout.eatwhite();
finout.getline((char*)&p[i].name,300);

--> damit öffnet das Programm die Datei, springt an den Anfang und ignoriert zudem noch die "Spaltenüberschriften". Es liest also nicht die Überschrift "Name", sondern übergeht diese, frisst die Leerzeichen und holt sich den Namen aus der Datei. Vielleicht nicht die effektivste Lösung, aber zur Zeit die einzigste die ich kenne und die funktioniert. So, nun muss ich herausfinden, wie man die Anzahl der Datensätze in der Datei ermitteln kann. Vielleicht kann mir ja hier jemand weiterhelfen!?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
24.04.2003, 13:37 Uhr
virtual
Sexiest Bit alive
(Operator)


Warum ios::binary ?
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
24.04.2003, 13:55 Uhr
Hacku



Hmm, das is nich unbedingt/gar nicht notwendig, da es ja eh ne ascii datei is... aber es macht keinen unterschied beim öffnen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
24.04.2003, 14:19 Uhr
virtual
Sexiest Bit alive
(Operator)


In der Regel muß man sich ganz schön auf die Hinterbeine stellen, wenn man mit binären Dtaeien portablen Code machen will. solange du nur auf einer Platform bleibst, mag das kein Problem sein.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
24.04.2003, 14:30 Uhr
Hacku



Ich will das eh bloss für ein Rechner mit MS basteln, von daher is das in meinem Fall ja egal. Sonst wird es dann ungünstig sein, wenn Du das sagst ( davon hab ich kein Plan, hab eh noch nie unter unix C++ programmiert).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
24.04.2003, 15:15 Uhr
Hacku



Anzahl der Datensätze hat sich jetzt auch erledigt.
Jetzt kommt aber das letzte Problem, welches ich sicher nicht allein rausbekommen werde ( und vorher noch sinnlose Threads erstelle )

Es sind mehrere Logfiles, alle haben die gleiche Dateiendung (z.B. .log). Ich weiss nicht, wieviele Dateien es sind, und welche Namen sie haben. Meine Idee wäre es, sie im Stil von *.log zu öffnen, den Namen irgend wie zu bekommen und sie auszulesen...aber wie macht man das bloss?????????
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
24.04.2003, 15:48 Uhr
virtual
Sexiest Bit alive
(Operator)


Das kann man in ANSI C(++) nicht lösen, weil dies keine Verzeichnisse kennt. Du mußt im Windows API Forum mal fragen. In der Regel geht man hin, liest sich den Verzeichnisinhalt ein, schaut bei jeder Datei nach der Endung und wenn sie passt, tut man sie ins Körbchen. Möglicherweise gibts auch unter Windows was fertiges (sowas wie glob unter Linux)
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: