Dateiinhalt in einem Array speichern

Ok, ich hatte auch mal Dev-C++ gehabt (davon ist aber sehr abzuraten, würde die Code::Blocks empfehlen).

Ich glaube, ich hatte das Problem gelöst, indem ich ein völlig neues Projekt gemacht habe.
 
Ok ,hab ich gemacht, hat aber ncihts gebracht.

mfg

Edit:
Bei Code:Blocks läufts jetzt.
 
Zuletzt bearbeitet:
Ok ,habe nun einen Codeausschnitt aus einem meiner Bücher teilweise übernommen, hier der Code:
C++:
[…]
     char DateiInhalt;
     string DateiInhalt2;              
     while (!dat_ein.eof()) {
           dat_ein.get(DateiInhalt);
           DateiInhalt2 += DateiInhalt;
           }
Dieser Code ist nicht zu empfehlen, und zwar aus mehreren Gründen:
  • Das eof-Bit wird erst gesetzt, nachdem man versucht hat, über das Ende der Datei hinaus zu lesen. Beim letzten Durchlauf der Schleife wird also kein neues Zeichen eingelesen, DateiInhalt wird nicht verändert und das eof-Bit wird gesetzt. Trotzdem wird DateiInhalt an DateiInhalt2 (die Benennung der Variablen sollte man übrigens auch nochmal überdenken) angehängt und man erhält somit das letzte Zeichen der Datei doppelt.
  • Wenn man nur das eof-Bit als Schleifenbedingung abprüft, kann das in Ausnahmefällen zu einer Endlosschleife führen. Das tritt dann auf, wenn vom Eingabestrom nicht mehr gelesen werden kann, aber das Ende der Datei noch nicht erreicht ist (z.B. weil die Datei auf einem Netzlaufwerk liegt, das plötzlich nicht mehr verfügbar ist). 1. + 2. kann man durch folgende Umformulierung lösen:
C++:
while (dat_ein.get(DateiInhalt)) {
    DateiInhalt2 += DateiInhalt;
}
  • Es gibt wesentlich effizientere Methoden, eine Datei in einen String einzulesen. Abgesehen davon ist das auch total unnötig, da du die Datei Zeile für Zeile verarbeiten kannst. Wie das geht, hat badday ja schon gezeigt.

Grüße,
Matthias
 
Ja hab ich mir schon gedownloaded.
Es handelt sich um das Buch easy C++ von Dirk Louis (Verlag: Markt und Technik).
Dann werd ich wohl vermehrt C++ von A-Z verwenden.
Oder ist das auch nciht so gut.

Eigentlich ist das Thema beendet, aber soll ich neue Fragen zu Meinem Projekt dann immer in einen neuen Beitrag packen?

mfg

Edit: Und noch eine kuze Frage:
Ich will ja zuerst für jede Frage + die Antworten ein Array machen und dann dieses noch in 4 teilen.
Aber ich weiß zuvor ja nicht wie viele Fragen das sind und ich muss aber angeben wie viele es sind.
Gibt es irendeine Funktion die die Anzahl an Zeilen zhurückgibt?
 
Zuletzt bearbeitet:
Eigentlich ist das Thema beendet, aber soll ich neue Fragen zu Meinem Projekt dann immer in einen neuen Beitrag packen?
Am besten ein neuen Thread verfassen (wenn die Frage natürlich morgen auftaucht, dann hier rein ;)).


Ich will ja zuerst für jede Frage + die Antworten ein Array machen und dann dieses noch in 4 teilen.
Aber ich weiß zuvor ja nicht wie viele Fragen das sind und ich muss aber angeben wie viele es sind.
Gibt es irendeine Funktion die die Anzahl an Zeilen zhurückgibt?

Zähl einfach in der Schleife einen Zähler hoch und mach dann ein dynamisches Array, oder du nimmst Vektoren, die sich automatisch vergrößern:
C++:
std::vector<Typ>  MeinVektor;  // Ersetze Typ durch einen Datentyp oder durch eine Klasse
 
Ich glaube den hatter er schon gefunden
Sry, liegt an der Hitze ;)
Dann werd ich wohl vermehrt C++ von A-Z verwenden.
Oder ist das auch nciht so gut.
Jein, im Allgemeinen empfiehlt sich der "C++ Primer" oder "Die C++ Programmiersprache".
Eigentlich ist das Thema beendet, aber soll ich neue Fragen zu Meinem Projekt dann immer in einen neuen Beitrag packen?
Ja. Oder aber du findest jemanden, der dir so "kleine" Fragen direkt beantwortet (wäre bereit via ICQ, Skype, bei Interesse einfach PM ;) )
Aber ich weiß zuvor ja nicht wie viele Fragen das sind und ich muss aber angeben wie viele es sind.
Musst du eigentlich nicht wissen. Verwende einfach einen Vektor und darauf push_back().
Gibt es irendeine Funktion die die Anzahl an Zeilen zhurückgibt?
Ist mir nicht bekannt, allerdings kannst du das auch selber ermitteln.
z. B
C++:
int i;
for(i=0; datei_stream.getline(dummy_string); i++)
{
}

Gruß,

badday


EDIT: Sry, hatte den obigen Beitrag noch nicht gesehen, naja jedenfalls sind nun 2 der gleichen Meinung, dann stimmt´s wohl ;)
 
Zurück