File auslesen und in struct speichern
-
guten Tag zusammen,
bin in c++ ein Neuling und versuche schon seit einiger Zeit einen File einzulesen und in ein struct zu stopfen.
Bitte schreibt mir jetzt nicht irgendwelche links und Google suchstichwörter, die werde ich alle schon gelesen gehabt haben.
#include <stdlib.h> #include <iostream> #include <stdio.h> #include <string> #include <sys/stat.h> using namespace std; string sortOption = "name"; string path = "/etc/password"; string newPath; string synkom = "pwdsort"; string myCin; size_t found; FILE * pFile; char buffer [130]; struct pwdent { char name[10]; char pwd[10]; int uid; int gid; char gcos[40]; char home[40]; char shell[20]; }; void readFile() { char* myPath = const_cast<char*>(path.c_str()); pFile = fopen (myPath , "r"); if (pFile != NULL) { fclose (pFile); }else cerr << "Pfad nicht gefunden"; } int main(int argc, char** argv) { getline(cin, myCin); readFile(); return (EXIT_SUCCESS); }Der File besteht aus einigen Zeilen[100]
in den die werte mit : getrennt sind.Ausserdem sollte ich dannach noch die Sache sortieren können, dies möchte ich dann aber selber wieder machen.
Danke schon im vor raus
xmo
-
Ich sehe kein C++. Ich würde mal im C-Forum fragen, oder nochmal den Code überdenken.
-
pFile = fopen (myPath , "r"); if (pFile != NULL) { // hier fehl mir mein code <=== HEHE GEIL fclose (pFile); }else cerr << "Pfad nicht gefunden";wenn dein code fehlt dann mach in rein;) :p
Wie ist die Datei aufgebaut bzw. die Zeilen.. schau dir mal strtok bzw. sscanf an
-
^^ das war woll zuwenig aus meinem code.
Schau bitte nochmal drüber habs jetzt editiert.
Danke für die schnelle antwort.
-
BorisDieKlinge schrieb:
pFile = fopen (myPath , "r"); if (pFile != NULL) { // hier fehl mir mein code <=== HEHE GEIL fclose (pFile); }else cerr << "Pfad nicht gefunden";wenn dein code fehlt dann mach in rein;) :p
Wie ist die Datei aufgebaut bzw. die Zeilen.. schau dir mal strtok bzw. sscanf an
-.- ja wenn ich ihn hät würde ich danach fragen.
ja hab ich schon mit angeschaut, und wie bekomme ich die sachen dan in mein struct
-
ja wir können dir leider nich helfen, weil wir nicht wissen wie die datei aussieht...
-
habs oben ediert, reicht das nicht?
-
nich ganz, wir sind zu faul um nachzudenken wie die datei/zeilen ausehen könnten... würdest du ein ziele hier reinkopieren gehts schneller..
wie gesagt schau dir strtok und sscanf an ... wenn du den code soweit hinbekommen hast, soltle das kein problem sein
EDIT: wieso verwendest du char Array und string objekte.. bleibt doch bei einem... auser dem mischt du C und C++ bleib bei einem...
-
eigendlich hab ich das schn ober rein geschrieben, aber für euch mach das gerne genauer. ^^
person1:123321:1:1:gcos:otdif110:aShell
person2:pvd:2:2:gcod:vemif110:mShell
-
wie gesagt bin ich ein voll noob, ich hab keine ahnung was c und was c++ ist. aber solang es funktioniert reicht mir das erstmal.
-
xmo schrieb:
Bitte schreibt mir jetzt nicht irgendwelche links und Google suchstichwörter, die werde ich alle schon gelesen gehabt haben.
Ganz sicher nicht...
-
warum werde ich nur gemoppt?
könnt ihr nicht kurz einen 10 Zeiler schreiben in dem dieses file ausgelesen wird und in den struct gespeichert wird ?
-
Im ANSI C forum hatte genau einer das gleiche problem
http://www.c-plusplus.net/forum/viewtopic-var-t-is-212422.html
jetzt kannst da ja kcuken wie es gemacht wiurd
EDIT: ganz ehrlich hast du den überhaupt nen plan, oder hast den bisherigen code auch geklaut?
-
xmo schrieb:
bin in c++ ein Neuling und versuche schon seit einiger Zeit einen File einzulesen und in ein struct zu stopfen.
Meine Erste Frage: C++ oder C, mit C++ hat dein Code (und auch die Anmerkungen von Boris) so gut wie garnichts zu tun.
xmo schrieb:
Bitte schreibt mir jetzt nicht irgendwelche links und Google suchstichwörter, die werde ich alle schon gelesen gehabt haben.
Mit Sicherheit wirst du das nicht getan haben, sonst hättest du mindestens auch in die FAQ und das Magazin geschaut (Links rechts oben)
Ansonstend nenn ich dir ein paar Stichwörter: fstream csv
(Zu csv gibt es einige ausführliche Beispiel im Internet, und ob nun als Trennzeichen ein ; oder : ist, ist wohl egal).cu André
-
xmo schrieb:
warum werde ich nur gemoppt?
könnt ihr nicht kurz einen 10 Zeiler schreiben in dem dieses file ausgelesen wird und in den struct gespeichert wird ?Mobben sieht anders aus...
Und warum sollte man sich selbst mehr Arbeit machen, als die Menge an Eigeninitiative die man vom gegenüber wahrnimmt.cu André
-
asc schrieb:
Meine Erste Frage: C++ oder C, mit C++ hat dein Code (und auch die Anmerkungen von Boris) so gut wie garnichts zu tun.
meine anmerkung ist C, und dem threadsteller ist es scheiss egal ob C oder C++ , deswegen mir auch^^
-
Für was ist denn das? Für die Schule?
Wieso sollte sich irgendwer unentgeldlich Sachen für Dich machen, wenn Du selbst nicht über die Aufgabe (ich nehme mal an, dass es eine Aufgabe ist) reflektierst?
-
BorisDieKlinge schrieb:
meine anmerkung ist C, und dem threadsteller ist es scheiss egal ob C oder C++ , deswegen mir auch^^
Da wir in einen C++ Forum unterwegs sind, ziehe ich dennoch C++ vor. Und der Threadsteller sollte sich endlich mal entscheiden was nun. Mischen kann man zwar theoretisch, mit sauberer Programmierung hat das aber nichts zu tun.
cu André
-
Tachyon schrieb:
Ich sehe kein C++. ...
Na - immerhin benutzt er std::string ... das ist ja schonmal was.

Gruß,
Simon2.
-
xmo schrieb:
wie gesagt bin ich ein voll noob, ich hab keine ahnung was c und was c++ ist. aber solang es funktioniert reicht mir das erstmal.
Folgendes funktioniert auf einem C++-fähigem Compiler:
#include <algorithm> // sort #include <iostream> #include <fstream> // ifstream #include <string> #include <vector> #include <iterator> // istream_iterator struct pwdent { std::string name; std::string pwd; int uid; int gid; std::string gcos; std::string home; std::string shell; // .. für das Sortieren braucht man einen Vergleichsoperator bool operator<( const pwdent& b ) const { // hier festlegen ob '*this' vor 'b' kommt. // z.B.: return name < b.name; } }; // dieses Helferlein liest z.B. die Doppelpunkte template< char C > std::istream& sep( std::istream& in ) { char c; if( in >> c && c != C ) in.setstate( std::ios_base::failbit ); return in; } // und hier ist die eigentliche Lesefunktion std::istream& operator>>( std::istream& in, pwdent& x ) { return std::getline( std::getline( std::getline( std::getline( std::getline( in, x.name, ':' ), x.pwd, ':' ) >> x.uid >> sep<':'> >> x.gid >> sep<':'>, x.gcos, ':' ), x.home, ':' ), x.shell ); } int main() { using namespace std; const string path = "/etc/password"; ifstream file( path.c_str() ); if( file.is_open() ) { vector< pwdent > pwdents( (istream_iterator< pwdent >( file )), istream_iterator< pwdent >() ); sort( pwdents.begin(), pwdents.end() ); // fertig sortiert in 'pwdents' } else cout << "Fehler beim Oeffnen" << endl; return 0; }Gruß
Werner