uneinlesbare Zeichen



  • Und Du machst die Tatsache, dass das Einlesen "wohl nicht so funzt" sicher daran fest, dass am Bildschirm nicht dasselbe erscheint wie im Editor, oder? 🙄



  • charlie schrieb:

    -------------------------------------------------------------------------------
    **TI83**
    Program file 02/13/06, 14:35 \ M ABC1 M K 00005A?°0035B?00030C?°Bq¼B
    q4‚A‚Cƒ2AY?°Bq¼B
    q4‚A‚Cƒ2AZ?Y+Z Ë
    -------------------------------------------------------------------------------

    Das sieht nicht so aus, als ob der TI-83 seine Daten ASCII-konform darstellt. Vermutlich (ziemlich sicher sogar) mußt du dich also mal schlau machen, wie dieser Datenwust zu interpretieren ist.

    PS: Was die Ausgabe im Programm angeht: versuch' die Datei mal zeichenweise zu lesen und auszugeben - kann durchaus sein, daß ein mittendrin stehendes '\0'-Zeichen die Stringausgabe abbricht.



  • Danke, werds mal versuchen.



  • @LordJaxom: Das Problem liegt nicht darin, dass verschiedene Zeichen angezeigt werden (Bin ja nicht auf den Kopf gefallen, Ich weiß, dass im CMD die Ausgabe als ASCII erfolgt), sondern dass nur bis zum **TI83** gelesen wird, und dann abgebrochen wird, weil eine \0 erreicht wird.

    Werds mal so versuchen, wie's mir CStoll geraten hat.

    Aber noch eine Frage, wie mir scheint, wird jede Zeile mit einer binären Null abgeschlossen (im Rechner), woher weiß ich dann, wie weit ich lesen darf?

    Danke
    __charlie__



  • Das sind alles Fragen die mit C++ nichts zu tun haben. Geh auf die Seite von Texas Instruments und sieh dich dort mal um, da gibts sicher nen Bereich für Entwickler.



  • charlie schrieb:

    Aber noch eine Frage, wie mir scheint, wird jede Zeile mit einer binären Null abgeschlossen (im Rechner), woher weiß ich dann, wie weit ich lesen darf?

    einlesen mit fstream::readsome() (der Rückgabewert sagt dir, wieviele Elemente tatsächlich gelesen wurden) oder zeichenweise einlesen bis zum EOF (und mitzählen).



  • Tut mir leid, readsome kenn ich nicht.
    Auf der TI Seite find ich nichts, außer dass das absicht ist, dass es keinen Programmeditor gibt (Schummelnde Studenten...)

    Könntest du mir mal eine Funktion mit readsome zeigen?

    Übrigens bin ich draufgekommen, dass das Zeichen, dass das Einlesen stoppt beim händischen Kopieren des Textes nicht übernommen wird.

    Danke!



  • ist noch wer da???
    Bin so alleine...



  • Nur soviel: Wenn Du binär liest gibt es kein Trennzeichen, die \0 ist ein Zeichen wie jedes andere auch. Dem Lesebefehl ist auch egal ob da vorne ne \0 steht, in der Mitte oder am Ende, wenn es 100 Zeichen zu lesen gibt, gibt er Dir 100 Zeichen. (Gerne auch 100 mal \0)



  • Eine Ergänzung noch: Kann es sein dass der nach X Zeichen abbricht weil die serielle Schnittstelle aufgrund ihres Tempos erst X Zeichen liefern konnte?



  • Hallo!

    Nein, das nicht, denn ich habe die .83p Datei auf meinem PC gespeichert.
    Wenn ich irgendeine andere Textdatei lese, gehts komplett.

    Und wie meinst du das von wegen binär einlesen?
    Ich habs halt mit nur_ein_test.read(...) gemacht, da gehts auch nicht.

    Aber irgendwie muss es ja möglich sein diese Datei vollkommen zu lesen oder? Im Editor kann man ja auch alles sehen...

    Trotzdem Danke!



  • Aber irgendwie muss es ja möglich sein diese Datei vollkommen zu lesen oder? Im Editor kann man ja auch alles sehen...

    Ich bin mir ziemlich sicher, daß die Datei vollständig gelesen wird. Lediglich der Befehl "cout<<buffer;", mit dem du das kontrollieren willst, bricht beim ersten '\0'-Zeichen im Puffer mit der Ausgabe ab.

    @readsome: Ich weiß nicht genau, ob readsome() zum ANSI-Standard gehört(*) oder eine MS-Erweiterung ist, aber mit [url=http://www.cppreference.com/cppio/gcount.html]gcount()] kannst du feststellen, wieviele Zeichen read() wirklich eingelesen hat:

    //a - Berechnung mit gcount()
    ifstream fin("daten.83p");
    fin.read(buffer,buflen);
    int inlen=fin.gcount();
    for(int i=0;i<inlen;++i)
      cout<<buffer[i];
    
    //b - readsome()
    ifstream fin("daten.83p");
    int inlen=fin.readsome(buffer,buflen);
    for(int i=0;i<inlen;++i)
      cout<<buffer[i];
    

    * cppreference.com erwähnt es nicht, in der MSDN steht sinngemäß drin, daß es maximal n Zeichen liest und die Anzahl tatsächlich gelesener Zeichen zurückgibt.

    PS: Was das Dateiformat angeht: ohne konkrete Informationen vom Hersteller bleibt dir nur eins - raten 🙂



  • Danke! 😃

    Ich werds gleich versuchen.



  • Naja, jetzt geb ichs auf 😡

    Es werden wirklich nur die paar Zeichen eingelesen...
    egal.

    Trotzdem Danke
    __charlie__


Anmelden zum Antworten