IDC_EDIT und (for)?
-
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...