#ifndef _DELIMITED_FILE_H_ #define _DELIMITED_FILE_H_ #include #include #include class CTokenlizedFile { public: CTokenlizedFile(const char* lpszDelimiter = "\t"); ~CTokenlizedFile(); enum { MAX_DELIMITER_NUM = 16, MAX_LINE_BUFFER = 16384, DEFAULT_COLUMN_NUM = 64 }; bool Open(const char* szFilename, const char* szOpenMode = "rt"); void Close(); bool ReadColumn(); // Ä÷³ À̸§À» Àд´Ù. bool ReadLine(); // ÇÑ ¶óÀÎÀ» Àд´Ù. bool IsEOF() { return (NULL != m_lpFile) ? (0 != feof(m_lpFile)) : false; } size_t GetColumnNum() { return m_ColumnInfo.size(); } size_t GetCurrentLine() { return m_nLine; } size_t GetValueNum() { return m_ColumnValues.size(); } const char* GetColumnName(size_t nIndex); const char* GetStringValue(size_t nIndex); const char* GetStringValue(const char* szColumnName); private: struct ColumnInfo { unsigned long m_dwHashKey; std::string m_szColumnName; ColumnInfo() : m_dwHashKey(0) { m_szColumnName.assign(""); } ColumnInfo(const char* szColumnName); ColumnInfo(std::string& szColumnName); }; FILE* m_lpFile; size_t m_nLine; char m_szDelimiter[MAX_DELIMITER_NUM]; typedef std::vector ColumnArray; typedef std::vector ValueArray; ColumnArray m_ColumnInfo; ValueArray m_ColumnValues; }; inline const char* CTokenlizedFile::GetColumnName(size_t nIndex) { return (nIndex < m_ColumnInfo.size()) ? m_ColumnInfo[nIndex].m_szColumnName.c_str() : NULL; } inline const char* CTokenlizedFile::GetStringValue(size_t nIndex) { return (nIndex < m_ColumnValues.size()) ? m_ColumnValues[nIndex].c_str() : NULL; } #endif