#include "StdAfx.h" #include "akGridData.h" void CakParser::process( const char* pText, const char* pToken /*= " \r\n\t,^"*/ ) { //{ m_vecTokLen.clear(); m_vecTokPos.clear(); //} m_pSrcText = pText; unsigned int i_index; unsigned int index; unsigned int nTokenLen = (unsigned int)strlen(pToken); unsigned int string_length = (unsigned int)strlen(pText); unsigned char bitmask[32]={0}; //256°¡ bit maskingÀ» »ç¿ëÇϱâ À§Çؼ­. //token ¹è¿­¿¡ ÀúÀåµÈ ¹®ÀÚÀÇ ascii index À§Ä¡¿¡ maskingÀ» ÇÑ´Ù. for( i_index=0; i_index> 3] |= (1 << ( pToken[i_index] & 7)); int nStartPoint=-1; for( index=0; index> 3]) & (1 << (pText[index] & 7)) ) //±¸ºÐÀÚ Ã£À½ ÅÂÇö[2017/12/7] { if(nStartPoint != -1) { m_vecTokPos.push_back(nStartPoint); m_vecTokLen.push_back(index-nStartPoint); nStartPoint = -1; } } else if(nStartPoint < 0) //±¸ºÐÀÚµµ ¸øÃ£°í ½ÃÀÛµµ ¾ÈÇÔ { nStartPoint = index; } } if(nStartPoint >= 0) { m_vecTokPos.push_back(nStartPoint); m_vecTokLen.push_back(string_length-nStartPoint); } }; const char* CakParser::getTokStr( int nIndex ) { m_strTokBuffer.clear(); if(nIndex >= m_vecTokPos.size()) return ""; m_strTokBuffer.append(&m_pSrcText[m_vecTokPos[nIndex]], m_vecTokLen[nIndex]); return m_strTokBuffer.c_str(); } bool CakParser::getTokStr( int nTokIndex, char* pBuf, int nLen ) { // NULL °ª °í·Á if(nLen-1 < m_vecTokLen[nTokIndex]) return false; strncpy(pBuf, &m_pSrcText[m_vecTokPos[nTokIndex]], m_vecTokLen[nTokIndex]); pBuf[m_vecTokLen[nTokIndex]] = 0; return true; } CakTextMatrix::CakTextMatrix(void) { m_nRowsNum = m_nColsNum = 0; m_nIntervalLength = 0; m_vecIntervalPos.clear(); setDevideFlag(); } CakTextMatrix::~CakTextMatrix(void) { } bool CakTextMatrix::ImportFile( char* pFileName ) { FILE* pf = fopen(pFileName, "r"); if(pf) { CakParser parser; setRowCount(0); setColCount(0); char buffer[2048]={}; while (fgets(buffer, 2048, pf)) { parser.process(buffer); setRowCount(1, TRUE); if(parser.getTokNum() > getColCount()) setColCount(parser.getTokNum()); int nTokenNum = parser.getTokNum(); int nRowIndex = getRowCount()-1; for(int i=0; i 0) //Áõ°¡ { for(int i=0; i* pVecGridCellData = &m_vecCellData_Row[i].m_vecGridCellData; int nIncreaseCount = 0; if(bIncrease) nIncreaseCount = nNum; else nIncreaseCount = m_nColsNum - (int)pVecGridCellData->size(); if(nIncreaseCount == 0) { continue ; } else if(nIncreaseCount > 0) //Áõ°¡ { for(int i=0; ipush_back(_akCellData()); } } else if(nIncreaseCount < 0) //°¨¼Ò { pVecGridCellData->erase(pVecGridCellData->end() + nIncreaseCount, pVecGridCellData->end()); } } makeCellItemArray(); return; } void CakTextMatrix::printOut() { int nRowNum = getRowCount(); int nColNum = getColCount(); for(int y=0; ym_strText.c_str(); } void CakTextMatrix::setItemText( int nRow, int nCol, const char* pText ) { if(pText != NULL) m_vecCellItem[nRow*m_nColsNum + nCol]->m_strText = pText; } void CakTextMatrix::makeCellItemArray() { m_vecCellItem.clear(); int nRowNum = getRowCount(); int nColNum = getColCount(); for(int y=0; ym_strText.compare(pTitle)) { return i; } } return -1; } int CakTextMatrix::getColIndex( char* pTitle ) { for(int i=0; im_strText.compare(pTitle)) { return i; } } return -1; } bool CakTextMatrix::ExportFileInterval( char* pFileName, char* pIntervalRef ) { FILE* pf = fopen(pFileName, "w"); if(pf) { CakParser paserInterval; paserInterval.process(pIntervalRef, " "); const int nBufSize = 2048; char buffer[nBufSize]; int nStrLen, nWritePoint; const char* pStr; int nRowNum = getRowCount(); int nColNum = getColCount(); for(int y=0; y 0) { buffer[nWritePoint-1] = ' '; //¹Ù·Î Á÷Àü¿¡ °ø¹éÀ¸·Î Ç¥½Ã } } buffer[strlen(pIntervalRef)] = 0; fprintf(pf, "%s", buffer); if(y < nRowNum-1) fprintf(pf, "\n"); } fclose(pf); return true; } return false; } bool CakTextMatrix::ExportFile( char* pFileName, char* pDevideFlag/*=","*/ ) { //ÇÑÁÙÀ» ¸Þ¸ð¸®¿¡ Àû°í ÃÖÁ¾ÀûÀ¸·Î ÆÄÀÏ·Î ¾²´Â°Ô ´õ ºü¸£°ÚÁö?? ÅÂÇö[2017/12/7] FILE* pf = fopen(pFileName, "w"); if(pf) { char buffer[2048]={}; int nRowNum = getRowCount(); int nColNum = getColCount(); for(int y=0; y 0) { pBuf[nWritePoint-1] = ' '; //¹Ù·Î Á÷Àü¿¡ °ø¹éÀ¸·Î Ç¥½Ã } } pBuf[m_nIntervalLength] = 0; return true; } return false; } void CakTextMatrix::setIntervalRef( char* pIntervalRef ) { m_nIntervalLength = 0; m_vecIntervalPos.clear(); if(pIntervalRef == NULL) return; CakParser paserInterval; paserInterval.process(pIntervalRef, " "); int nNum = paserInterval.getTokNum(); for(int i=0; i