string aus datei auslesen und in der main ausgeben
-
Hallo!
Ich möchte gerne Text aus einer Datei auslesen und dann in der main als string ausgeben.
Ich weiß, wie das bei int und double mit atoi und atof funktioniert aber mit string raff ich das nicht
Könnte mir jemand behilflich sein?Hier die Dateien:
main.cpp
File.cpp
File.h
test.txtDanke schonmal!
MfG, Alex
-
std::string line; while(std::getline(file, line)) { std::cout << line << std::endl; }
-
Hallo!
Erstmal danke für deine schnelle Antwort!
Leider kann ich damit noch nicht so viel anfangen...
Soll das jetzt in die main oder in die Funktion?
brauch ich das std:: überhaupt?MfG, Alex

-
Brauchst du nicht, du kannst auch
using namespace std;nach den includes einfügen, dann kannst du es dir sparen.
Ja, das muss in die main. Es liest die Datei Zeilenweise ein und gibt dir Zeile gleich wieder aus.
-
Hmm, gibt es denn keine Möglichkeit, das ganze in der Funktion zu machen und es dann an die main zu übergeben?
Mein Lehrer hättedas nämlich gerne so
Außerdem habe ich in der Datei ja auch Zahlen, die mit der int Funktion ausgelesen werden sollen...
Woher weiß er denn dann, wann die strings kommen, die er ausgeben muss?Schaut euch doch bitte mal meine Dateien an, dann könntihr euch meine Frage vielleicht besser vorstellen.
Danke, Alex

-
Wofür hast du überhaupt die CFile Klasse? Total unnötig!
-
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);