uneinlesbare Zeichen
-
Ich hab auch versucht, die Datei binär zu lesen, doch das hilft auch nix.
Aber nicht mit getline, oder?
-
HumeSikkins schrieb:
Ich hab auch versucht, die Datei binär zu lesen, doch das hilft auch nix.
Aber nicht mit getline, oder?
Nein. Mit test.read(variable, Einlesegröße).
Der Buffer sollte eigentlich auch nicht zu klein sein:Der Code ist nicht schön gestaltet, aber ich hab momentan nich so viel Zeit:
//1. Möglichkeit binär: Ausgabe:**TI83**→ //Das letzte Zeichen wird hier als → angezeigt #include <iostream> #include <fstream> using namespace std; #define max_elements 100 char temp[max_elements]; int testi=1; int main(){ cout<<"TEST\n"; ifstream nur_ein_test("test.txt", ios_base::in|ios_base::binary); if(nur_ein_test.good()){ cout<<"Lade..."; nur_ein_test.read(temp, sizeof(temp)); cout<<temp; } }oder mit Getline
//Ausgabe auch **TI83**→ ... if(nur_ein_test.good()){ cout<<"Lade..."; while(!nur_ein_test.eof()){ nur_ein_test.getline(temp, max_elements); cout<<temp; } cout<<temp; } ...Tja, das ist es. Ein wenig schlampig, aber es dürfte gehen.
Zumindest bei jeder normalen Textdatei.Wenn ihr wollt schick ich euch die .83p (im code halt test.txt) per Email.
PS.: so eine kleine Frage nebenbei, ich interessiere mich für c#, gibt es da auch so was wie system("BEFEHL") oder für Win32 halt ShellExecute(...);
Hat c# irgendwelche nennenswerten Nachteile im Vergleich mit c++?Danke.
__charlie__
-
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__