Ejemplo n.º 1
0
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));
        }
    }
}