Binär einlesen/auslesen(fread, fwrite)

Danke und sorry ich hab mich falsch ausgedrückt und noch dazu nicht sehr verständlich :D.

Ok die Gesamtzahl der gesuchten Termine muss vorher klar sein das man speicher allokieren kann.

Dies mache ich ja mit dieser Schleife:
C++:
while(!feof(outFile))
	{
	  fread(&temp,sizeof(termin),1,outFile);

		if(temp.von.tag == dat_von.tag && temp.von.mon == dat_von.mon && temp.von.jahr == dat_von.jahr)
		{
		  anz++;
		}
	}

Und danach rufe ich wieder die gleiche Schleife auf nur halt zum Ausgeben:
C++:
	while(!feof(outFile))
	{
	  fread(&temp,sizeof(termin),1,outFile);

		if(temp.von.tag == dat_von.tag && temp.von.mon == dat_von.mon && temp.von.jahr == dat_von.jahr)
		{
		   for(x=0; x<anz; x++)
                   {
                      termin_out(*(ges_termin+x));
                   }
		}
	}

Und ich möchte verhindern das ich 2mal die gleiche schleifen-funktion hintereinander verwende.
Kann ich das irgendwie umgehn/anders machen?
 
Zuletzt bearbeitet:
Also, zuerst mal:
C++:
*(ges_termin+z)
Warum nicht
C++:
ges_termin[z]

Dann...die for-Schleife mmit Inhalt im zweiten Costück gehört
eigentlich nach das komplette Codestück.
Dort, wo gerade das for steht, solltest du das Eingelesene doch ins Array speichern
(das zwischen Codeteil1 und 2 mit malloc angelegt wurde).

Dann, erst danach, kannst du mit for alle durchgehen und ausgeben.

Noch was: Nach dem ersten while(!feof)-Block musst du dem Programm sagen, die Datei wieder von vorn zu lesen, bevor der zweite while(!feof)-Block kommt:
C++:
fseek(outFile, 0L, SEEK_SET);
Oder du schließt und öffnest wieder (fclose-fopen). fseek ist aber schneller.

Noch was: Warm outFile? Wenn schon, dann inFile.


Zur Frage, ob man sich die zweite while-Schleife sparen kann:
Nein, nicht wenn du das Ganze mit Arrays machst.

Naja, eigentlich schon. Aber das wäre noch schlechter als der aktuelle Code
(Prinzip: zuerst ein Array Größe 1, einlesen. Wenns noch weiter geht, noch ein malloc für Größe 2, den Wert vom 1-Array reinkopieren, den neuen dazu, das 1-Array löschen.
Wenns in der Datei noch immer weiter geht, ein 3-Array machen...
aber das ist großer Blödsinn).

Alternative: Keine Array, sondern Listen verwenden.
Da muss die Gesamtgröße nicht schon von Anfang an bekannt sein.
 

Neue Beiträge

Zurück