datei auslesen und abspeichern
-
hallo,
ich habe eine textdatei die mit daten beschrieben wird. nachher muss diese wieder ausgelesen werden um mit den daten weiterarbeiten zu können. meine frage , ist es sinnvoller die datensätze mit irgendwelche zeichen zu unterteilen oder soll ich immer einen absatz machen,so dass in jeder zeile ein neuer wert steht ? was ist besser zum auslesen der daten ? oder kann man gar nicht zeilenweise auslesen ?wert1 wert2 wert3 ..oder besser
wert1;wert2;wert3;...oder ist das egal ???
danke euch !!
-
Schau dir mal CStdioFile an.
Oder CArchive und Serialize.

-
CStdioFile File; if (File.Open(_T(pfad_gesamt), CFile::modeRead)) { CString strText; CString dateiname; while(File.ReadString(strText)) { dateiname = strText.Left(strText.ReverseFind(';')); } File.Close(); }habe es nun so... aber egal ob ich Left,Right oder Mid nehme kommt nie das gewünschte ergebnos raus was ich brauche.
wert1;wert2;wert3;
so sind die daten gespeichert... gibt es noch andere möglichkeiten ??
danke
-
Also, der Code da passt besser zu dem ersten Dateiaufbau, den du gepostet hattest.
Auch wenn ich generell das Gefühl habe, du solltest nochmal drüber nachdenken.
-
ich denke die ganze zeit schon darüber nach.
also der allererste wert soll später in ein eingabefeld geschrieben werden. der identifiziert das projekt sozusagen. die anderen werte sollten in ein dropdownfeld geschrieben werden. (irgednwie per addstring oder so).
ich weiss nur nicht wie ich am besten vorgehen soll.
so sieht es bis jetzt aus...
void CS51Dlg::Onloadproject() { CFileDialog fd(TRUE,"sdat", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Prject Files (*.lu)|*.lu|All Files (*.*)|*.*||"); CString csLastDir; csLastDir = AfxGetApp()->GetProfileString( "LastSavedFile", "Directory", ""); if(csLastDir.GetLength()) { fd.m_ofn.lpstrInitialDir = csLastDir; ::SetCurrentDirectory(csLastDir); } if(fd.DoModal()==IDOK) { CString PathName = fd.GetPathName(); // Write last opened directory to registry: char cFileDrive[_MAX_DRIVE]; char cFileDir[_MAX_DIR]; char cFileFname[_MAX_FNAME]; char cFileExt[_MAX_EXT]; _splitpath(PathName, cFileDrive, cFileDir, cFileFname, cFileExt); char cPathName[_MAX_PATH]; sprintf(cPathName,"%s%s\0",cFileDrive, cFileDir); AfxGetApp()->WriteProfileString( "LastSavedFile", "Directory", cPathName); CString pfad_0 = cFileDrive; CString pfad_1 = cFileDir; CString zusatz = ".lu"; CString source = "\SOURCE\\"; CString s51 = ".s51"; CString o51 = ".o51"; CString obj = "\OBJ\\"; CString pfad_gesamt = pfad_0 + pfad_1 + cFileFname + zusatz; CStdioFile File; if (File.Open(_T(pfad_gesamt), CFile::modeRead)) { CString strText, strResult; CString dateiname; while(File.ReadString(strText)) { strResult = strText.Mid(0, strText.GetLength()); dateiname = strText.Right(strText.ReverseFind(';')); MessageBox(dateiname); // m_show_main = strText+s51; //m_show_unit.AddString(File_Name); load_pfad_glob = pfad_0 + pfad_1 +source+strText+s51; load_pfad_glob_obj = pfad_0 + pfad_1 +obj+strText+o51; load_pfad_glob_bat = pfad_0 + pfad_1 +source+"objekt.bat"; } File.Close(); }
-
Und die Strings sollen in einer Zeile stehen?
Weil wenn jeder eine eigene Zeile hätte, wäre das wesentlich einfacher.Da wäre die Schleife etwa so:
while(File.ReadString(strText)) { if (dateiname.IsEmpty()) // die erste Zeile { dateiname = strText; MessageBox(dateiname); } else { m_cbxListe.AddString(strText); } }...stark gekürzt (um alles, was ich nicht auf anhieb durchschaut habe)

-
jane das is egal ob in einer zeile oder nicht. danke dir. werde mich gleich ans werk machen

-
juhu

hmm.. also irgendwie haut das nich so recht hin.
CStdioFile File; if (File.Open(_T(pfad_gesamt), CFile::modeRead)) { CString strText, strResult; CString dateiname; while(File.ReadString(strText)) { if (dateiname.IsEmpty()) // die erste Zeile { dateiname = strText.Left(strText.ReverseFind(';')); m_show_main = dateiname; } else { m_show_unit.AddString(dateiname); } File.Close(); }sooo sieht das aus.wenn ich mit dem debugger einmal durchgehe geht er einmal komplett durch.beim zweiten durchlauf bekomme ich ein ALERT.
und der zeigt auf
77887EEB cmp dword ptr [edx+14h],0ich weiss leider nicht was das heissen soll.
also das soll es ja tun:wert1
wert2
wert3
...wert 1 soll in --> m_show_main
alle anderen werte sollen in das dropdownfeld --> m_show_unit.
was macht die funktion. IsEmpty eig ?
habe diese beschreibung gefunden : Test, ob eine Variable mit gegebenen oder errechnetem Namen existiert und vom Typ NONE ist.
verstehe ich allderings nicht so wirklich.hoffe mir kann jemand weiterhelfen.
Danke !
-
danke.. dummer fehler
