Umgang mit Dateien - Planlos!
-
Hallo erstmal und Danke für jede Hilfe.
Ich muss (Vorgabe) mit Visual C++ eine Forms Anwendung kreieren. In dieser Anwendung soll eine Datei geladen werden, verändert und gespeichert werden nachdem sie verändert wurde.Genauer gesagt habe ich eine Datei in der Messwerte stehen, in Form einer Matrix, diese will ich einlesen und dann weiterverarbeiten.
Ich lese also meine Datei so ein:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { // Lesen von einer Datei OpenFileDialog^ dlg = gcnew OpenFileDialog(); dlg -> Filter = "Textdateien (*.txt)|*.txt"; if(System::Windows::Forms::DialogResult::OK == dlg -> ShowDialog()) { try { IO::StreamReader^ rdr = gcnew IO::StreamReader(dlg -> OpenFile(), System::Text::Encoding::UTF7); richTextBox1 -> Text = rdr -> ReadToEnd(); // in String einlesen statt in RichTextBox String^ datenstring = rdr -> ReadToEnd(); rdr -> Close(); richTextBox1 -> Modified = false; } catch (Exception^ ex) {MessageBox::Show("Datei konnte nicht geladen werden");} } }
Soweit so gut, das passiert also in meiner Form1.h Datei.
Nun will ich diesen String (datenstring) in meiner calc.cpp Datei aber in eine Matrix umwandeln. Dazu muss ich ihn aber irgendwie in der calc.cpp aufrufen können und wie ich das genau mache, da stehe ich vor einem kleinen Rätsel und habe mich auch schon recht lang mit Google beschäftigt, ohne ein sinnvolles Ergebnis erzielt zu haben.
Mit der Matrix will ich dann in der calc.cpp Datei herumrechnen, danach will ich die Matrix wieder zurück in meine Form1.h geben, sie in der RichTextBox anzeigen und eventuell speichern. Ich bin für jede Hilfe dankbar. Mein Fokus beim Programmieren lag bis jetzt auf Fortran, mit der Aufgabe das in eine schöne Forms Anwendung zu bringen mit Visual C++ (ich verwende MS Visual C++ Express 2010) bin ich etwas überfordert momentan.
-
Wie sieht die Funktion in Calc.cpp aus?
Gibts ein Calc.h?
-
es gibt eine calc.h aber die ist noch leer. ich habe vermutet dass ich mir da eine Klassse erstellen muss, die dann mit dem String umgeht. Ich will ja dort funktionen aufrufen wie StringToMatrix und so weiter... Die Funktion in der calc.cpp macht im Endeffekt zeilen und spaltenoperationen mit den Matrix Elementen. Das habe ich schon alles programmiert.
Ich will so vorgehen:
-> Datei in String einlesen
-> String nach TAB und ENTER untersuchen und Dimension der Matrix feststellen - nenn ich nun mal GetSize
-> Array mit der Dimension von Anz_Tabs und Anz_Enter erstellen - das nenn ich nun mal StringToMatrix
-> letzte Spalte der Matrix in einen Vector speichern (da stehen nur Kommentare vom Sensor drin)
-> mit der Matrix rumrechnen - nenn ich nun mal MatrixCalc
-> MatrixToString Funktion die den String wieder in die Form1.h übergibt.
-
Ich würde mir an deiner Stelle eine extra Funktion in deiner Form1.h, schreiben die dir die Aufgabe des Text anzeigen übernimmt! Achja, da du das ganze in Matrixform haben willst ist zeilenweiser Zugriff vlt. besser. Habs mal so gemacht. Wenn du bei deinem ganzen String bleiben willst musste das natürlich wieder ändern.
Form1.h
public: System::Void setTextToTextBox(array<String^>^ myTextFile);
Form1.cpp
System::Void Form1::button1_Click(System::Object^ sender, System::EventArgs^ e) { // Lesen von einer Datei OpenFileDialog^ dlg = gcnew OpenFileDialog(); dlg -> Filter = "Textdateien (*.txt)|*.txt"; if(System::Windows::Forms::DialogResult::OK == dlg -> ShowDialog()) { array<String^>^ myTextFile; try { myTextFile = IO::File::ReadAllLines(dlg->FileName,System::Text::Encoding::UTF7); calc^ myCalculation = gcnew calc(myTextFile, this); } catch (Exception^ ex) { MessageBox::Show("Datei konnte nicht geladen werden"); } } } System::Void Form1::setTextToTextBox( array<String^>^ myTextFile) { //kleine For Schleife um den ganzen String zusammen zu basteln solltest du hinbekommen this->myRichTextBox->Text = text; }
Jetzt kannst du, nachdem du die Datei eingelesen hast eine neue Klasse instanzieren und dabei dein Array Of String's zum bearbeiten übergeben.
calc.h
ref class calc { private: array<String^>^ myReadedFile; Form1^ meineHauptForm; calc(array<String^>^ myTextFile, Form1^ myForm1); ~calc(); bearbeitenFunktion(); AusgabeFunktion(); // usw. }
calc.cpp
calc::calc(array<String^>^ myTextFile, Form1^ myForm1) { myReadedFile = myTextFile; meineHauptForm = myForm1; } calc::bearbeitenFunktion() { //bearbeiten } calc::Ausgabe() { //Ausgabe this->meineHauptForm->setTextToTextBox(myReadedFile); }
Sollte so funktionieren, hab es aber grade nicht getestet
Bei Fragen einfach melden!
-
Vielen dank, das werde ich probieren am WE. Habe es jetzt selbst eine Zeit lang "liegen lassen". Danke!