C++, Float als String in Datei

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

C++, Float als String in Datei

Beitrag von DEBIANUNDANDREAS » 19.11.2013 06:38:44

Hallo, ich hoffe ich bin hier richtig. Folgender C++ Code macht mir Probleme.

Code: Alles auswählen

#include <iostream>
#include <fstream>
#include<cstdio>
#include <cstdlib>
#include <cstring>
         using namespace std;
         string quelle;
         string ziel;
         string str;
         float g,s,galt,salt;
         string ja;
         string command;
         int befehl;
int Datei()
{

 ifstream Quelldatei;                          // neuen Lese-Stream erzeugen
  Quelldatei.open("/home/internet/Arbeitsfläche/Programmieren-quellcode/C++ output/Datei/Datei/S.dat", ios_base::in); // Datei öffnen

  if (!Quelldatei)                              // Fehler beim Öffnen?
    cerr << "Eingabe-Datei kann nicht geöffnet werden\n";
  else {                                        // falls es geklappt hat ...
    ofstream Zieldatei("Datei_2.txt");          // ja, richtig. Mit Dateinamen im Konstruktor wird die Datei implizit geöffnet
    if (!Zieldatei)                             // Fehler beim Öffnen?
      cerr << "Ausgabe-Datei kann nicht geöffnet werden\n";
    else {                                      // falls es funktioniert hat
      char c;                                   // und jetzt, jedes Zeichen ...
      while (Quelldatei.get(c)) {               // ... einzeln ...
        Zieldatei.put(c);                       // ... in die Zieldatei schreiben.
      }
    }
  }
}
int main(int argc, char *argv[])

{
                               quelle= "clear";
                               command="clear";
                               system(command.c_str());
************************************************ hier ist noch zusaätzlicher Code , denn lass ich weg ***********
Mein Wunsch währe es, das wichtige Bestandteile, in die Funktion

int Datei()

eingefügt werden.
1.In folgende String-Datei "/home/internet/Arbeitsfläche/Programmieren-quellcode/C++ output/Datei/Datei/S.dat", soll folgender Inhalt lesend und schreibend>>

Aktuelles Datum, float g,s,galt,salt << eingefügt werden.

Leider weiss ich nicht wie ich meine Wünsche in folgenden Code einpassen könnte, weil float to Datei funktioniert ja nicht, und String währe besser, weil dann kann ich auch mit gedit die Datei lesen, oder editieren>>>

else { // falls es funktioniert hat
char c; // und jetzt, jedes Zeichen ...
while (Quelldatei.get(c)) { // ... einzeln ...
Zieldatei.put(c); // ... in die Zieldatei schreiben.

2.Am Monatsanfang soll eine neue Datenbank zustande kommen und die alte Datenbank soll entweder verschoben werden oder zu eine kompletten Jahredatendatei/Datenbank verschmelzen, und umbenannt werden>>> "/home/internet/Arbeitsfläche/Programmieren-quellcode/C++ output/Datei/Datei/S.dat"

Wichtig ich bin immer noch C++ Anfänger, also macht es nicht zu kompliziert.

Mfg

Benutzeravatar
schorsch_76
Beiträge: 2544
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: C++, Float als String in Datei

Beitrag von schorsch_76 » 19.11.2013 10:17:21

Ich empfehle dir ein Buch für C++ Anfänger zu kaufen. Dort wird Stream IO wirklich immer beschrieben mit Beispielen.

Ich würde dir das hier empfehlen:
http://www.amazon.de/Einf%C3%BChrung-di ... %C3%A4nger

Da ist fast alles drin. Gut es kostet auch ein paar Euro, aber wird dir sicher sehr viel weiter helfen.

Benutzeravatar
bmario
Beiträge: 1256
Registriert: 05.09.2007 12:15:47
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dresden

Re: C++, Float als String in Datei

Beitrag von bmario » 19.11.2013 10:20:12

zu 1. Ich habe kein Wort verstanden

zu 2. schau dir lieber das Programm logrotate an.

zu deinem Quellcode:
- wofür die #include <c...> ? (außer system() siehe unten)
- dir fehlt #include <string>
- nutze keine globalen Variablen!
- ifstream hat standardmäßig schon ios_base::in
- nutze nicht ifstream::open() sondern den Konstruktor!
- nimm lieber std::getline() anstatt zeichenweise zu kopieren
- was soll das system() in der main()?
- rufst du auch irgendwo Datei() auf?
- Datei() ist ein denkbar schlechter Name, ich würde eher folgende Signatur nutzen:
void kopiere_datei(const std::string& quelle, const std::string& ziel);
- statt einen Fehler nach cerr zu schreiben, würde ich lieber eine Exception werfen

*edit: Ergänzend zu Schorschs Hinweis, es gibt auch eine auf C++11 angepasste Auflage des Stroustrups, leider bisher nur in Englisch.
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: C++, Float als String in Datei

Beitrag von DEBIANUNDANDREAS » 19.11.2013 11:07:52

Hallo schorsch_76 Computerbücher habe ich verschiedene, mehrere tausend Seiten, aber das Schreiben in eine Datei wird einmal nur als Binär Version beschrieben, und das Lesen fehlte dann.
Ein spezielles C++ ComputerBuch für Linux im speziellen Debian + Derivate kenne ich nicht.


bmario
wofür die #include <c...> ?
Ich programmiere in C++
dir fehlt #include <string>?
Dafür hab ich #include <cstring>
was soll das system() in der main()?
Manchmal sind Systemkommandos hilfreich, da ich das Rad nicht neu erfinden will.
nutze keine globalen Variablen!
Ich lass mir keine globalen Variablen verbieten. Meine Meinung ist Global soll die Variable sein damit der Variableninhalt überall zur Verfügung steht.
rufst du auch irgendwo Datei() auf?
ab hier************************************************ hier ist noch zusätzlicher Code , denn lass ich weg ***********

Benutzeravatar
bmario
Beiträge: 1256
Registriert: 05.09.2007 12:15:47
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dresden

Re: C++, Float als String in Datei

Beitrag von bmario » 19.11.2013 11:23:18

Warum fragst du eigentlich, wenn du alle Hinweise einfach wegschiebst? Viel Erfolg damit.
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse

Benutzeravatar
schorsch_76
Beiträge: 2544
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: C++, Float als String in Datei

Beitrag von schorsch_76 » 19.11.2013 13:25:08

Hier geht es nur um die Sprache. C++. Es geht hier überhaupt nicht um Linux oder noch spezieller Debian. C++ ist ein Sprach Standard. Kannst du C++ auf Linux, ist es auch auf Windows dasselbe. DIe System APis sind natürlich etwas anderst. Posix gibts aber auch unter Win.

Das Buch das ich dir gezeigt habe, würde dir den Sprachstandard näher bringen. Dazu gehört eben auch Stream IO.

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: C++, Float als String in Datei

Beitrag von DEBIANUNDANDREAS » 19.11.2013 14:06:27

Danke für den Tipp mit dem Computerbuch, aber das kaufe ich mir nicht.

Und wenn ich mir ein C++ Computerbuch in der Zukunft kaufe entscheide ich das selber.

Ein C++ Computerbuch sollte Linux also Debian oder Derivate unterstützen, die Quelltexte sollten funktionieren.

Auch Systemkommandos solten erwähnt werden.

Benutzeravatar
habakug
Moderator
Beiträge: 4313
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: C++, Float als String in Datei

Beitrag von habakug » 19.11.2013 14:30:41

Hallo!

Der Quellcode ist, leicht abgewandelt, von hier [1]. Den Sturm der Entrüstung kann ich nicht ganz nachvollziehen, kann aber auch nicht verstehen, warum @DEBIANUNDANDREAS das hier nicht klarstellt. Das er Anfänger ist, hat er ja in seinem ersten Posting zu verstehen gegeben. Die Fortgeschrittenen sollten nicht antworten, wenn ihnen so ein Code an die Nieren geht.


Gruss, habakug

[1] http://de.wikibooks.org/wiki/C%2B%2B-Pr ... teizugriff
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: C++, Float als String in Datei

Beitrag von DEBIANUNDANDREAS » 19.11.2013 14:49:00

Ist schon richtig. Was besseres fand ich nicht.
Wikibooks ist eine freie Sammlung von Lehr-, Sach- und Fachbüchern

Benutzeravatar
bmario
Beiträge: 1256
Registriert: 05.09.2007 12:15:47
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dresden

Re: C++, Float als String in Datei

Beitrag von bmario » 19.11.2013 17:07:21

habakug hat geschrieben:Hallo!

Der Quellcode ist, leicht abgewandelt, von hier [1].
Wo klipp und klar steht, daß dieser veraltet ist.
Die Fortgeschrittenen sollten nicht antworten, wenn ihnen so ein Code an die Nieren geht.
Mir geht der Code nicht an die Nieren. Es ist mir sogar total egal, weil ich damit nicht Arbeiten muß, geschweige denn ihn später zu warten habe. Ich habe nur, gerade eben weil DEBIANUNDANDREAS sich als Anfänger geoutet hat, ein paar Anregungen und Hinweise gegeben, die waren vielleicht etwas knapp und nicht ausreichend begründet. Aber da DEBIANUNDANDREAS ohnehin kaum darauf eingeht, sehe ich da auch keine Veranlassung mehr, daran etwas nachträglich zu ändern.
DEBIANUNDANDREAS hat geschrieben:Ist schon richtig. Was besseres fand ich nicht.
Wikibooks ist eine freie Sammlung von Lehr-, Sach- und Fachbüchern
Wie auf der Seite auch steht, dieser Code ist veraltet. Ich würde diesen so nicht mehr nutzen. Und selbst davon abgesehen ist es keine gute Idee, byteweise zu kopieren.
DEBIANUNDANDREAS hat geschrieben:Danke für den Tipp mit dem Computerbuch, aber das kaufe ich mir nicht.
Und wenn ich mir ein C++ Computerbuch in der Zukunft kaufe entscheide ich das selber.
Dann habe ich noch einen letzten Tip für dich. Laß es mit C++! Es geht (leider) nicht ohne einem guten Buch C++ zu lernen. C++ ist einfach mehr als C mit cout oder Java ohne JVM.
Das klingt jetzt bestimmt total hart und arrogant, aber es leider so und wird immer wieder von verschiedenen Leuten bestätigt, die sich gerne mal in C++ Foren herumtreiben.

Alternativ ist folgendes Buch auch zu empfehlen: http://www.amazon.de/C-Primer-Stanley-B ... %2B+primer

Hat man dann die Grundlagen von Standard C++ drauf, kann man sein Wissen über C++ mit Büchern von Scott Meyers, Andrei Alexandrescu und Herb Sutter erweitern.
Und irgendwann ist es einem dann egal, auf welchem System man arbeitet. Entweder man macht Dinge die vom Standard abgedeckt sind oder es gibt platform-unabhängige Libraries. Und für die kleine Restmenge an Aufgaben findet man auch schnell eine Lösung ;)
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse

Benutzeravatar
schorsch_76
Beiträge: 2544
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: C++, Float als String in Datei

Beitrag von schorsch_76 » 19.11.2013 18:29:53

Na um von einem Stream daten zu lesen macht man das wie folgt:
Lesen:

Code: Alles auswählen

std::ifstream ifs("file.txt");
if (ifs.is_open())
{
   float g,s,galt,salt;
   ifs >> g >> s >> galt >> salt;
}
schreiben:

Code: Alles auswählen

std::ofstream ofs("file.txt");
if (ofs.is_open())
{
   // woher auch immer float g,s,galt,salt;
   ofs << g << s << galt << salt;
}
Evtl. kann dir die cpp referenz noch weiterhelfen: http://de.cppreference.com/w/

Ich programmiere jetzt schon 15 Jahre beruflich fast ausschliesslich C++ und kann dir sagen, ohne mein erstes Buch wäre nichts gegangen. ;)

Erst kommt die Sprache, dann das verstehen der Eigenheiten, die Entwurfsmuster und irgendwann ist es egal auf welchem System, welchem Compiler man arbeitet. Natürlich habe ich gelesen und gemerkt dass du Anfänger bist, aber als Anfänger sollte man auch bitte, wenn man nach Rat frägt, auch wenigstens versuchen den Rat anzunehmen.

Gruß
schorsch

EDIT: Hier gibts noch das Boost Buch von Boris Schäling: http://www.highscore.de/cpp/boost/
Systemkommandos haben aber auch gar nichts mit C++ als Sprache zu tun.

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: C++, Float als String in Datei

Beitrag von DEBIANUNDANDREAS » 20.11.2013 16:49:43

schorsch_76
std::ifstream ifs("file.txt");
if (ifs.is_open())
{
float g,s,galt,salt;
ifs >> g >> s >> galt >> salt;
}



schreiben:

Code: Alles auswählen
std::ofstream ofs("file.txt");
if (ofs.is_open())
{
// woher auch immer float g,s,galt,salt;
ofs << g << s << galt << salt;
}
Mein komplettes C++ Listing habe ich weggelassen, aber der Compileroutput in Code::Blocks gibt folgendes
SG/main.cpp|160|Fehler: überschneidet Initialisierung von »std::ifstream ifs«|

Benutzeravatar
schorsch_76
Beiträge: 2544
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: C++, Float als String in Datei

Beitrag von schorsch_76 » 20.11.2013 18:04:16

Kannst du den Kompletten Code der zu dieser Fehlermeldung gehört posten, btte inkl. Zeilennummern und die komplette Ausgabe des Compilers. Also den Bereich Zeile main.cpp:140-180.

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: C++, Float als String in Datei

Beitrag von DEBIANUNDANDREAS » 21.11.2013 10:32:41

schorsch_76
Kannst du den Kompletten Code der zu dieser Fehlermeldung gehört posten,
>>>Nein.

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Re: C++, Float als String in Datei

Beitrag von peschmae » 21.11.2013 11:36:12

Dann wird dir hier auch keiner helfen können, geschweige denn wollen :P

Du strapazierst die Hilfsbereitschaft von schorsch_76 und den anderen hier ganz ordentlich, finde ich...

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

Benutzeravatar
schorsch_76
Beiträge: 2544
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: C++, Float als String in Datei

Beitrag von schorsch_76 » 21.11.2013 13:16:21

Na dann ... danke fürs Gespräch und freu dich einen Platz auf meiner Ignore Liste gefunden zu haben ..... :roll:

Antworten