PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mit c++ Dateien auslesen



obmib
03-02-2006, 11:42
Hallo,

ich hatte C++ bis jetzt nur in der Schule und kann soweit eigentlich nur Standardsachen. Unter anderem Funktionen und Klassen schreiben, etc.
Ich würde jetzt aber gerne damit anfangen etwas praktischer zu programmieren und mir dadurch selbst etwas zu vermitteln.
Ich möchte gerne eine Funktion schreiben mit der ich Dateien auslesen und in sie reinschreiben kann (einfache Textdateien erstmal,.. Datenbanken traue ich mir vorerst nich zu...).
Wo finde ich Informationen zu soetwas im Internet? Gibt es vielleicht Howtos? Vielleicht auch Buchvorschläge wenn es zu diesem Thema etwas gibt.

Als nächstes würde ich dann gerne mit Sockets anfangen, ich hatte nämlich die Idee als ertstes größeres Programm einen Newsreader zu Programmieren...

Ich würde mich über eure Hilfe freuen.

Schönen Gruß

//edit: Das ganze soll in erster Linie unter Linux laufen. Kompatibilität zu Windows wäre zwar nicht schlecht, brauche ich aber nicht unbedingt!

Caveman
03-02-2006, 12:26
Ich nehme oft diese Seite her:
http://www.cppreference.com/

Als Buch verwende ich eine frühere Version vom Buch "C++" von André Willms vom Addison Wesley Verlag:

Link
(http://www.addison-wesley.de/main/main.asp?page=home/bookdetails&ProductID=116604&SID={61AB26E3-AB3F-4A6E-B48F-084D48A8E04D}&TOKEN={4FC9007F-4624-4547-959A-D66E07818295})
Nicht geeignet für Sockets!

Für C gibt's hier ein offenes Buch:
http://www.galileocomputing.de/openbook/c_von_a_bis_z/


Mein Tipp: Leg Dir ein gutes Buch zu, bevor Du versuchst selbst irgendwie was zu programmieren und Dir dadurch einen schlechten Stil aneignest.

Boron
03-02-2006, 12:26
Sockets?
Das ist alles was du brauchst: http://www.zotteljedi.de/permalinks/socket-tipps
Das ist zwar C und kein C++, aber irgendwelche C++ Socket-Klassen verpacken das was du bei Zotteljedi lesen kannst mehr schlecht als recht.

obmib
03-02-2006, 13:45
Hallo und danke schonmal für eure Antworten.

@Caveman: in der Produktbeschreibung von deinem Buch steht dass es sich auf den Borland C++ Builder bezieht, den verwende ich zwar unter Windows, da wir in der Schule damit programmieren, kann ihn allerdings unter Linux nicht verwenden. Beziehen sich die Sourcen denn wirklich oft nur auf Borland?

@Boron: Das bei Zoddljedi ist schlecht? Verstehe deinen letzten Kommentar nich so :)


Wie sieht es aus mit Dateizugriffen? Gibt es da eine gute Anleitung?
Und ich freue mich weiter über Buchtipps, würde mir nämlich wirklich gerne gleich einen guten Stil aneignen.

Gruß

anda_skoa
03-02-2006, 17:48
Datezufriffe macht man über File Streams, wobei File Stream wie alle anderen IO Stream benutzt werden, zb aus einer Datei lesen und auf die Konsole schreiben:



#include <iostream>
#include <fstream>
#include <string>

using std::ifstream;
using std::string;
using std::cout;
using std::endl;

int main()
{
string line;

ifstream stream("datei.txt");

while (!stream.eof())
{
getline(stream, line);
cout << line << endl;
}

return 0;
}


Ciao,
_

obmib
03-02-2006, 23:43
Hallo und danke schonmal,

dein Programmcode spuckt bei der Kompilierung folgenden Fehler aus:

"test.cpp:1: Fehler: expected constructor, destructor, or type conversion before »<« token
/usr/include/c++/4.0.2/i486-linux-gnu/bits/c++config.h:68: Fehler: expected namespace-name before »;« token
/usr/include/c++/4.0.2/i486-linux-gnu/bits/c++config.h:68: Fehler: »<type error>« ist kein Namensbereich

Ich hab mich mal etwas auf cppreference.com umgesehen. Wie ich aus einer Datei heraus lese hab ich mittlerweile einigermaßen raus, allerdings verstehe ich die Funktionen write() und put() nicht so richtig. Ich glaube auch nicht dass ich das open richtig eingesetzt habe...



int main(){
ifstream namenStream;
namenStream.open("kunden.txt");
if ( !inamenStream ) {
cerr << "Datei konnte nicht geoeffnet werden" << endl;
return 0;
}


Müsste aber doch eigentlich stimmen, oder? Wie ich jetzt allerdings eine const char * buffer übergebe verstehe ich nicht. Egal was ich anstelle, der Compiler meckert irgendwie oder in die Outputdatei wird nicht geschrieben.

anda_skoa
04-02-2006, 15:58
Bei einer Textdatei halte ich es für wesentlich sinnvoller, mittels getline() in einen String einzulesen, da dann die Längen der Zeilen egal sind, etc

Ciao,
_

obmib
04-02-2006, 23:57
Hallo,

das heißt ich lege einen String an mit "string test;" und benutze dann "getline(test);" um eine Zeile in den angelegten String zu schreiben? Vorher muss ich aber mit "ifstream stream("kunden.txt");" die Streamdatei öffnen?
Funktioniert aber bei mir nicht :(

//edit: sorry mir fällt gerade auf das getline() fürs einlesen ist ;) für das Schreiben nutzt man doch write(), oder? Da kann man aber leider nicht einfach einen String übergeben so wie ich das gelesen hab...

anda_skoa
05-02-2006, 01:35
das heißt ich lege einen String an mit "string test;" und benutze dann "getline(test);" um eine Zeile in den angelegten String zu schreiben?

Fast :)
getline braucht als ersten Parameter noch den Stream aus dem es lesen soll.



Vorher muss ich aber mit "ifstream stream("kunden.txt");" die Streamdatei öffnen?

Ja



Funktioniert aber bei mir nicht :(

Zur Laufzeit oder schon beim Kompilieren?



//edit: sorry mir fällt gerade auf das getline() fürs einlesen ist ;) für das Schreiben nutzt man doch write(), oder?

Am einfachsten direkt in den Stream "streamen"



stream << line << endl;

Siehe Schreiben auf den Stream cout in meinem Beispiel

Ciao,
_