Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Binärdatei lesen

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 < [ 2 ] [ 3 ]
000
02.01.2003, 20:08 Uhr
~Gast
Gast


ich hab von der FH eine Aufgabe, ein Prog zu schreiben welches aus einer Binärdatei liest.

Leider liest mein Quellcode nur mist aus dieser datei und ich weiß nicht mehr weiter. wer kann mir helfen?

Hier der Link zu Datei: www.in.fh-merseburg.de/~schroet/c/Aufgabe/DAT-Daten/Vertrag.dat

und hier mal mein Quellcode:

C++:

struct Satz
  {

  char vertrnr[7];
  char art[21];
  char liiferant[19];
  short vertagsmenge;
  unsigned short liefertermin[3];
  unsigned short liefermenge;

  /*
   char Vertragsnummer[7];
   char Artikel[21];
   char Lieferant[21];
   unsigned short Vertragsmenge;
   unsigned short Liefertermin[3];
   unsigned short Liefermenge;  */

   }bestellung[19],a;


int x,y,j,k,anzahl;
char taste;


//----------------------------------------------------------------------------------------------

int datei_oeffnen()
{
   FILE *Dateiptr;
   int j=0;
        char *eindatei= "Vertrag.dat";
        anzahl=0;
   if (!(Dateiptr = fopen(eindatei,"r")))
   {
      printf("Fehler beim Oeffnen der Datei %s!\n", eindatei);
      getch();
      return(-1);
   }
   else
      while   (fread(&a, sizeof(a),1, Dateiptr) == 1)
      {
                        printf ("\n\nVertragsnummer: %s",a.vertrnr);
         strcpy(bestellung[j].vertrnr,a.vertrnr);
                        printf ("\nArtikel: %s",a.art);
                        strcpy(bestellung[j].art,a.art);
                        printf ("\nLieferant: %s",a.liiferant);
                        strcpy(bestellung[j].liiferant,a.liiferant);
                        printf ("\nVertragsmenge: %i",a.vertagsmenge);
                        bestellung[j].vertagsmenge = a.vertagsmenge;
                        printf ("\nLiefertermin: %2d",a.liefertermin[3]);
                        bestellung[j].liefertermin[3]=a.liefertermin[3];
                        printf ("\nLiefermenge: %i",a.liefermenge);
                        bestellung[j].liefermenge = a.liefermenge;
                        
                        getch();
                     anzahl++;
                     ++j;


      }
   fclose(Dateiptr);
        return(0);
}


//----------------------------------------------------------------------------------------------

/*Hauptfunktion*/
void main()

{
   datei_oeffnen();    //Lesen aus der Datei Vertrag.dat

do {

clrscr();
printf("\n");
printf("\t     ###################################################\n");
printf("\t     #                      Menue                      #\n");
printf("\t     ###################################################\n");
printf("\t     # Sortiert nach Lieferanten                ->   1 #\n");
printf("\t     #         Ende                             ->   0 #\n");
printf("\t     ###################################################\n");


printf("\n\t\t       #################\n");
printf("\t\t       #  Ihre Wahl:");
x=wherex();
y=wherey();
printf("   #");
printf("\n\t\t       #################\n");

do
                                                                 //DO-SCHLEIFE//
{                                                         //DO-SCHLEIFE Anfang//
gotoxy(x,y);
taste=getch();
}                                                             //WHILE-SCHLEIFE//
while                                                //Kontrolle Zahleneingabe//
     ((taste!='1') &&
      (taste!='0'));


switch(taste)                                                       //SWITCH//
{                                                              //SWITCH Anfang//
case '1': clrscr();                         //Funktiosaufruf bei Zahleneingabe//
gotoxy(x,y);
ausgabe_sort(bestellung);
break;
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////

default: clrscr();
printf("\n\t       ###################################################\n");
printf("\t       #                      ENDE                       #\n");
printf("\t       ###################################################\n");
printf("\t       #               Beenden mit <ECS>                 #\n");
printf("\t       #             Weiter <beliebige Taste>            #\n");
printf("\t       ###################################################\n");

         break;

}                                                                //SWITCH Ende//

taste=getch();
}
while((taste != 27));
}




Ich hab schon vor lauter unmut seine Struct mit den Schreibfehlern genommen aber nix klappt.

Hilfe

Dieser Post wurde am 02.01.2003 um 22:24 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.01.2003, 22:07 Uhr
~Noch ein Gast
Gast


Hy!

1.) Du hast Global
C++:
int j;

In der datei_oeffnen()
C++:
int i = 0;

und du Zaehlst dann über j ohne j einen wert zu zu weisen.

2.)Und was ist mit Leerzeichen in deiner Datei? Die List du auch ohne sie zu berücksichtigen.

Ich hoffe ich konnte dir was helfen bis dann!

Noch ein Gast
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.01.2003, 22:55 Uhr
~Gast
Gast


mh...

....das ist ein i man kann das hier nur ein wenig schlecht sehen bzw. er hat da wirklich ein j stehen.

Mein Quellcode hat da aber ein i also daran liegt es nicht.

zu 2.) wie meinst du das mit dem Einlesen?

Ich lese doch alles Binär--> Byteweise ein!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.01.2003, 00:45 Uhr
Hans
Library Walker
(Operator)


Hallo,

hier mal ein kurzer Hinweis, ohne die Aufgabe genauer studiert zu haben.


C++:
Dateiptr = fopen(eindatei,"r");



öffnet die Datei wahrscheinlich als Textdatei. Wenn Du sie als Binärdatei öffnen willst, musst Du das am besten explizit angeben. Also schreibst Du:

C++:
Dateiptr = fopen(eindatei,"r[b]b[/b]");



Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.01.2003, 01:22 Uhr
~Gast
Gast


@Hans

Danke, dass hab ich auch getestet aber das hat nix gebracht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
03.01.2003, 10:04 Uhr
~Alois
Gast


Ich glaube die Zeile:

Code:
fread(&a, [b]sizeof(a),1[/b], Dateiptr)

muss lauten

Code:
fread(&a, [b]1,sizeof(a)[/b], Dateiptr)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
03.01.2003, 18:03 Uhr
~Gast
Gast


nein, daran kann es nicht liegen!

Der Code ist so schon ok!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
04.01.2003, 11:18 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


irgendwie bin ich blöd oder ist a überhaupt nicht definiert?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
04.01.2003, 17:50 Uhr
~Gast
Gast


doch doch,

a ist ein teil der Struct. (ganz oben)


wenn ich mit siteof(a) mir das ausgeben lasse, sagt er 60 Byte aber eigentlich müßten es doch 59 sein?!

Wie kommt das?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
04.01.2003, 18:19 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


oh das a hab ich da übersehen

was mir aufgefallen ist:


C++:
while (fread(&a, sizeof(a),1, Dateiptr) == [b]1[/b])


bei mir gibt er mir a bisserl mehr als 1 zurück wenn ich das da oben ausprobier ...
er gibt immer zurück wieviel Zeichen er gelesen hat, nicht wieviel structs er voll gemacht hat ...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ 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: