Zum Inhalt springen

Text File einlesen. Aber wie genau?


RunSeb

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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ß

Link zu diesem Kommentar
Auf anderen Seiten teilen

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();

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...