RunSeb Geschrieben 12. April 2007 Geschrieben 12. April 2007 Hallo Ich möchte eine Textdatei mit boolschen Gleichungen einlesen Die sind alle immer so aufgebaut, mal mehr mal weniger Gleichungen. A_1 = NOT A_1 ; 1 A_1 .CLK = T_1 ; 1 A_2 = A_1 & NOT A_2 OR NOT A_1 & A_2 ; 2 A_2 .CLK = T_1 ; 1 A_3 = NOT A_2 & A_3 OR A_1 & A_2 & NOT A_3 OR NOT A_1 & A_3 ; 3 __END Jede Gleichung wird immer wie ihr seht durch ein Semikolon abgeschlossen. Ich habe mir das so so gedacht das ich ein CString - Array erstelle und dann beginne immer jeweils bis ein Semikolon kommt das Array zu füllen. //C/C++ Code: { CFile file; CFileException fileException; if ( !file.Open(strFile,CFile::modeRead,&fileException) ) { // bla bla bla } else { char text[256]; UINT nActual = 0; file.Seek( 0, CFile::begin ); nActual = file.Read( text, sizeof( text ) ); } So hab ich das bis jetzt. Er liest mir aber jetzt das ganze 256er Array voll. Frage: 1. Wie kann ich dafür sorgen das er bei einem Semikolon abbricht das Array zu füllen 2. Und sich die Position merkt und dort wieder anfängt ein 2. Array mit der nächsten Gleichung zu füllen 3. Ist der Ansatz überhaupt erstmal i.O. oder hat jemand ganz andere Vorstellungen wie er das machen würde, würde mich alles interessieren. 4. Welche Nutzen bzw. Vorteile haben CStdioFile oder CArchive? ( CArchive wohl eher nicht ) Danke an jeden der mal kurz drüber schaut! P.S. Ein bisschen Quellcode macht sich immer gut zu den Erklärungen. Zitieren
pit030771 Geschrieben 12. April 2007 Geschrieben 12. April 2007 Entweder du lädst die Datei komplett in deinen String und untersuchst diesen dann auf das ";". Oder du leißt jedes Byte der Datei einzeln in ein char und überprüfst es ob es ein ";" ist bevor du es in einen String packst. Die Klasse CFile hat glaube ich keine Methode die das für dich übernimmt. Der ifstream aus STL kann das aber glaub ich. gruß Zitieren
caytchen Geschrieben 15. April 2007 Geschrieben 15. April 2007 Erstmal ist doch die Frage angebracht wieso man diesen dreckigen Mist ala CString, CFile usw. nutzt. Dann bietet C++ die Funktion std::getline, welche als Parameter einen istream by-reference übergeben bekommt sowie einen std::string ebenfalls by-reference der mit dem Ergebnis gefüllt wird. Angemerkt sei, dass istream selbst durchaus eine getline-Funktion hat, diese aber nur mit C-Strings arbeitet. Normalerweise würde std::getline bis zu einem '\n', also einem Zeilenumbruch, lesen. Dieses Verhalten lässt sich aber anpassen indem man als 3. Variable einen delimeter (deutsch in etwa "Trenner") als char übergibt. Das ganze könnte z.B. so aussehen: std::ifstream file("meinTextfile.txt"); std::string buf; if (!file.is_open()) { throw "Error loading File"; } while (file.good() && std::getline(file, buf, ';')) { if (!buf.empty()) { // tu was tolles mit dem buffer } } file.close(); Zitieren
Klotzkopp Geschrieben 15. April 2007 Geschrieben 15. April 2007 Hallo caytchen, Willkommen auf dem Board. Erstmal ist doch die Frage angebracht wieso man diesen dreckigen Mist ala CString, CFile usw. nutzt.Offensichtlich, weil man die MFC verwendet. Wenn du etwas dagegen hast, kannst du gerne sachliche und begründete Kritik anbringen. Also reiß dich bitte zusammen. Deine Prüfung auf good in der Schleifenbedingung ist übrigens überflüssig. Zitieren
pit030771 Geschrieben 15. April 2007 Geschrieben 15. April 2007 manche leutz haben sich neben nicht im griff. Zitieren
caytchen Geschrieben 15. April 2007 Geschrieben 15. April 2007 Offensichtlich, weil man die MFC verwendet. Wenn du etwas dagegen hast, kannst du gerne sachliche und begründete Kritik anbringen. Also reiß dich bitte zusammen. Was mich erschreckt ist das hier scheinbar von vorneherein auf diese zurückgegriffen wird, "weil mans so gelernt hat". Die STL ist deren jedenfalls mehr als vorzuziehen, schon aus Portabilitätsgründen. Zitieren
Klotzkopp Geschrieben 15. April 2007 Geschrieben 15. April 2007 Was mich erschreckt ist das hier scheinbar von vorneherein auf diese zurückgegriffen wird, "weil mans so gelernt hat".Eben, "scheinbar". Warum hier die MFC benutzt werden, kannst du nicht wissen. Wenn dich deine eigenen Spekulationen erschrecken, kann das auch daran liegen, dass es eben Spekulationen sind. Die STL ist deren jedenfalls mehr als vorzuziehen, schon aus Portabilitätsgründen.Wenn im einen bestehenden Projekt Portabilität keine Anforderung ist, und überall durchgängig die MFC verwendet werden, ist es Unsinn, eine weitere Bibliothek - Standard oder nicht - hinzuzufügen. Das verschlechtert nur die Wartbarkeit des Codes. Religiöses Refactoring als Selbstzweck lohnt sich nicht. 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.