// Explode File to String List
OpenFile(LPCTSTR szFileName)
{
CuStringList StrList;
StrList.OpenFile(szFileName);
string strTemp;
for( int i = 0 ; i < StrList.size() ; i++ )
{
strTemp = StrList.at(i);
}
}
// CuStringList.h
class CuStringList
{
vector<string> m_vecString;
public:
CuStringList(void);
public:
~CuStringList(void);
public:
int OpenFile( LPCTSTR szFileName );
int size(void){ return m_vecString.size(); }
string at(int n){ return m_vecString.at(n); }
private:
void ExplodeFile( BYTE * pBuffer, UINT nBufferSize );
};
// CuStringList.cpp
CuStringList::CuStringList(void)
{
}
CuStringList::~CuStringList(void)
{
}
void CuStringList::ExplodeFile( BYTE * pBuffer , UINT nBufferSize)
{
int nResult;
char szTempBuffer[1024] = {0};
int nszTempIndex = 0;
for( int i = 0 ; i < nBufferSize ; i++ )
{
nResult = pBuffer[i];
if( nResult != 13 && nResult != 10 )
{
szTempBuffer[nszTempIndex++] = nResult;
continue;
}
szTempBuffer[nszTempIndex] = '\0';
m_vecString.push_back(szTempBuffer);
nszTempIndex = 0;
}
}
int CuStringList::OpenFile(LPCTSTR szFileName)
{
CuFile f;
BOOL bResult = f.Open(szFileName, TEXT("r"));
Assert(bResult != 0, const_cast<LPTSTR>(szFileName));
// GetFileSize 太大的話 應該會配不出記憶體
BYTE *pBuffer = new BYTE[ f.GetFileSize() + 2];
Assert(pBuffer != 0, TEXT("not enough memory CuStringList::OpenFile"));
f.Read((void*)pBuffer, f.GetFileSize());
ExplodeFile(pBuffer, f.GetFileSize() );
delete [] pBuffer;
return TRUE;
}
2009年12月17日 星期四
Explode File to String List
訂閱:
張貼留言 (Atom)
這裡採用buffer來一次性的存放檔案,看起來效能比較快,但實際上如果檔案太大,記憶體是配不出來的,看來應該要改為一次讀一個BYTE.
回覆刪除