BOOL CParser::ParseTable(DWORD dwUserData) /***********************************************************************/ { BOOL fRet = TRUE; LPSTR lpString, lpEntryString, lpKey, lpValues; int nIndex, nValues; HPTR lpData; LPSTR lpStringBuf, lpEntryStringBuf; if (!InitTable(dwUserData)) return(FALSE); lpStringBuf = (LPSTR)Alloc(BUFFER_SIZE); lpEntryStringBuf = (LPSTR)Alloc(BUFFER_SIZE); if (!lpStringBuf || !lpEntryStringBuf) { if (lpStringBuf) FreeUp(lpStringBuf); if (lpEntryStringBuf) FreeUp(lpEntryStringBuf); return(FALSE); } nIndex = 0; lpData = m_lpTableData; while ( GetEntryString( &lpData, lpEntryStringBuf, BUFFER_SIZE ) ) { // Keep a copy of the Entry string for error messages lpString = lpStringBuf; lpEntryString = lpEntryStringBuf; lstrcpy(lpString, lpEntryString); // get key while (lpKey = GetKey( &lpEntryString )) { // get value if (lpValues = GetValues( &lpEntryString, &nValues )) { // handle this entry if (!HandleKey(lpString, lpKey, lpValues, nValues, nIndex, dwUserData)) { fRet = FALSE; break; } } } // process next entry ++nIndex; } FreeUp(lpStringBuf); FreeUp(lpEntryStringBuf); return(fRet); }
// from http://www.codeproject.com/Articles/7891/Using-virtual-lists void CStatisticForm::OnLvnGetdispinfoListData(NMHDR *pNMHDR, LRESULT *pResult) { NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR); //Create a pointer to the item LV_ITEM* pItem= &(pDispInfo)->item; //Do the list need text information? if (pItem->mask & LVIF_TEXT) { CString val = GetEntryString(pItem->iItem, pItem->iSubItem); //Copy the text to the LV_ITEM structure //Maximum number of characters is in pItem->cchTextMax lstrcpyn(pItem->pszText, val, pItem->cchTextMax); } *pResult = 0; }
void CStatisticForm::OnExportClick() { CString fileFilter; CString filename; fileFilter = _T("CSV Files (*.csv)|*.csv|All Files (*.*)|*.*|"); CFileDialog dlg(FALSE,_T("statistics"),NULL,OFN_OVERWRITEPROMPT|OFN_ENABLESIZING|OFN_PATHMUSTEXIST,fileFilter); INT_PTR ret = dlg.DoModal(); filename = dlg.GetPathName(); if (ret == IDOK) { CPath path(filename); if (path.GetExtension() == _T("")) { path.AddExtension(_T(".csv")); filename = CString(path); } CFile file(filename, CFile::modeCreate|CFile::modeWrite); CString csvSep = GetCsvSeparator(); // Output header CString row = _T(""); for(int field=0; field < 7; field++) { LVCOLUMN column = { 0 }; column.mask = LVCF_TEXT; column.cchTextMax = 100; column.pszText = new TCHAR[column.cchTextMax]; m_listCtrl.GetColumn(field, &column); if (field > 0) row.Append(csvSep); row.Append(column.pszText); delete [] column.pszText; } row.Append(_T("\n")); CT2CA outputHeaderText(row, CP_UTF8); file.Write(outputHeaderText, (DWORD) ::strlen(outputHeaderText)); // Output data const LONG entryCount = GetEntryCount(false); for(LONG i = 0; i<entryCount; i++) { row = _T(""); for(int field=0; field<7; field++) { if (field > 0) row.Append(csvSep); row.Append(GetEntryString(i,field)); } row.Append(_T("\n")); CT2CA outputText(row, CP_UTF8); file.Write(outputText, (DWORD) ::strlen(outputText)); } } }