Open File Dialog
-
Hallo,
ich versuche gerade eine Datei mit dem Open File Dialog zu öffnen und anschließend einzulesen.
Momentan habe ich hierfür folgenden Quellcode://Öffnen-Dialog konfigurieren //das gerade aktuelle Verueichnis als Vorgabe in Dialog anzeigen this->openFileDialog1->InitialDirectory = "."; //Dateifilter definieren this->openFileDialog1->Filter = "Textdateien (*.csv)|*.csv"; //Keine Mehrfachauswahl this->openFileDialog1->Multiselect = false; //Kein vorgegebener Dateiname openFileDialog1->FileName = ""; //Öffnen-Dialog aufrufen if(openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) { }
Nun weis ich nicht ganz genau, wie ich in der If-Abfrage weiter machen muss.
Bei der Datei handelt es sich um Zahlenwerte, die auf verschiedenen Arrays gespeichert werden sollen.
In der Konsolen-Anwendung habe ich die Date wie folgt eingelesen bzw. die Zahlen getrennt:while(datei >> t >> semikolon >> pwm >> semikolon >> u >> semikolon >> p >> semikolon >> q)
Und danach eben auf dem entsprechenden Array gespeichert.
Wie kann ich dies nun mit dem Open File Dialog umsetzten?
Habt ihr vielleicht eine Idee?Vielen Dank schon einmal!
-
Was soll das werden?
C++/CLI mit C++ STL?
Ich verschiebe mal...
-
Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Danke, dort sollte es auch eigentlich rein.
-
Ausser Du hast einen guten Grund rate ich dir entweder .NET (C++/CLI) oder C++ zu benutzen und nicht zu mischen. Konkret bedeutetet das bei Dir, bleiben wir mal bei C++/CLI, dass Du die .NET Streams und nicht die C++ Streams verwenden sollst.
-
Ok.
Ich versteh nur gerade nicht so ganz, wo ich gemischt habe...
-
Krümelkeks schrieb:
Ok.
Ich versteh nur gerade nicht so ganz, wo ich gemischt habe...Ich nehme an datei ist ein std::istream (oder ifstream etc.) - das OpenFileDialog Zeugs ist .NET.
-
Richtig.
Das habe ich nur dazu geschrieben, damit vielleicht klarer wird, worauf ich hinaus möchte und wie ich das ganze in der Konsolen Anwendung gelöst habe.
Da ich nicht weis, wie ich das ganze mit .NET lösen kann, habe ich mich extra an euch gewendet. Mir ist klar, dass es mit dem ifstream nicht funktioniert bzw. dass ich das nicht mischen sollte.
-
BTW: http://www.if-schleife.de/
Edit:
Ich hätte deien Post genauer lesen sollen, sorry...
-
theta schrieb:
BTW: War gestern recht spät und da hab ichs nicht mehr so mit dem denken
Das Wort Abfrage hab ich gesucht aber mir viel nur Schleife ein.
Sorry....
-
Als Anfang hilft sicher das:
http://msdn.microsoft.com/en-us/library/db5x7c0d.aspx
-
Danke. Das hilft mir erstmal weiter.
Muss nun erstmal in die Uni. Werd mich danach damit genauer beschäftigen.
-
Ich habs nun ersteinmal so geändert. Aber irgendwas stimmt mit der Bedingung der while-Schleife nicht. Als Fehler bekomme ich folgende Meldung:
Binärer Operator '>>': 'System::IO::StreamReader ^' definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht.Wie kann ich das beheben?
double q,u,p,t,pwm; char semikolon; //Öffnen-Dialog aufrufen if(openFileDialog2->ShowDialog() == System::Windows::Forms::DialogResult::OK) { StreamReader^ sr = gcnew StreamReader(openFileDialog2->FileName); while(sr >> t >> semikolon >> pwm >> semikolon >> u >> semikolon >> p >> semikolon >> q) { } }
-
Hallo,
indem du dir die Hilfe zu der StreamReader-Klasse durchliest.
.NET kennt keine überladenen Stream-Operatoren (>> und <<), sondern dies sind entsprechende Methoden (jedoch nicht ganz so konfortabel). Stichworte: ReadLine(), String.Split, Int32/Double.TryParse(), ...
-
Th69 schrieb:
Hallo,
indem du dir die Hilfe zu der StreamReader-Klasse durchliest.
.NET kennt keine überladenen Stream-Operatoren (>> und <<), sondern dies sind entsprechende Methoden (jedoch nicht ganz so konfortabel). Stichworte: ReadLine(), String.Split, Int32/Double.TryParse(), ...
Und zudem übergibst Du keine Werte an
double q,u,p,t,pwm; char semikolon;
Deswegen werde ich aus der beabsichtigten "while Bedingung" auch nicht schlau.
-
In der Konsolen Anwendung habe ich dann folgenden Code in der While-Schleife stehen gehabt:
//Werte werden im jeweiligen Array gespeichert ArrayQ.AddElement(q); ArrayU.AddElement(u); ArrayP.AddElement(p); ArrayT.AddElement(t); ArrayPWM.AddElement(pwm);
Also in der Datei die eingelesen werden soll, stehen 6 Werte die jeweils durch ein Semikolon getrennt sind und auf verschiedene Arrays gespeichert werden sollen. In der Konsolen Anwendung funktionierte das einwandfrei.
Nur da ich bereits bei der While-Bedingung Fehler bekommen habe, dachte ich, das würde als Angabe vorerst reichen.
-
Leider komm ich nun gar nicht mehr weiter.
Ich habe nun versucht die Textdatei komplett einzulesen und sie dann in Zeilen zu splitten. Im nächsten Schritt habe ich vor die einzelnen Zeilen wiederum zu splitten, so dass ich an die einzelnen Werte aus meiner Datei herankomme. Zuletzt würde ich sie dann zu double convertieren und abspeichern.
Soweit so gut, nur scheiter ich irgendwie schon ganz am Anfang.array <Char>^ zeichen = {' '}; String ^daten = ""; StreamReader ^sr=gcnew StreamReader(openFileDialog1->FileName); //System::IO::StreamReader ^ sr = gcnew StreamReader; //System::IO::StreamReader(openFileDialog1->FileName); daten = sr->ReadToEnd(); String ^zeilen = daten->Split(zeichen,StringSplitOptions::RemoveEmptyEntries);
Was mach ich nun schon wieder falsch?