Abwechseln Werte aus Datei lesen



  • Du kannst einfach über alles einen index machen und dann loopen



  • worauf bezog sich ebn diese aussage? bei prozeduralen programmiersprachen kann man so ziemlich alles loopen^^ 😉



  • hast ja recht, binär scheint die beste LKösung zu sein, erklärst du noch schnell, wie ich die Zahlen binär ausgebe/einlese?
    Deinen Beispiel-Code check ich jetz net so ganz 🙄

    Ach ja, dann hätte ich doch im Prinzip wieder das selbe Problem wie am Anfang, oder?

    Hab jetz als Beispiel die Datei:

    10010101 100101010 100101001 ...

    Ich muss ja nur jede Zweite Zahl einlesen, aber WIE?
    Und umrechnen von Dezimal nach Binär funzt bei mir irgendwie net 😞



  • also.
    Das geilste an den binären zahlen ist ja, dass du gar nichts umrechnen musst.
    Der rechner versteht im grunde nur binäre zahlen, er rechnet immer mit binären zahlen und speichert alles in binärer form. Deswegen ist es auch so schnell.

    Nur zur ausgabe auf dem bildschirm für die menschen werden die zahlen zu guter letzt wieder in dezimales system umgerechnet, ansonsten werden die dezimalen zahlen nirgendwo gebraucht. (gut, bei der eingabe eben dasselbe: dezimal von dem menschen nehmen, sofort in binär umrechnen, und erst dann mit der eigentlichen verarbeitung beginnen)

    Okay, jetzt zu dem was ich da geschrieben habe. Wenn es ums schreiben bzw lesen von binären dateien geht, ist folgende lösung imho die praktischste und am häufigsten angewandte:

    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    int main(){
      //hier wird eine datei zum schreiben geöffnet
      ofstream myOutput("myFileName.wtf", ios::binary);
    
      //hier erstellst du dir irgendwelche zahlen,
      //die du in die datei schreiben willst
      int lengthArray[]={123,234,345,456,567};
      int positionArray[]={1,2,3,4,5};
    
      //in einer schleife schreiben:
      for(size_t i=0; i<5; i++){
        myOutput.write(
          (char*)(&lengthArray[i]),    //zeiger: wo liegt das objekt?
          sizeof(int) );                //wie groß ist es?
    
        //genau dasselbe für die position:
        myOutput.write( (char*)(&positionArray[i]), sizeof(int));
      }
      myOutput.close();
    
      //jetzt sind die zahlen abwechselnd in die datei geschrieben worden
    
      //so kann man die wieder auslesen:
      ifstream myInput("myFileName.wtf", ios::binary);
    
      int pos=0, len=0;
      for(size_t j=0; j<5; j++){
        myInput.read( (char*)(&len), sizeof(int) );
        myInput.read( (char*)(&pos), sizeof(int) );
        cout<<"Position/Length: "<<pos<<" | "<<len<<endl;
      }
      myInput.close();
    
      return 0;
    }
    

    Das sollte für'n anfang reichen, wenn was unklar ist, sind im code auf jeden fall genug stichwörter zu finden (doku, forumsuche, google werden bestimmt weiterhelfen) ansonsten nochmal nachfragen 👍



  • wenn du nur jede zweite zahl einlesen musst, liest du einfach alle nacheinander ein, verwendest aber nur jede zweite...



  • danke, werd mal sehn, wies sich in der Praxis macht und dann bescheit geben 😃

    Also im Moment bekomme ich solche und ähnliche Ausgaben in der Datei zu sehn:
          ( @ h ....

    und wenn ich sie wieder einlese sind alle Werte 0...
    kann aber eigentlich nicht stimmen.



  • Also im Moment bekomme ich solche und ähnliche Ausgaben in der Datei zu sehn:
          ( @ h ....

    wie "sehen" ? hast du es mit nem text-editor geöffnet oder wie? 😃 dann ist es auch kein wunder... deine integer werden dann jeweils in vier ein-byte-stücke gehaun und jeweils als vier buchstaben bzw. irgendwelche symbole interpretiert...
    das ist ja auch nicht der sinn der sache. Diese daten sind ja nicht für einen leser, sondern für den rechner gedacht. 😉 Um die werte wieder richtig darstellen zu können, musst du es mit einem eigenen programm genauso auslesen, wie du sie reingeschrieben hast.

    und wenn ich sie wieder einlese sind alle Werte 0...
    kann aber eigentlich nicht stimmen.

    also, mein beispiel habe ich eigentlich getestet, hat bei mir auch sehr schön geklappt... so wie es sollte... 😕



  • mim Editor war mir auch klar, dass ich nix schönes zu sehn bekomme, aber selbst wenn das Programm die Werte interpretiert bekomme ich für jeden Wert 0 geschickt->ich teste weiter...



  • moment mal... ich bin mir zu 95% sicher, dass mein codebeispiel funktioniert... poste doch einfach mal hierrein das, was du geschrieben hast, vielleicht fällt der fehler direkt auf...



  • ok:

    for( int i = 0; i < Anzahl_der_Paare; i++)
    {
         TEST1.write((char*)(&iPos[i], sizeof(int));
         TEST1.write((char*)(&iLen[i], sizeof(int));
    }
    
    for( int i = 0; i < Anzahl_der_Paare; i++)
    {
         TEST1.read((char*)(&iPos[i], sizeof(int));
         TEST1.read((char*)(&iLen[i], sizeof(int));
    }
    

    Was is da falsch?

    EDIT:
    An dem ifstream TEST1("Test.xxx", ifstream::binary); liegts nicht, oder?



  • also wenn du mit einem input-file-stream versuchst irgendetwas zu schreiben, dann kann da ja wohl nichts gutes rauskommen...



  • nein nein, dass war nicht der Sinn der Frage->natürlich benutze ich zum Schreiben ofstream...
    Ich wollte nur wissen, obs nen Unterschied macht, ob ich ios::binary schreibe, oder ifstream::binary/ofstream::binary schreibe



  • hm, wenn ich das wüsste... kP... mit ios::binary hats bisher immer ganz jut geklappt, was das andere heisst, musst ich wieder in der doku nachschauen...



  • habs probiert und hat nicht dran geändert...Bekomme immernoch beim Einlesen jedesmal 0 zugeliefert...



  • bau mal solche if() abfragen drumherum:

    ifstream myInput("myFile.tst", ios::binary);
    if(!myInput){
      //laut meckern, weil die datei nicht gefunden wurde
    }else{
      //ansonsten weitermachen
    }
    


  • die sind bei mir immer dabei...



  • Na dann kann dir ja so keiner weiterhelfen.
    Also wirf einfach mal den debugger an, und wenn du nich weiterkommst, dann lässt du einfach mal n blick in deinen code werfen, und postest hir die signifikantesten zeilen. 😉



  • beim debuggen bkomme ich immer die Meldung: Fehler beim starten von cmd.exe



  • ähm... was für einen compiler hast du denn überhaupt? ich kenn mich da jetzt nicht mit jedem einzelnen aus, oder, um genauer zu sein, ich kenn mich mit den ganzen compilern überhaupt nicht aus... 🙄



  • dumm von mir...
    Ich benutz seit kurzem nun VC++2005 Express Edition


Anmelden zum Antworten