 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Dominik Dell Guest
|
Posted: Mon Apr 26, 2004 3:46 pm Post subject: Zahlen aus Datei einlesen |
|
|
Hallo,
ich moechte gerne Zahlen aus einer Datei einlesen. Die Datei soll dabei
etwa folgendermassen aussehen:
25
m1
Masse 1
50
m2
Masse 2
100
E
Energie
Die Zahlen am Anfang der Zeile sollen in Variablen gespeichert werden.
Der Rest ist Kommentar und soll ignoriert werden. Was ich dazu gefunden
habe, ist <fstream.h> und die Klasse ifstream.
Ich habe bis jetzt folgenden einfachen Versuchs-Code:
#include<iostream.h>
#include<fstream.h>
int main()
{
ifstream g("test.in");
double content[3];
for(int i = 0; i<=2; i++)
{
g >> content[i];
cout << content[i] << endl;
}
g.close();
return 0;
}
Das funktioniert aber nur, wenn in der Datei nur Zahlen stehen. Wie kann
ich erreichen, dass die Kommentare ignoriert werden und das Programm
nach dem Einlesen der Zahl am Anfang der Zeile in die naechste Zeile geht?
Wo kann ich mehr ueber fstream / ifstream lesen? Oder welche anderen
Moeglichkeiten, das umzusetzen sind sinnvoll?
Danke
Dominik
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Ralph Oliver Schunk Guest
|
Posted: Tue Apr 27, 2004 7:46 am Post subject: Re: Zahlen aus Datei einlesen |
|
|
Dominik Dell <dell (AT) lpsc (DOT) in2p3.fr> wrote:
| Quote: | Hallo,
ich moechte gerne Zahlen aus einer Datei einlesen. Die Datei soll dabei
etwa folgendermassen aussehen:
25
m1
Masse 1
50
m2
Masse 2
100
E
Energie
|
Hallo Dominik,
da ist also eine Zeile mit einen Wert und zwei
Zeilen mit einem Kommentar.
Ich hab' mal ein bißchen an Deinem Programm
rumgeschrieben ). Ich hoffe, es hilft.
Der Code compiliert, ich hab' ihn aber nicht getestet.
Fehlerbehandlung fehlt.
Es lohnt sich, die Klassen string und vector
genauer anzusehen.
Gruß
Ralph
--
Es gibt 10 Arten von Menschen,
die, die Binär lesen können,
und die, die es nicht können.
//> #include<iostream.h>
//> #include<fstream.h>
// Standard-Header ohne .h
#include<iostream>
#include<fstream>
// und ein bischen was zusätzliches
#include<string>
#include<vector>
// Alle Klassen der STL liegen im namepace std, also
// teilen wir das dem Compiler mit.
using namespace std;
int main()
{
ifstream g("test.in");
// Was machst du, wenn Du die Größe der Datei nicht kennst?
// double content[3];
// Besser:
vector<double> content;
// Value ( oder besser: input iterator )
double value;
// müll
string comment;
// Was machst du, wenn Du die Größe der Datei nicht kennst?
//> for(int i = 0; i<=2; i++)
// Besser:
while ( g >> value ) // Geht nur, wenn die Datei mit einem Wert beginnt.
{
// zwei zeilen: kommentar
getline( g, comment ); // verwerfen
getline( g, comment ); // verwerfen
content.push_back( value );
cout << content.back() << endl;
}
// Wie viele Werte hab' wir den jetzt?
cout << content.size() << endl;
// OK (g wird beim verlassen des scopes automatisch geschlossen).
g.close();
return 0;
// oder:
// return !g.eof(); /* Rückgabe != 0, wenn Lesefehler*/
}
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Werner Salomon Guest
|
Posted: Tue Apr 27, 2004 9:05 am Post subject: Re: Zahlen aus Datei einlesen |
|
|
Dominik Dell <dell (AT) lpsc (DOT) in2p3.fr> wrote
| Quote: | ich moechte gerne Zahlen aus einer Datei einlesen. Die Datei soll dabei
etwa folgendermassen aussehen:
25
m1
Masse 1
50
m2
Masse 2
100
E
Energie
Die Zahlen am Anfang der Zeile sollen in Variablen gespeichert werden.
Der Rest ist Kommentar und soll ignoriert werden. Was ich dazu gefunden
habe, ist <fstream.h> und die Klasse ifstream.
Hallo Dominik, |
<fstream.h> ist veraltet. <fstream> ist Deine Wahl.
| Quote: | #include<iostream.h
#include
int main()
{
ifstream g("test.in");
double content[3];
Benutze die Container der STL - hier z.B.: std::vector< double
[...]
g.close();
... brauchst Du nicht, das wird im Destruktor von ifstream erledigt |
| Quote: | [...] Wie kann
ich erreichen, dass die Kommentare ignoriert werden und das Programm
nach dem Einlesen der Zahl am Anfang der Zeile in die naechste Zeile geht?
z.B.: |
// --- 8< ---
#include
#include <vector>
#include <limits> // numeric_limits<>
int main() {
using namespace std;
ifstream file( "test.in" ); // Datei oeffnen
vector< double > zahlen;
int n = 3; // Anzahl der Zahlen
for( double zahl; n && file >> zahl; --n ) {
zahlen.push_back( zahl );
// Kommentare überlesen (3x Zeilenende)
for( int nComment = 3; nComment; --nComment )
file.ignore( numeric_limits< int >::max(),
ifstream::traits_type::to_int_type( 'n' ) );
}
return 0;
}
// --- 8< ---
| Quote: | Wo kann ich mehr ueber fstream / ifstream lesen?
Standard C++ IOStreams and Locales |
von Angelika Langer, Klaus Kreft
ISBN: 0201183951
Gruß
Werner
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Karl Heinz Buchegger Guest
|
Posted: Tue Apr 27, 2004 9:08 am Post subject: Re: Zahlen aus Datei einlesen |
|
|
Dominik Dell wrote:
| Quote: |
Das funktioniert aber nur, wenn in der Datei nur Zahlen stehen. Wie kann
ich erreichen, dass die Kommentare ignoriert werden und das Programm
nach dem Einlesen der Zahl am Anfang der Zeile in die naechste Zeile geht?
Wo kann ich mehr ueber fstream / ifstream lesen? Oder welche anderen
Moeglichkeiten, das umzusetzen sind sinnvoll?
|
Meiner Meinung nach ist es immer noch am einfachsten, das ganze nach
dem uralten Schema zu machen:
lies eine Zeile komplett als String
Zerlege den String so wie Du ihn brauchst.
Also nichts mit >> direkt vom File. getline und std::string sind
die Werkzeuge der Wahl. Nimm noch einen stringstream mit dazu
und du hast die Bausteine beisammen.
--
Karl Heinz Buchegger
[email]kbuchegg (AT) gascad (DOT) at[/email]
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Tue Apr 27, 2004 10:44 am Post subject: Re: Zahlen aus Datei einlesen |
|
|
Ralph Oliver Schunk wrote:
| Quote: | Hallo Dominik,
da ist also eine Zeile mit einen Wert und zwei
Zeilen mit einem Kommentar.
Ich hab' mal ein bißchen an Deinem Programm
rumgeschrieben ). Ich hoffe, es hilft.
Der Code compiliert, ich hab' ihn aber nicht getestet.
Fehlerbehandlung fehlt.
Es lohnt sich, die Klassen string und vector
genauer anzusehen.
Gruß
Ralph
Es gibt 10 Arten von Menschen,
die, die Binär lesen können,
und die, die es nicht können.
|
Nein, es gibt 11 Arten,
die, die den Unterschied zwischen dual und binär kennen,
und die, die ihn nicht kennen.
*SCNR*
Übrigens wäre es geschickter, wenn du dein Beispielprogramm nicht in die
Signatur schreiben würdest. Das erleichtert das Antworten.
// zwei zeilen: kommentar
getline( g, comment ); // verwerfen
getline( g, comment ); // verwerfen
Zum Verwefen eignet sich ignore() sogar noch besser.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Ralph Oliver Schunk Guest
|
Posted: Tue Apr 27, 2004 11:01 am Post subject: Re: Zahlen aus Datei einlesen |
|
|
Rolf Magnus <ramagnus (AT) t-online (DOT) de> wrote:
| Quote: | Ralph Oliver Schunk wrote:
Es gibt 10 Arten von Menschen,
die, die Binär lesen können,
und die, die es nicht können.
Nein, es gibt 11 Arten,
die, die den Unterschied zwischen dual und binär kennen,
und die, die ihn nicht kennen.
|
Das Dualsystem ist automatisch auch ein Binär system,
jedoch gilt das nicht umgekehrt. (richtig?)
| Quote: |
Übrigens wäre es geschickter, wenn du dein Beispielprogramm nicht in die
Signatur schreiben würdest. Das erleichtert das Antworten.
|
Copy&Paste Artefakt.
Sensoren neu geeicht.
Gruß
Ralph
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Rolf Magnus Guest
|
Posted: Tue Apr 27, 2004 11:18 am Post subject: Re: Zahlen aus Datei einlesen |
|
|
Ralph Oliver Schunk wrote:
| Quote: | Rolf Magnus <ramagnus (AT) t-online (DOT) de> wrote:
Ralph Oliver Schunk wrote:
Es gibt 10 Arten von Menschen,
die, die Binär lesen können,
und die, die es nicht können.
Nein, es gibt 11 Arten,
die, die den Unterschied zwischen dual und binär kennen,
und die, die ihn nicht kennen.
Das Dualsystem ist automatisch auch ein Binär system,
jedoch gilt das nicht umgekehrt. (richtig?)
|
Genau. Meine 11 für dezimal 2 war z.B. ein Gray-Code, der auch binär
ist.
| Quote: | Übrigens wäre es geschickter, wenn du dein Beispielprogramm nicht in
die Signatur schreiben würdest. Das erleichtert das Antworten.
Copy&Paste Artefakt.
Sensoren neu geeicht.
|
Gute Arbeit, Fähnrich ;-)
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|