ich peil garnix ...
-
@volkar ... da haben wir wohl fast zeitgleich geschrieben ...
ich schau mir das nun mal genauer an und quetsch dich wieder aus
silke
-
Original erstellt von Silke_verzweifelt:
@volkar ... da haben wir wohl fast zeitgleich geschrieben ...
ich schau mir das nun mal genauer an und quetsch dich wieder aus
silkeaber auf sowas wie von 02.05.2003 20:58 kann ich nicht antworten.
das war von oben nach unten geplant und kein einzuges detail stimmt oder ist gar ausgführt. so wird das nix. lieber von unten nach oben aubeiten. erstmal nur ne funktion, die nen datensatz einfügen kann. und die wird in der main direkt aufgerufen, ganz ohne menu und so. wenn das klappt, kann man auch mal 3 einfügen und suchen machen. und so weiter. ganz zum schluss das menu drum.
-
jo schreib erst alle functions mit nem menu kannste immernoch machen!!
hoer auf volkard der hats drauf...fgwenn ihr sollche aufgaben bekommt und du nix peilst, kauf dir erstma n gutes buch, les es... dann nochmal...fg und schon solltest du mehr verstehn!
-
@I_Code_4_Food ..dein beitrag hilft mir ungemein ...
@volkard danke ich komm ganz gut voran nur gibtint anzahl=sizeof(pDat);//Offset-Zeiger
genau 4Byte aus --> schlecht! Ansonsten klappt es dass ich meine PDat.dat mit den Artikeln fülle und auch die iDat mit beschreibe. Nur der Offset ...
Bitte einen kleinen Denkanstoss...
Silke
-
meintest du
int anzahl = Dateigröße / sizeof(Datensatz);
ansonsten: wie ist deine PDat struktur aufgebaut?
-
@Korbinian .. ja da fehlte ja noch was..danke nun hab ich das mal so implementiert. Wenn ich mir den Offset nun ausgeben lasse siet das folgendermassen aus ...
Art_Nr: 1 Offset: 0
Art_Nr: 2 Offset: 16
Art_Nr: 3 Offset: 32int handle; handle = open("prim.dat",O_RDONLY | O_BINARY); int anzahl= filelength(handle)/ sizeof(pDat); // für meinen Offset-Zeiger
jetzt muss ich zusehn wie ich hinbekomme dass ich über den offset der Index-Datei auf die richtige Stelle in der Primärdatei zugreifen kann um den dortigen Datensatz auszugeben ....
Stück für Stück bekomm ich das dank eurer hilfe schon hin ...
silke
-
Original erstellt von Korbinian:
**meintest duint anzahl = Dateigröße / sizeof(Datensatz);
ansonsten: wie ist deine PDat struktur aufgebaut?**
pDat ist wohl eine Zeiger auf nen Datensatz. Zeiger sind immer 4 bytes groß. sizeof(*pDat) würde gehen. Aber lieber so machen, wie Korbinian sagt.
-
Original erstellt von Silke_verzweifelt:
jetzt muss ich zusehn wie ich hinbekomme dass ich über den offset der Index-Datei auf die richtige Stelle in der Primärdatei zugreifen kann um den dortigen Datensatz auszugeben...ist doch nicht so schwer: da du weist, an welcher dateiposition die Information steht, und wie lang diese dann ist, brauchst du eigentlich nur so vorgehen:
in der primärdatei: Datensatz *satz = new Datensatz; satz = dynamic_cast<Datensatz>(lese_bytes_von_bis(Offset, Offset + sizeof(Datensatz))); // uh, ob der cast 100% richtig ist? bitte verbessert mich!
und schon hast du den gewünschten datensatz im speicher, und kannst damit machen, was du willst. (nur später nicht vergessen, den speicherplatz wieder freizugeben)
edit
zum lesen: ifstream::read
zum position setzen: ifstream::seekg[ Dieser Beitrag wurde am 04.05.2003 um 17:27 Uhr von Korbinian editiert. ]
-
denke eher an
Datensatz satz; fseek(pimdatei,pos*sizeof(Datensatz),BEGIN); fread(primdatei,reinterpret_cast<char*>(&satz),sizeof(Datensatz));
-
@all ... es tut gut wenn man weiterkommt und auf den richtigen Weg gebracht wird. Die Suche habe ich jetzt erstmal sequenziell geschrieben um zu prüfen ob das funzt der Zugriff über die index.dat. Also key wird mir als Parameter aus main übergeben und soll die Artikelnummer sein.
Und siehe da... es funzt super ... die Eingabe ... die Suche ...fseek(iDat,key-1*sizeof(int_Paar),SEEK_SET); fread(&int_Paar,sizeof(int_Paar),1,iDat); fseek(pDat,(int_Paar.offset)*sizeof(art_Eingabe),SEEK_SET); fread(&art_Eingabe,sizeof(art_Eingabe),1,pDat);
nun werd ich an die binäre Suche rangehen, ich hab ja noch eine nacht Zeit bis zur Abgabe
Silke