string aus datei auslesen und in der main ausgeben
-
Weil wir das ganze in einer Klasse machen sollen

Hat unser Lehrer so gasegt, damit wirdas später universal einsetzen können, wenn wir etwas in eine Datei speichern wollen oder etwas auslesen wollen...MfG, Alex

-
Ihr habt mit dieser Klasse etwas erstaunliches geschafft, nämlich die c++ streams nach unten zu abstrahieren, kurz es ist einfacher direkt mit diesen zu arbeiten als mit eurer Klasse.
-
Du kannst die Zeile, die du eingelesen hast auch zurückgeben.
string getline(ifstream file) { string line; if (std::getline(file, line)) return line; else return 0; }Und dann kannst du die Zeile testen, ob sie eine Zahl ist.
-
Eine Klasse für ein spezielles Dateiformat zu schreiben macht Sinn. So ist es aber Unsinn!
-
CFile::CFile(string dateiName) { m_Zustand = geschlossen; if (dateiName.find(":")!=1) { dateiName = "c:\\" + dateiName; } if (dateiName.size() - dateiName.find_last_of(".")!=4) { dateiName += ".txt"; } if (dateiName.size()<=7) { dateiName.insert(3,"test"); } m_DateiName = dateiName; }WTF???????????
-
@imhotep:
Vielen Dank für deine Hilfe aber ich krieg damit ziemlich viele Fehlermeldungen, die ich net wegbekomm...Kann ich es nicht mit dieser Funktion machen?:
{ char tmp[anzahl]; //while(!m_Datei.eof()) //WIE KANN ICH HIER ALLES AUSLESEN //{ //OHNE DIE WHILESCHLEIFE ZU BENUTZEN? m_Datei.getline(tmp,anzahl); //DAS MÖCHTE ICH AUSGEBEN //} *inhalt = tmp; return true; }Hier das ganze mit int:
bool CFile::read(int*inhalt) { char tmp[anzahl]; //while (!m_Datei.eof()) //{ m_Datei.getline(tmp,anzahl); //WIE KANN ICH HIER ALLES AUSLESEN //} //OHNE DIE WHILESCHLEIFE ZU BENUTZEN? *inhalt = atoi(tmp); return true; }Das funktioniert wunderbar, nur das ich nicht alle ints auslesen kann, falls mehrere untereinander stehen, denn mit eof() funktioniert es nicht...

Gibt es für string denn keine funktion, wie das atoi bei int?
MfG, Alex

-
@LOL:
Das ist für den Dateinamen...
Man soll selbst einen Dateinamen angeben können!
Hier wird überprüft, ob der Pfad stimmt.@lehrer:
Warum ist das hier Unsinn?
So hat mir mein Lehrer die Aufgabe gestellt!MfG, Alex

-
Lies alles als Strings ein und wandel es dann erst nach int, float, [...] um.
-
rat schrieb:
Lies alles als Strings ein und wandel es dann erst nach int, float, [...] um.
Aber wie mache ich das?
Außerdem sollen wir daseigentlich in ein char array einlesen(so wie ich es gemacht habe und dann davon umwandeln...)
siehe:char tmp[anzahl];MfG, Alex

-
Umwandlung einen Strings in einen Zahl.
#include <stdlib.h> string szeile; char * czeile; /* Dateizeile in szeile und czeile gespeichert */ int zahl1 = atoi(szeile.c_str()); long zahl2 = atol(szeile.c_str()); double zahl3 = atof(szeile.c_str()); int zahl4 = atoi(czeile); long zahl5 = atol(czeile); double zahl6 = atof(czeile);
-
OK, danke!
Ich verstehe hier jetzt nur noch nicht so ganz, wie ich das wieder in einen string umwandle...
Und warum hast du das char als pointer gemacht??
MfG, Alex

-
Ein Array kann man auch als Pointer deklarieren, muss dann aber bevor man es benutzt dynamisch Speicher dafür anfordern. Will dich jetzt nicht überfordern, also mach ich es auch gern anderst.
char czeile[1024]; // schön groß, damit die Zeile auch rein passt int zahl; char zahl_als_string[20]; // reicht, da ints niemals 20 Stellen haben. /* czeile erhält eine Zeile aus der Datei*/ zahl = atoi(czeile); zahl ++; printf("Zahl plus eins gleich %d", zahl); // Ausgabe sprintf(zahl_als_string, "%d\0", zahl); // Umwandlung zurück in char-ArrayDas '\0' soll verdeutlichen, dass an der Stelle der String endet.
-
Vielen Dank fürdie Mühe, die Du dir mit mir machst

char czeile[1024]; // schön groß, damit die Zeile auch rein passt int zahl; char zahl_als_string[20]; // reicht, da ints niemals 20 Stellen haben. /* czeile erhält eine Zeile aus der Datei*/ zahl = atoi(czeile); zahl ++; //Wofür brauche ich das hier? printf("Zahl plus eins gleich %d", zahl); // Ausgabe sprintf(zahl_als_string, "%d\0", zahl); // Umwandlung zurück in char-Arrayprintf und sprintf habe ich noch nie gehört...??
ist das sowas wie cout?
`Wenn ja, kann ich es stattdessen auch mit cout machen?EDIT: Kann es sein, dass das C ist und nicht C++?
MfG, Alex

-
Ja es ist C. Ich versteh auch nicht ganz, wieso euer Lehrer C++ programmiert aber mit Char-Arrays arbeitet.
Für Zahlen in String siehe FAQ.
Aus einem String einen Char-Array machenchar czeile[1024] string szeile; strcpy(czeile, szeile);
-
imhotep schrieb:
Ja es ist C. Ich versteh auch nicht ganz, wieso euer Lehrer C++ programmiert aber mit Char-Arrays arbeitet.
Was soll daran nicht verständlich sein
.
Char-Arrays sind ja nicht verboten wenn man in C++ programmiert.
Auserdem sollte jeder C++'ler auch den Umgang mit char-Arrays drauf haben
-
Richtig sie sind nicht verboten, aber sie zählen für mich nicht zu C++, sind Überbleibsel aus C. Wenn man C++ macht sollte man halt mit Strings arbeiten, weil die besser in der Handhabng sind.
-
am besten, du schreibst die read-funktionen so, daß sie immer nur eine zahl aus der datei auslesen. schließlich übergibst du an die funktion beim aufruf in main() ja auch nur einen zeiger auf eine zahlenvariable und nicht einen zeiger auf ein ganzes array.
was das eigentliche einlesen der zahlen angeht: das funktioniert genauso wie das ausgeben: m_Datei>>zahl. je nach typ von zahl liest der befehl dann ein int bzw double ein.
bool CFile::read(double *inhalt) { m_Datei>>*inhalt; return !m_Datei.fail(); }