Daten aus einer Binärdatei auslesen + nach best. Gesichtspunkten sortieren





  • Ich hatte das ganze ja schonmal hinbekommen - das Problem dabei war, dass ich die Datensätze irgendwie nicht korrekt mit übernommen habe.
    Und das Problem möchte ich eben gern meiden.

    Deswegen nochmal die Frage

    //EDIT:
    Oh ich glaub es funktioniert 😉
    Muss ich es nur noch umbasteln, dass das größte dann oben steht 🙂



  • voodoopuppe schrieb:

    Muss ich es nur noch umbasteln, dass das größte dann oben steht 🙂

    Und das dürfte auch nicht so schwer werden 😉 Du mußt in deiner Vergleichsfunktion nur die Rückgabewerte -1 und 1 vertauschen, dann hast du die umgekehrte Sortierung.



  • hab einfach > und < vertauscht, hat den selben Effekt 😉
    Andere Frage:
    Wie gebe ich die sortierten Daten aus dem Array jetzt noch über den Drucker aus?

    Kann ich das einfach so machen:
    [CPP]FILE* printer = fopen("LPT1","w");
    if(!printer)
    {
    printf("Drucker konnte nicht gefunden werden, bzw. ist nicht eingeschaltet.\n");
    return EXIT_FAILURE;
    }

    fputs(??Kommt hier einfach der Name der Funktion rein wo ich die Daten sortiert ausgebe??,printer);
    fputc('\f',printer);

    fclose(printer);

    return EXIT_SUCCESS;[/CPP]



  • voodoopuppe schrieb:

    hab einfach > und < vertauscht, hat den selben Effekt 😉

    klar, weil die umsätze alle 0 sind 😉



  • Du könntest deiner Ausgabefunktion einen zusätzlichen Parameter "FILE* fout" mitgeben und dort drin über fprintf() ausgeben (funktioniert genauso wie printf(), erhält aber als ersten Parameter die Zieldatei). Dann kannst du im Hauptprogramm entscheiden, wohin die Ausgabe gehen soll - print_data(...,stdout); gibt auf dem Monitor aus, print_data(...,printer); auf dem Drucker.



  • Versteh ich das also richtig, dass du meinst ich soll eine If-Abfrage einbauen, und die soll überprüfen ob fout printer oder stdout ist und wenn printer, dann soll einfach fprintf anstatt von printf genommen werden?

    Also quasi so:

    int Ausgabe(int OrdnenNach,FILE* fout)
    {
     if (fout == printer)
     {
      for(i=0;i<N;++i) 
      { 
        Arbeitseffektivitaet = (myRECORD[i].Umsatz/myRECORD[i].Beschaeftigte);
        Mitarbeiterlohn = (myRECORD[i].Loehne/myRECORD[i].Beschaeftigte);
        fprintf("Filiale:               %s\n",myRECORD[i].Filiale
        fprintf("Umsatz:                %f\n",myRECORD[i].Umsatz);
        fprintf("Bestand:               %f\n",myRECORD[i].Bestand);
        fprintf("Beschaeftigte:         %f\n",myRECORD[i].Beschaeftigte);
        fprintf("Loehne:                %f\n",myRECORD[i].Loehne);
        fprintf("Mitarbeiterlohn:       %f\n",Mitarbeiterlohn);
        fprintf("Arbeiteseffektivitaet: %f\n\n",Arbeitseffektivitaet);
        getch();
      }
      else
    { Ausgabeammonitor....}
      fclose(fh);
    }
    

    (stark gekürzte Variante)



  • Nein, du gibst fprintf() einfach mit auf den Weg, wohin es ausgeben soll:

    int Ausgabe(int OrdnenNach,FILE* fout)
    {
      for(i=0;i<N;++i) 
      { 
        Arbeitseffektivitaet = (myRECORD[i].Umsatz/myRECORD[i].Beschaeftigte);
        Mitarbeiterlohn = (myRECORD[i].Loehne/myRECORD[i].Beschaeftigte);
        fprintf(fout,"Filiale:               %s\n",myRECORD[i].Filiale);
        ...
      }
    }
    
    //Ausgabe auf Monitor:
    Ausgabe(3,stdout);
    
    //Ausgabe auf Drucker:
    FILE* printer = fopen("LPT1","w");
    Ausgabe(1,printer);
    
    //Speichern in Datei:
    FILE* datei = fopen("data.txt","w");
    Ausgabe(0,datei);
    


  • Das dumme ist eben das mit dem Drucker funktioniert so nicht..:(

    Ich selber hab keinen Drucker am LPT1 Anschluss, drucke via LAN und in der FH is es ja genauso 😢



  • Dann liegt das nicht an fprintf(), sondern an der Zielangabe für die Datei ("LPT1") - afaik sind solche Sonder-Dateinamen nicht standardisiert.


Anmelden zum Antworten