IDC_EDIT und (for)?
-
letzterer Funktioniert....
aber wo ein Problem ist, is dat nexte nich weit...
Ich habe nun meine n Werte durch ein semikolon getrennt in die Datei geschrieben und möchte nun wieder auf dem umgekehrten Weg die einzelnen Werte separieren und den EDIT feldern zuweisen...
In c++ gabs ja die Möglichkeit über strtok etc. den String zu zerlegen...aber geht das so unter den MFC?
-
guck dir mal CString::Find(...), SCtring::Left(...), CString::Mid(...) und CString::Right(...) an...
-
ich hab das bisher für Konsolenanwendungen immer so gemacht:
ifstream indat("test.csv"); char line[255]; indat.getline(line, 255); str1 = strtok(line, ";"); strw1 = strtok(NULL, ";"); cout<<str1<<";"<<strw1<<endl; indat.getline(line, 255); str2 = strtok(line, ";"); strw2 = strtok(NULL, ";"); cout<<str2<<";"<<strw2<<endl
versuch das jetzt schon geraume Zeit zu adaptieren...aber nuja
-
Versuch mal mit
CStdioFile flDatei; unsigned int iOld, iPos; CStringArray arInhalt; CString sZeile; flDatei.Open( "test.csv" ,CFile::modeRead | CFile::typeText ); while (m_DB_flDatei.ReadString(sZeile)) { while(-1 != (iPos = sZeile.Find(";",iPos))) { arInhalt.Add(sZeile.Mid(iOld,iPos - iOld)); iOld = ++iPos; } if(iOld < sZeile.GetLength()) arInhalt.Add(m_DB_sDateiZeileNeu.Mid(iOld,sZeile.GetLength()-iOld)); }
Die einzelne Werten stehen dann im Array arInhalt...
-
Sorry, bin total durch den Wind... beim adaptieren des Beispiels, sind mir einige Fehler unterlaufen...
Hier nochmal richtig...
CStdioFile flDatei; unsigned int iOld, iPos; CStringArray arInhalt; CString sZeile; flDatei.Open( "test.csv" ,CFile::modeRead | CFile::typeText ); while (flDatei.ReadString(sZeile)) { while(-1 != (iPos = sZeile.Find(";",iPos))) { arInhalt.Add(sZeile.Mid(iOld,iPos - iOld)); iOld = ++iPos; } if(iOld < sZeile.GetLength()) arInhalt.Add(sZeile.Mid(iOld,sZeile.GetLength()-iOld)); }
-
vielen Dank erstmal
ich glaub mit dem semikolon in der .find kommt er nicht zurecht.
while(-1 != (iPos = sZeile.Find(";",iPos)))
syntaktisch ist er wohl korrekt aber beim Ausführen der Anwendung konnte der Vorgang read nicht auf dem Speicher durchgeführt werden
-
sorry, du musst iPos mit 0 initializieren...
also unsigned int iPos = 0;
-
und bei iOld genauso...
-
sorry, dass du mir alles vorkauen musst blind wie ich bin
-
Erstmal vorweg...Code funktioniert ohne Probleme bis auf eine Ausnahme.
Und zwar bekomm ich "Debug assertion failed (File:fgets.h Line:60)" wenn ich während der Anwendung den "open as"-Dialog einfach abbreche(button oder Alt+F4...etc).Sieht jemand wos hängen könnte?
CStdioFile flDatei; unsigned int iOld=0, iPos=0; CStringArray arInhalt; CString sZeile; CString FileName; CString sTemp; BOOLEAN Lesestatus=FALSE; UINT tfeld[18] = {IDC_EDIT1, IDC_EDIT2, IDC_EDIT3, IDC_EDIT4, IDC_EDIT5, IDC_EDIT6, IDC_EDIT7, IDC_EDIT8, IDC_EDIT9, IDC_EDIT10, IDC_EDIT11, IDC_EDIT12, IDC_EDIT13, IDC_EDIT14, IDC_EDIT15, IDC_EDIT16, IDC_EDIT17, IDC_EDIT18}; CString m_strDateiname; // Objekt der Klasse CFileDialog erstellen CFileDialog m_File(TRUE, "", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Text-Dateien (*.txt)|*.txt||"); // Startverzeichnis initialisieren m_File.m_ofn.lpstrInitialDir = "C:\\WINNT\\"; // Dialogfeld öffnen und Ergebnis auffangen if(m_File.DoModal()==IDOK) { // Gewählten Dateinamen ermitteln m_strDateiname = m_File.GetFileName(); // Ausgewählte Datei öffnen ShellExecute(NULL, "open", m_strDateiname, NULL, NULL, SW_SHOW); } //Name der Datei vom Objekt der Klasse CFileDialog übernehmen FileName=m_File.GetPathName(); flDatei.Open(FileName,CFile::modeRead | CFile::typeText ); int i=0; while (flDatei.ReadString(sZeile)) { if (sZeile.Find("Beginn Messung",0)!=-1) Lesestatus=TRUE; if (sZeile.Find("Ende Messung",0)!=-1) Lesestatus=FALSE; while( (-1!=(iPos = sZeile.Find(";",iPos)))&&(Lesestatus==TRUE)) { arInhalt.Add(sZeile.Mid(iOld,iPos - iOld)); iOld = ++iPos; i++; } iPos=0; iOld=0; } for (int j=0;j<i;j++) { //MessageBox(arInhalt[j]); iPos=arInhalt[j].Find(":",0); sTemp=arInhalt[j].Mid(iPos+1); SetDlgItemText(tfeld[j],sTemp); //sTemp--->tfeld } }
-
Expression: str!=NULL
-
was für ein Wert hat FileName wenn du einfach den "open as" Dialog abbrichst???
bei "if(m_File.DoModal()==IDOK)" fängst du es nur ab wenn der benutzer auf OK klickt. Wenn er auf abbrechen klickt, versucht das Programm "C:\\WINNT\" zu öffnen und auszulesen, was kein Datei ist und deshalb ein Fehler... schätze ich jetzt mal...
-
Ich verstehs nur nich...weiter oben hab ich den gleichen FileDlg und auch das Verzeichnis WINNT als Startverzeichnis festgelegt und dort funktioniert auch das abbrechen ohne das ich IDCANCEL irgendwie verarzte...open as bzw. save as unterscheidet sich ja nur durch den Boolwert bei der Objekterstellung...
-
hab den Fehler gefunden...
die geschweifte Klammer unter der "shellexecute" muss ganz nach unten!
Dann jeht et...