[Visual C++] Integer in *.cvs - Textfile schreiben

smallone

Mitglied
Hallo Programmierer,

Ich möchte Integer - Wertepaare in Zeilenweise in eine Textdatei (*.cvs, für Excel)schreiben.

Der Inhalt der Textdatei könnte z.B. so aussehen:

01;200
15;100
22;300


Mit der ofstream - Klasse , die ich in einem Betrag hier im Forum gefunden habe, habe ich es leider nicht hinbekommen, in die nächste Zeile oder an das Zeilenende zu schreiben. (die Textdatei wird von mehreren verschiedenen Funktionen während der gesamten Laufzeit meines Programms langsam gefüllt)

Kann mir jemand Helfen, oder einen Tip geben, mit welchen Funktionen dies möglich ist ?

Außerdem soll der Benutzer den Namen des *.cvs - Files aus meinem Programm heraus bestimmen. Das Eingabefeld funktioniert, aber mit welcher funktion kann ich den Namen der anzulegenden Datei bestimmen ?

VIelen Dank schonmal für Eure Hilfe, bin auf neue Lösungsansätze gespannt !

Gruß
BEN
 
In einen Stream schreibst du mit dem Insertionsoperator << rein.
Beispiel:
Code:
std::ofstream of( "meinedatei.cvs" );

of << "01" << ";" << "200" << std::endl;

//oder auch
int a = 1;
int b = 200;
of << a << ";" << b << "\n";
 
Hallo,

vielen Dank schonmal, ofstream funktioniert soweit auch, wenn ich es nur einmal benutze.

Beim wiederholten Aufruf (zu einem späteren Programmzeitpunkt, in einer anderen Funktion, selbes Textfile) fängt ofstream wieder zu beginn der Textdatei an und überschreibt die alten Einträge.

Gibts da eine andere Möglichkeit ?


ein weiteres Problem: Ich möchte den Namen der Textdatei zur Laufzeit des Programms vom Benutzer eingeben lassen.

Mein Versuch, den Wert der Membervariablen des Eingabefeldes als Dateinamen zu verwenden schlug natürlich fehl:

Code:
std::ofstream of(m_UserName.cvs );


Stellt Visual mir hier eine andere Möglichkeit zur Verfügung ?


Vielen Dank schonmal !
Gruß
BEN
 
Beim wiederholten Aufruf (zu einem späteren Programmzeitpunkt, in einer anderen Funktion, selbes Textfile) fängt ofstream wieder zu beginn der Textdatei an und überschreibt die alten Einträge.
Du musst die Datei zum Anhängen öffnen. Wenn ich mich nicht irre, geht das so:
Code:
ofstream( "meinedatei.cvs", ios_base::app ); // app wie append

std::eek:fstream of(m_UserName.cvs );
Hm? Welchen Datentyp hat denn m_UserName?
 
Hallo,

Danke zunächst für die Möglichkeit, Streams an bestehende Textfiles "anzuhängen".

Wichtig hierbei jedoch, daß man einen

"using namespace std;" davorsetzt.





Stimmt, den Datentyp für m_UserName hätte ich mitgeben können:

m_UserName ist ein CString.
(Habe ihn über den Klassenassistenten des Eingabefeldes erzeugt)

So siehts momentan aus, wenn ich den Usernamen (noch) in die erste Zeile der Datei schreibe (nicht optimal)


Code:
void CDialogeDlg::OnSavename() 
{
	UpdateData(TRUE);
	MessageBox(m_UserName);      // konrollieren, ob Variable zugreifbar
	
	char Name[25];
	strcpy(Name, m_UserName);

	std::ofstream of( "Results.csv" );    // ofstream = Datei-Ausgabe-Strom
	of << Name << std::endl;
}
 
Wichtig hierbei jedoch, daß man einen

"using namespace std;" davorsetzt.
Kommt drauf an. Das würde ich nicht global machen. Und man kann auch std::eek:fstream schreiben. Aber im Prinzip hast du recht. Die Streamversion auf der fstream.h würde ich übrigens nicht benutzen.


Code:
void CDialogeDlg::OnSavename() 
{
	UpdateData(TRUE);
	MessageBox(m_UserName);      // konrollieren, ob Variable zugreifbar
	
	std::ofstream of( "Results.csv" );    // ofstream = Datei-Ausgabe-Strom
	of << LPCTSTR( m_UserName ) << std::endl;
}
LPCTSTR() gibt den Char-Buffer des CStrings zurück.
 
Hallo,

ohne das globale

"using namespace std"

muß es lauten:

Code:
	std::ofstream of ( "Results.txt" , std::ios_base::app );

dann funktionierts prima.


Ich ändere mein Programm so, daß alle Usernamen mit entsprechenden Eingaben in ein einziges Textfile gespeichert werden, dann zerlege ich die Daten einfach in Excel !


Ich bedanke mich für die schnelle und kompetente Hilfe, Kachelator !
So gut möchte ich auch mal coden können !

Gruß
BEN
 
Zurück