Daten in den Arbeitsspeicher legen



  • du mischt hier winapi(C), C und C++ willkürlich. 😮
    ohne jetzt dir zu nahe zu tretten, aber das beste wäre du löscht alles, arbeitest ein tutorial oder ein buch durch und probierst es nochmal, solche learning by doing geschichten sind nicht das richtige.



  • RAMDISK?? 🙄



  • Hab ja schon C++ in 21 Tage und MFC in 21 Tagen gelesen das Problem ist ebend dass in den Büchern nichts über die Bearbeitung von Text Dateien steht, gibt es da welche? Warum ist es problematisch die verschiedenen Sachen zu mischen, ist es nich gut die Vorteile der verschiedenen zu nutzen? Wie Ramdisk könntest du den Befehl mal erleutern, hab in google gesehen dass der Befehl für die Ansprechung des Speichers genutzt wird. Aber nicht gefunden wie. RAMDISK("c:/test.txt") klappt nicht oder muss ich mit include Datei einbinden?



  • Kann mir bitte einfach mal jemand bitte sagen ob es mit ramdisk geht und wenn wie



  • http://tutorial.schornboeck.net/inhalt.htm
    und
    http://c-plusplus.net/forum/viewtopic-var-t-is-39469.html
    zu lesen, wird dir nicht schaden...
    Der Code da oben ist ja wohl grauenhaft...

    Ja weiß dass der Buffer in HS liegt das Problem ist ebend nur dass ich mit den Buffer nicht die selben Sachen wie mit einer txt machen kann. Wollte diese mit fgetc weiter bearbeiten. Das Programm ist ja auch schon fertig braucht nur enorme Rechenzeit.

    Du liest aus der Datei zeichenweise aus, und wunderst dich das es langsam ist ?
    Es wäre wohl schneller, als erstes die Datei z.b. in einen vector<string> zu laden,
    und dann zu bearbeiten...



  • Wenn ich die Datei in den Hauptspeicher lese müsste das Ganze genauso schnell funktionieren und daher würde ich nur gerne wissen ob das geht oder nicht. Aber trotzdem danke für deinen tollen Ratschlag



  • Du lädtst den Text in den Hauptspeicher indem du Variablen deklarierst und den Text in diese Variablen schreibst, was bedeutet, du machst das, was dir die anderen schon vor längerem geraten haben, wozu du nur gemeint hast, es würde länger dauern



  • Oliver1980 schrieb:

    Wenn ich die Datei in den Hauptspeicher lese müsste das Ganze genauso schnell funktionieren und daher würde ich nur gerne wissen ob das geht oder nicht. Aber trotzdem danke für deinen tollen Ratschlag

    Genauso schnell als was ?
    fgetc lies jedesmal von der Platte, und das ist langsam...
    Rat mal warum es funktionen wie getline gibt, um mehr als ein Zeichen einzulesen...



  • Ok wie würdest du aus eiener reihen von Zahlen wo du nicht weißt wie lang die einzelnen sind mit getline eine Zahl holen? Bsp
    1.2333 444.556566 .....
    Das geht meiner Meinung nach nicht. Da du bei jeden Zeichen kontrollieren mußt ob es sich um ein leer Zeichen handelt, und damit die nächste Zahl beginnt.

    Ich hab gemeint es dauert länger für mich das zu Programmieren. Aber ist jetzt auch total egal. Also heißt das ich kann die Datei nicht als txt in Hauptspeicher legen?



  • btw, so wie ich das sehe, machst du das mit der Überprüfung mit deiner switch-case Konstruktion gerade genauso, wie wenn du es mit getline machen würdest, du könntest es auch einfach so machen:

    ifstream eingabe;
    eingabe.open("File.txt");
    ofstream ausgabe;
    ausgabe.open("File2.txt");
    char x[30];
    eingabe>>x; //wenn du es mit den Operatoren >> machst, wird immer bis zum nächsten Leerzeichen gelesen und du kannst schrittweise vorgehen
    //Verarbeitung
    ausgabe<<x;
    eingabe.close();
    ausgabe.close();
    //natürlich bei open() und close() noch auf good() prüfen, dann passt es
    


  • Vorden schrieb:

    ifstream eingabe;
    eingabe.open("File.txt");
    ofstream ausgabe;
    ausgabe.open("File2.txt");
    char x[30];
    eingabe>>x; //wenn du es mit den Operatoren >> machst, wird immer bis zum nächsten Leerzeichen gelesen und du kannst schrittweise vorgehen
    //Verarbeitung
    ausgabe<<x;
    eingabe.close();
    ausgabe.close();
    //natürlich bei open() und close() noch auf good() prüfen, dann passt es
    
    ifstream eingabe("File.txt");
    ofstream ausgabe("File2.txt");
    string x;
    eingabe>>x; //wenn du es mit den Operatoren >> machst, wird immer bis zum nächsten Leerzeichen gelesen und du kannst schrittweise vorgehen
    //Verarbeitung
    ausgabe<<x;
    


  • Oliver1980 schrieb:

    Ok wie würdest du aus eiener reihen von Zahlen wo du nicht weißt wie lang die einzelnen sind mit getline eine Zahl holen? Bsp
    1.2333 444.556566 .....
    Das geht meiner Meinung nach nicht. Da du bei jeden Zeichen kontrollieren mußt ob es sich um ein leer Zeichen handelt, und damit die nächste Zahl beginnt.

    Ich hab gemeint es dauert länger für mich das zu Programmieren. Aber ist jetzt auch total egal. Also heißt das ich kann die Datei nicht als txt in Hauptspeicher legen?

    Ich würd es einfach direkt in ein float/double einlesen, wenns Komma zahlen sind...
    Oder mir die Zahlen als String mit getline(stream,string,'separator') holen.
    Da gibts viele Möglichkeiten. Nur was hat das damit zu tun, ne txt datei
    in den arbeitsspeicher zu legen ? 🙄
    Was machst / willst du mit deinem Programm erreichen ?



  • Als float/double direkt einlesen ist nicht möglich, da ich in der Text Datei ja eine Asci folge habe und keine float Zahlen.
    Will die Datei in den Arbeitsspeicher legen da auf sie immer wieder zu gegriffen wird. Das würde mein Programm ja dann sicher um ein vielfaches beschleunigen. Will eine Text Datei mit x Spalten nach den ersten 3 absteigend sortieren. Die Text datei hat bis zu 500000 Zeilen, daher der lange Rechenaufwand. Werde gleich mal die Verbesserungen von Vorden und volkard probieren denk mal das spart schon mal ne ganze Menge Zeit. Wenn das ganze dann noch von der Festplatte auf den Arbeitsspeicher verlegt werden könnte (die ganze txt )wäre es sicher noch schneller



  • Bin grad dabei die Verbesserung ein zu bauen. Nur leider habe ich das Problem dass er die Zahlen nacheinander einliest aber jetzt nicht erkennt wenn ein Zeilenumbruch ist..



  • Dann find ich wär in deinem Fall wohl es sinnvollste eben mit getline in char-Arrays zu schreiben und diese dann abzuspalten, wenn Leerzeichen kommen und anschließend mit atof(); für float oder atoi(); für int auf deine Variablen rüber zu schreiben



  • Ja genauso mache ich es ja auch nur ebend nicht mit getline sondern getc. Getline geht bei mir nicht da ich immer wissen muss ob ' ' oder '/n'
    meine folge trennt. Da ich bei ' ' was anderes als bei '/n' machen muss



  • Ok, leider habe ich noch keine direkte Antwort auf meine Frage erhalten. Ich würde mich sehr freuen wenn jemand der Ahnung hat, ob ich eine txt in HS legen kann etwas dazu schreiben würde. Egal ob es geht oder nicht. Auch wenn das nicht möglich ist würde ich mich über eine Antwort freuen.



  • Dann schau dir doch mal was zu MemoryMapping an.



  • Hallo,

    Man könnte auch binär in einen char-Buffer einlesen (mit read oder so) und den dann bearbeiten.



  • in c++ gibt es string-streams 😃

    du kannst damit einen c++-string genauso bearbeiten wie eine datei. lies also die text-datei einfach in einen string-stream ein, bearbeite sie, und schreibe sie wieder zurück auf die platte.


Anmelden zum Antworten