Wie kann ich diese Textdatei lesen
-
Hallo zusammen,
ich habe eine Textdatei, wo jedes 2. Byte mit NULL beschrieben ist, also z.B.
0x44 0x00 0x65 0x00 etc.
Was ist das für eine Formatierung, Unicode ? und wie kann ich eine komplette Zeile bis zum 0x0D 0x00 0x0A 0x00 lesen ?Hiermit komme ich nicht weiter, da liest er nur ein Zeichen ein:
wifstream source( File, ios::in ); if ( source.good() ) { source.getline( Temp, 512 ); // ... }
-
Auf den ersten Blick ist Formatierung etwas mit Leerzeichentrennung. Die Zeichenblöcke sind Hex, schneide das 0x ab und wandle in Hex um.
Gruß myerscola
-
Hallo myerscola,
vielleicht habe ich mich etwas falsch ausgedrückt, diese Anzeige (0x..) bekomme ich mit einem Hex-Viewer angezeigt. Die Datei ist aufgebaut mit normalen ASCII-Zeichen und jedes 2. Byte ist dann ein NULL-Byte, als Text zeigt der Viewer z.B. "D.e." etc.
Also 16 bit char, wobei bit 0-7 immer NULL sind und bit 8-15 das ASCII-Zeichen enthält.
Meine Frage ist, muss ich mir da was "basteln" oder gibt es Standard Funktionen die so eine Textdatei lesen können ?
-
Hallo Ronco11,
wenn du C++ Builder 2009 (wurde direkte Unicode Unterstützung eingebaut) oder höher verwendest, kannst du zB mit TStringList die Datei öffnen.
Hast du eine kleinere Version als 2009 kannst du zB
TNTWare Unicode verwenden war damals OpenSource und wurde übernommen
von TMS http://www.tmssoftware.com/site/tmsuni.asp
-
Hallo VergissEs,
ich habe den C++Builder XE. Mit TStringList (list->LoadFromFile()) habe ich es jetzt auch versucht, aber auch da liest er nur das erste Zeichen (bis zum ersten '\0') ein. list->Count zeigt mir auch nur einen Eintrag an. Hast du noch einen Tip für mich ?
-
Was soll TStringList (list->LoadFromFile()) deiner Meinung nach machen?
std::auto_ptr<TStringList> MyList (new TStringList()); MyList->LoadFromFile("DeineDatei");
-
Damit wollte ich nur sagen, dass ich die Funktion LoadFromFile verwendet habe:
TStringList *list; list = new TStringList; list->LoadFromFile( File ); int a = list->Count; // hier kommt 1 String sTemp = list->Strings[0]; // hier kommt "D\0"
Die Datei wird geöffnet, aber nur ein Zeichen gelesen, halt nur der erste char.
-
Hallo
In einer echten Textdatei haben die 0-Bytes nunmal nichts zu suchen. Genauso wie in einen String oder in einer StringList. Du hast eben keine echte Textdatei, sondern eine Binärdatei. Um diese zu verarbeiten must du Streams einsetzen, wie zum Beispiel TFileStream oder std::ifstream.
bis bald
akari
-
Hallo akari,
danke für den Tip. Also ist diese Art der Formatierung kein Unicode-Derivat oder 16 bit char Format, was man mit herkömmlichen Mitteln, wie getline() etc., lesen kann. Muss ich mir doch was basteln
-
Hallo
Nicht mit std::getline, den auch dort wird ein String ohne 0 erwartet. Du must den Stream selber parsen, Zeichen für Zeichen.
bis bald
akari