AndiE Geschrieben 2. März 2009 Geschrieben 2. März 2009 Hallo, ich hatte mich mich bisher noch nie richtig mit dem "Stream-Konzept" C++ beschäftigt. Bisher habe ich mir die Daten von der Tastatur oder dem Dialog geholt und auf den Monitor/View geschrieben. Auf den datenträger habe ich Daten nur geladen und gespeichert. Nun wollte ich für ein Projekt unter ausschliesslicher Nutzung der MFC einen HTML-ähnlichen Eintrag, der in einer Datei vorliegt, verarbeiten: <satz nr=1 > Text </satz> Das Programm soll hier den "Text" in einem CStringArray satz unter der Nr 1 speichern. Mein Vorgehen wäre(Datei ist geöffnet), um den ersten "Tag" zu laden : char c; CStringList arglist; CString wort; CFile file; do { // Werte zurücksetzen wort=""; zeichen=0x20; do { file.read(c,1) wort+=c; }while(c!=' ') // Lese Wort arglist.append(wort); }while(wort!='>'); Der Code soll eine StringListe wie diese erzeugen: 1. <satz 2. nr=1 3. > Das würde mir schon zur Weiterverarbeitung reichen, weil ich dann die Argumente prüfen und aus dem zweiten Eintrag die Satznummer abtrennen kann. Nun wird immer nur ein Zeichen eingelesen, was bei längeren Dateien sicher nicht sehr effektiv ist. Hat jemand eine Idee oder enen Link, wie ich das effizienter lösen kann? Danke MfG André Zitieren
Crush Geschrieben 2. März 2009 Geschrieben 2. März 2009 Vielleicht mit einem Filepuffer, der mehr als ein Byte enthält? Zitieren
AndiE Geschrieben 2. März 2009 Autor Geschrieben 2. März 2009 Danke, hätte ich auch selbst drauf kommen können. Aber gibt es auch effizientere Algorithmen? Zitieren
Beinemann Geschrieben 3. März 2009 Geschrieben 3. März 2009 tach andie, habe bisher noch nicht in c# programmiert, aber wenn es in c++ schon möglich ist ganze wörter einzulesen, dürfte es da auch was in c# geben. logischerweise wäre es das sinnvollste den text iterativ nach dem string "nr=" zu durchsuchen und mit dem definierten abstand zwischen dem gesuchten string und dem satz zu springen um eben diesen auszulesen. da c# eine .net sprache ist, müsstest das z.b. mit der methode substring() gehen. alternativ könntest du was anderes mit readline() probieren (dürfte recht selbsterklärend sein :-) ) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.