STDMETHODIMP_(BOOL) CKpUtilitiesImpl::IsUTF8String(const UTF8_BYTE* pUTF8String)
{
	return _IsUTF8String(pUTF8String);
}
Exemple #2
0
DWORD CPwImport::ImportCsvToDb(const TCHAR *pszFile, CPwManager *pMgr, DWORD dwGroupId)
{
	unsigned long uFileSize, i, j = 0;
	char *pData;
	char *pProcessed;
	char ch;
	BOOL bInField = FALSE;
	BOOL bUTF8 = FALSE;
	DWORD dwFieldCounter = 0;

	ASSERT(pszFile != NULL); if(pszFile == NULL) return 0;
	ASSERT(pMgr != NULL); if(pMgr == NULL) return 0;

	if((dwGroupId == DWORD_MAX) || (dwGroupId == 0)) return 0;

	pData = CPwImport::FileToMemory(pszFile, &uFileSize);
	if(pData == NULL) return FALSE;

	pProcessed = new char[uFileSize + 32];
	if(pProcessed == NULL) { SAFE_DELETE_ARRAY(pData); return 0; }
	memset(&pProcessed[uFileSize], 0, 32);

	// Last character must not be an escape character
	if(pData[uFileSize - 1] == '\\') pData[uFileSize - 1] = 0;

	if(uFileSize > 3)
	{
		if((static_cast<unsigned char>(pData[0]) == 0xEF) &&
			(static_cast<unsigned char>(pData[1]) == 0xBB) &&
			(static_cast<unsigned char>(pData[2]) == 0xBF))
		{
			j += 3; // Skip UTF-8 initialization characters
			bUTF8 = TRUE;
		}
	}

	if(bUTF8 == FALSE) bUTF8 = _IsUTF8String((const UTF8_BYTE *)pData);

	for(i = j; i < uFileSize; i++)
	{
		ch = pData[i];

		if((bInField == FALSE) && (ch == '\n'))
		{
			if((dwFieldCounter % 5) != 0)
			{
				SAFE_DELETE_ARRAY(pProcessed);
				SAFE_DELETE_ARRAY(pData);
				return (dwFieldCounter / 5);
			}
		}

		if(ch == 0) continue;
		else if((ch == '\\') && (pData[i+1] != 0))
		{
			i++; // Skip escape character
			pProcessed[j] = pData[i]; // Write escaped symbol
			j++; // Increase write counter
		}
		else if((bInField == FALSE) && (ch == ',') && (pData[i+1] == ','))
		{
			pProcessed[j] = 0; j++; dwFieldCounter++;
		}
		else if((bInField == FALSE) && (ch == ',') && (pData[i+1] == '\r'))
		{
			pProcessed[j] = 0; j++; dwFieldCounter++;
		}
		else if((bInField == FALSE) && (ch == ',') && (pData[i+1] == '\n'))
		{
			pProcessed[j] = 0; j++; dwFieldCounter++;
		}
		else if(ch == '\"')
		{
			if(bInField == TRUE)
			{
				pProcessed[j] = 0; j++; dwFieldCounter++;

				bInField = FALSE;
			}
			else bInField = TRUE;
		}
		else
		{
			if(bInField == TRUE)
			{
				pProcessed[j] = ch; j++;
			}
		}
	}
	if(bInField == TRUE) { SAFE_DELETE_ARRAY(pData); SAFE_DELETE_ARRAY(pProcessed); return (DWORD_MAX - 1); }

	m_pLastMgr = pMgr;
	m_dwLastGroupId = dwGroupId;
	_AddStringStreamToDb(pProcessed, j, bUTF8);

	SAFE_DELETE_ARRAY(pProcessed);
	SAFE_DELETE_ARRAY(pData);
	return DWORD_MAX;
}