Array sortieren



  • mcspam schrieb:

    Ich habe eine Datei in folgendem Muser:

    foo - ...
    bla - ...
    test - ...
    void - ...
    ...
    

    Jetzt will ich diese Datei sortieren.
    BubbleSort erfordert jedoch einen Array im Speicher, zum umsortieren der Einträge.
    Lässt es sich nicht verhindern, dass ich die Datei zunächst in einen Buffer(Array) einlesen muss?

    Danke und Gruß

    Hi!

    Nein! Wenn du die Datei sortieren willst, musst du sie auslesen, sortieren, und wieder wegschreiben. Evtl. noch zwischendurch die Datei leeren und dann erst wieder reinschreiben.

    Code-Hacker



  • "Verhindern" liese es sich vielleicht schon, aber wofür??

    Die Lösung mit dem eingelesenen Array ist

    a) sauberer
    b) performanter
    c) einfacher zu verstehen
    d) besser geeignet, wenn mehrere Benutzer gleichzeitig auf die Datei zugreifen können. (Sobald du eine Datei in einem Schreibmodus öffnest ist sie im Normalfall für andere Benutzer gesperrt; Wenn du eine andere Variante als das Array nimmst, wirst du wahrscheinlich die Datei lesend und schreibend öffnen müssen)

    Noch Fragen?



  • ja:
    was, wenn die Datei "groß" ist 😉



  • Hoffen, dass der Arbeitsspeicher reicht? 😉

    Mit Ernst: Dann musst du dir ein Aufteilungsverfahren überlegen oder bereits beim Schreiben der Datei darauf achten, dass der Eintrag an die richtige Stelle kommt.



  • dass der Arbeitsspeicher reicht, hofft Microsoft bei seinen Produkten wohl auch 😉



  • Ja oder dass noch genügend Festplattenspeicher für den virtuellen Speicher vorhanden ist 😉 Außerdem ist es ja total unnötig reservierten Speicher wieder freizugeben, wenn man ihn nicht mehr braucht. 🤡



  • Jetzt steh ich nochmal vor nem anderen Problem:

    da ich dei Dateilänge nicht kenne, bräucht ich eigentlich einen dynamischen Array.
    Da ich C verwende dürfte sich das nur mit calloc umsetzen lassen.
    Dabei habe ich aber wieder das Problem, dass ich den Speicher wieder freen müsste. Was ist aber z.B. wenn mir das Programm vor dem free abschmiert? 😕

    was würdet ihr machen?



  • Wenn dir das Programm abschmiert, dann ist dir sowieso nicht zu helfen...

    Oder suchst du etwas im Stile von atexit() -> zB atcrash() ??



  • nein, aber was ist, wenn der Benutzer das Programm killed, hm...hast du mal da dran gedacht!



  • Dann kannst du nur noch hoffen, dass das Betriebssystem ein schlaues ist.
    Ansonsten ist der User selber schuld 😉



  • Wenn ein Programm beendet wird löscht das OS sämtlichen belegten Speicher und gibt
    ihn wieder frei. Egal wie du das Programm beendest. Und wenn es nen OS absturz ist,
    ist der Speicher auch leer 😃



  • jo, hast schon Recht..
    vor allem in Linux ist die Speicherverwaltung ziemlich heftig, jaja is OT



  • @mcspam

    da ich dei Dateilänge nicht kenne, bräucht ich eigentlich einen dynamischen Array.

    wieso kennst du die dateilänge nicht?
    diese kannst du doch recht einfach feststellen

    int filesize;
    
    fseek(fp, 0, SEEK_END);
    filesize = ftell(fp);
    fseek(fp, 0, SEEK_SET);
    

Anmelden zum Antworten