Problem mit Umlauten beim Auslesen von Dateien... Bitte um Tipps
-
Hallo zusammen,
ich möchte eine Textdatei in ein dataGridView laden, diese dort bearbeiten und anschließend wieder speichern. Laden klappt soweit und speichern eigentlich auch. Probleme gibt es, sobald ich mit Umlauten arbeite und diese speichern will. Öffne ich die abgespeicherte Datei, so sieht diese noch ganz normal aus. Lade ich allerdings die gespeicherte Datei wieder in das dataGridView, so werden die Umlaute nicht mehr richtig dargestellt. Das Problem: Sobald Umlaute ins Spiel kommen, speichert mein Programm die Datei im UTF-8-Format, ansonsten ganz normal im ANSI-Format. Weiß jemand Rat?
Der Quellcode folgt...
-
Hier der Quellcode für das Auslesen:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
std::ifstream datei("C:\\TEMP\\ToDoList2.txt"); std::string zeile; while (getline(datei, zeile)) { std::stringstream zeilenpuffer(zeile); std::string a, b, c, d, e, buffer; //Variable a füllen buffer = zeilenpuffer.str(); //Stringstream in string wandeln int strpos = buffer.find(","); //Position der Trennstelle ausgeben a = buffer.substr(0, strpos); //Ergebnis in Variable ausgeben int laenge = buffer.size(); buffer = buffer.substr(strpos+1, laenge); //} //Variable b füllen strpos = buffer.find(","); //Position der Trennstelle ausgeben b = buffer.substr(0, strpos); //Ergebnis in Variable ausgeben laenge = buffer.size(); buffer = buffer.substr(strpos + 1, laenge); // //Variable c füllen strpos = buffer.find(","); //Position der Trennstelle ausgeben c = buffer.substr(0, strpos); //Ergebnis in Variable ausgeben laenge = buffer.size(); buffer = buffer.substr(strpos + 1, laenge); // //Variable d füllen strpos = buffer.find(","); //Position der Trennstelle ausgeben d = buffer.substr(0, strpos); //Ergebnis in Variable ausgeben laenge = buffer.size(); buffer = buffer.substr(strpos + 1, laenge); // //Variable e füllen e = buffer; String^ a2 = gcnew String(a.c_str()); String^ b2 = gcnew String(b.c_str()); String^ c2 = gcnew String(c.c_str()); String^ d2 = gcnew String(d.c_str()); String^ e2 = gcnew String(e.c_str()); dataGridView1->Rows->Add(a2,b2,c2,d2,e2); }
-
Und hier der Quellcode für das Speichern:
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
int hall = dataGridView1->RowCount; //Zeilenanzahl der Tabelle einlesen String^ recipeName; //Variable fuer den Wertepuffer String^ Speicherpuffer; //Variable fuer den Zeilenpuffer System::IO::StreamWriter ^textDatei = gcnew System::IO::StreamWriter("C:\\temp\\ToDoList2.txt"); //Datei oeffnen for (int j = 0; j < hall; j++) { //aeussere Schleife als Reihenzaehler for (int i = 0; i < 5; i++) { //innere Schleife als Spaltenzaehler recipeName = dynamic_cast<String^>(dataGridView1->Rows[j]->Cells[i]->Value); //Wert aus Tabelle einlesen Speicherpuffer = Speicherpuffer + "," + recipeName; //Wert und Trennzeichen an Zeilenpuffer anhaengen } textDatei->WriteLine(Speicherpuffer->Remove(0, 1)); //Komma am Anfang einer jeden Zeile entfernen und Zeile in Datei schreiben Speicherpuffer = "";//Speicherpuffer leeren textDatei->Flush(); //Puffer des Streamwriters leeren } textDatei->Close(); //Datei schliessen MessageBox::Show("Datei erfolgreich gespeichert."); //Meldung in MessageBox ausgeben }
-
Und warum nimmst Du nicht genauso einen StreamReader aus dem .NET?
Warum C/C++ StdLib?
-
Danke, hat funktioniert! Bin leider noch Anfänger, wie man merkt. Aber langsam arbeite ich mich in die Materie ein.
-
Wen Du Anfänger bist, wäre für mich die Frage warum Du überhaupt C++/CLI benutzt?
-
Wegen einer Projektarbeit innerhalb eines Wahlpflichtfaches an der FH.
-
@martin-richter sagte in Problem mit Umlauten beim Auslesen von Dateien... Bitte um Tipps:
Wen Du Anfänger bist, wäre für mich die Frage warum Du überhaupt C++/CLI benutzt?
Weil die Anfänger den Unterschied oft gar nicht kennen. Für sie gibt es schlicht keinen Unterschied zwischen den verschiedenen Möglichkeit. Wenn sie dann eine der Möglichkeiten, z. B. auf dem Internet, entdeckt haben, versuchen sie es auf ihr Problem anzuwenden. Und auch die IDE kann einen Anfänger dazu verleiten, die falschen Mittel einzusetzen.
Abhilfe schafft meiner Meinung nach ein gutes Buch (oder ein gutes Tutorial), das eben darauf achtet, die "richtigen" Mittel zu benutzen, um ein Problem zu lösen. Im Bereich C++ wäre beispielsweise "Accelerated C++" so ein Buch, allerdings noch C++03.
-
Das hatte ich ihn auch schon gefragt: Variablenzugriff aus mehreren h-dateien... Habe die Vorgangsweise noch nicht verstanden.
Mal wieder eine "Fachschule", die nur halbgares lehrt!
-
@th69 sagte in Problem mit Umlauten beim Auslesen von Dateien... Bitte um Tipps:
Das hatte ich ihn auch schon gefragt: Variablenzugriff aus mehreren h-dateien... Habe die Vorgangsweise noch nicht verstanden.
Mal wieder eine "Fachschule", die nur halbgares lehrt!
Das mit dem Variablenzugriff klappt mittlerweile. Naja, Programmierung lernt man einfach nur durch viel Übung und noch mehr Fehler, die vorangegangen sind. Die Programmierung ist allerdings zum Glück kein Hauptfach.