Datei einlesen und Bearbeiten!
-
while(getline(f, line)) { getline(f, line); //... }
Dein Gefühl täuscht dich nicht - das getline() in der while-Bedingung holt eine Zeile, das getline() am Anfang der Schleife holt die nächste Zeile (und verwirft die Eingabe vom ersten). Letzteres kannst du also weglassen.
Btw, hat das einen bestimmten Grund, daß du die Datei doppelt öffnest?
oder anders: Warum holst du dir deine Eingaben nicht aus der "quelle"? Die hat doch schon die richtige Datei geöffnet.
-
Alles klar! Danke!
Nun soll der Wert dort noch in DM stehen! Da hatte ich gedacht das ich eine neue Variable "float WERT_DM;" nehme, und vor der Ausgabe noch ein "WERT_DM = WERT_EUR*1.955" schreibe! Da funz allerdings irgendwie nicht!
error C2676: Binaerer Operator '*' : 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' definiert diesen Operator oder eine Konvertierung in einen fuer den vordefinierten Operator geeigneten Typ nicht! Was tun?
-
Klar, WERT_EUR ist ja auch keine Zahl (auch wenn du dort die Text-Entsprechung einer Zahl eingetragen hast), sondern eine Zeichenkette - und die kannst du nicht "multiplizieren". Das heißt, du mußt erst deinen String in einen Double-Wert umwandeln, bevor du damit rechnen kannst (klassisch mit atof() oder modern mit "stringstream conv(WERT_EUR);double EUR;conv>>EUR;" oder ähnlichem).
-
dummfug schrieb:
TGGC schrieb:
MC_Morfeus schrieb:
Moin! Ich habe bis morgen eine Arbeit abzugeben!
Ja. Du. Nicht wir.
Dann halt dich einfach da raus, du Spacko! So Leute wie dich hamse doch früher aufm Schulhof verkloppt.
Über 2000 Einträge und 99,9% davon nur Rumgeflenne wie n Mädchen.Armseliges Statement.
-
Meinst du das(stringstream conv(WERT_EUR);double EUR;conv>>EUR;) sollte ohne Probleme funktionieren! Bei mir tauchen den vier neue Fehlermeldung auf!
Dein Teil, habe ich nun dort eingefügt:
while(getline(f, line)) { string::size_type pos = line.find(","); string WKN = line.substr(0, pos); line = line.substr(pos + 1); string::size_type pos1 = line.find(","); string WERT_EUR = line.substr(0, pos1); line = line.substr(pos1 + 1); stringstream conv(WERT_EUR);double EUR;conv>>EUR; WERT_DM = EUR*UMR_F; cout << "WKN=" << WKN << " "<< "WERT=" << WERT_EUR << " DM\n"; }
FEHLER:
error C2079: 'conv' verwendet undefiniertes class 'basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >' error C2440: 'initializing' : 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' kann nicht in 'int' konvertiert werden Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden error C2296: '>>' : Ungültig, da der linke Operand vom Typ 'double' ist error C2297: '>>' : Ungültig, da der rechte Operand vom Typ 'double' ist
-
das fehlt noch der passende Header -> #include <stringstream>
(und die "double WERT_DM;" mußt du auch dekalieren, damit du damit arbeiten kanns)
-
Jetzt kommt nur noch eine Fehlermeldung: fatal error C1083: Include-Datei kann nicht geoeffnet werden: 'stringstream': No such file or directory ! Was und wie kann ich dagegen machen?
-
<sstream>
-
Nun funktioniert ja auch alles! Nun habe ich noch ein letztes Problem! Undzwar bricht das Programm in der Release-Funktion nach der letzten ausgabe einfach ab! Das möchte ich verhindern! Weis nur nicht wie das gehen soll??
#include <fstream> #include <iostream> #include <string> #include <sstream> using namespace std; int main() { char schreib='j'; char quell_name[_MAX_PATH], ziel_name[_MAX_PATH]; double WERT_DM; const double UMR_F = 1.96; ifstream quelle; ofstream ziel; /* Name der Quelldatei einlesen */ cout << "\nPfad und Name der Quelldatei? "; cin >> quell_name; /* Quelldatei oeffnen */ quelle.open(quell_name, ios::binary); if (!quelle) { cout << "\n" << quell_name << " konnte nicht geoeffnet werden!\n"; exit(-1); } /* Name der Zeildatei einlesen */ cout << "\nPfad der und Name der Zieldatei? "; cin >> ziel_name; /* Existiert die Datei schon ? */ ziel.open(ziel_name, ios::in | ios::binary); if (ziel) { cout << ziel_name << "existiert schon." << "\nSoll sie ueberschrieben werden " << "(<j>a oder <A>bbruch)? "; cin >> schreib; if (schreib != 'j' && schreib != 'J') exit(-1); } /* wenn nicht, Zieldatei anlegen */ else { ziel.clear(); ziel.open(ziel_name); if (!ziel) { cout << "\n" << ziel_name << " kann nicht gespeichert werden!"; exit(-1); } } string line; ifstream f(quell_name); // Solange wiederholen, bis keine Zeile mehr verfügbar ist while(getline(f, line)) { // Herausfiltern der WKN string::size_type pos = line.find(","); string WKN = line.substr(0, pos); line = line.substr(pos + 1); // Herausfiltern des WERT's string::size_type pos1 = line.find(","); string WERT_EUR = line.substr(0, pos1); line = line.substr(pos1 + 1); // Umwandeln von String in einen Double-Wert stringstream conv(WERT_EUR);double EUR;conv>>EUR; // DM ausrechnen WERT_DM = EUR*UMR_F; // Einfügen in die ZielDatei ziel << "WKN=" << WKN << " "<< "WERT=" << WERT_DM << " DM\n"; } cout << "Daten erfolgreich ausgelesen und kopiert!\n"; return 0; }
-
Hallo
Also wenn ich das jetzt richtig verstehe möchtest du nicht das deine konsole einfach zu geht richtig ?Wenn du das nicht möchtest setze statt return 0;
retval=getchar(); // warten auf enter !!! ein und schon sollte es gehen.CU Cooper