get data from file



  • hallo, ich habe eine sehr große textdatei, möchte aber für eine funktion nur die ersten 16 zeichen auslesen.
    wie geht das möglichst speichersparend, also ohne die ganze textdatei zu laden.

    der aufbau sieht so aus:

    **ArcFile_001***nach den 3 sternchen kommt nun ganz viel text. irgentwelche
    daten, die für meine funktion unwichtig sind und nicht alle extra geladen werden
    sollen. meine erste idee dafür wäre mit getline die erste zeile auszulesen und
    dann mit substr den text bei *** abzuschneiden. was haltet ihr von dieser idee?
    




  • ok, habs 😉

    Neue Frage, für die ich nicht extra ein neues thema aufmachen will:
    ich habe einen char* und möchte die letzten beiden buchstaben löschen!
    Wie?



  • verschieb das NULL-Byte um zwei stellen nach vorne:

    if(lstrlen((LPCTSTR)psz)-2 >= 0)
        psz[lstrlen((LPCTSTR)psz)-2] = 0;
    else
        psz[0]=0;
    


  • klappt nicht 😕

    vielleicht lag es an meiner erklärung..
    also, ich hab eine variable:

    char * ibuffer = new char[size];
    ifile.read(ibuffer,size);
    

    diese variable will ich dann wieder in eine andere datei speichern, jedoch ohne die letzten beiden zeichen:

    ofile.write(ibuffer,size);
    


  • Hmmh, um wieviel muss man size verkleinern, sodass size-2 Byte geschrieben werden?
    Bzgl. Nullterminierung musst du natürlich etwas aufpassen, also entweder 0 in die Datei schreiben oder in der Datei vor der Zeichenkette die Länge angeben.



  • Es wäre sinnvoll die Frage richtig zu lesen.

    msdn schrieb:

    CreateFile()+GetFileSize()+ReadFile()+CloseHandle()

    Wofür GetSize() wenn man ausdrücklich nur 16 Byte lesen möchte ?

    z.b. schrieb:

    verschieb das NULL-Byte um zwei stellen nach vorne ..

    Der Fragesteller hatte nicht behauptet eine nullterminierte Zeichenkette zu
    verwenden - auch nicht das das Ergebnis ein socher sein soll.

    Wenn man die erste Frage im gleichen Kontext vermutet liest er aus einer
    Textdatei. Wenn er dann wie empfohlen den Win32-Systemaufruf verwendet hat
    erfährt man sicher ob es geklappt hat und wieviel man gelesen hat.

    Somit ist der ansatz von logikor wohl richtig.



  • merano schrieb:

    Es wäre sinnvoll die Frage richtig zu lesen.

    Klugscheißen hilft bei unpräzisen Frageformulierungen wenig weiter 😉


Log in to reply