MFC操作文本型数据的源码
来源:互联网 发布:赛默飞变色龙软件 编辑:程序博客网 时间:2024/05/01 10:54
起因:
最近写了个按键精灵,用于魔兽排战场,特别是虚拟键值和键名的对照表,动作脚本等,数据量不大,就写出了以逗号间隔,每行表示一个记录的形式,为了方便,就写了个操作此类简单数据的CTable。
经过:
无
结果:
// Table.cpp: implementation of the CTable class.
//
/**///////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "FileFilter.h"
#include "Table.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
/**///////////////////////////////////////////////////////////////////////
// Construction/Destruction
/**///////////////////////////////////////////////////////////////////////
CTable::CTable()
...{
}
CTable::~CTable()
...{
for(int i = 0; i < this->Column.GetSize(); i++)...{
CStringArray * psl = (CStringArray *)Column[i];
delete psl;
}
}
UINT CTable::Load(const CString & sPath,const CString &sTag)
...{
CStdioFile f;
if(f.Open(sPath,CFile::modeRead))...{
CString sLine;
CStringArray sl;
ClearTable(true);
if(f.ReadString(sLine))...{
Slipt(sl,sLine,sTag);
for(int i = 0; i < sl.GetSize(); i++)...{
AddColumn(sl[i]);
}
}else...{
return 0xFFFE;
}
while(f.ReadString(sLine))...{
Slipt(sl,sLine,sTag);
AddRecord(sl);
}
}else
return 0xFFFF;
f.Close();
return 0;
}
int CTable::AddColumn(CString &sColumn)
...{
ColumnName.Add(sColumn);
CStringArray * pColumn = new CStringArray;
if(Column.GetSize() > 0)
pColumn->SetSize(((CStringArray * )(Column[0]))->GetSize());
return Column.Add(pColumn);
}
int CTable::Slipt(CStringArray &StringList, const CString &sSrc, const CString &sFlag)
...{
StringList.RemoveAll();
LPCSTR pSrc = (LPCSTR) sSrc;
int pp = 0,ps = 0 ,pe=0;
for(pp=0;pp < sSrc.GetLength();pp++)...{
if(pSrc[pp] == ((LPCSTR)(sFlag))[0])...{
CString sTemp;
StringList.Add(sSrc.Mid(ps,pp - ps));
ps = pp +1;
}
}
StringList.Add(sSrc.Mid(ps,pp - ps));
return StringList.GetSize();
}
UINT CTable::AddRecord(const CStringArray &sRecord)
...{
if(sRecord.GetSize() <= ColumnName.GetSize())...{
int i;
for(i =0; i < sRecord.GetSize(); i++)...{
((CStringArray *)(Column[i]))->Add(sRecord[i]);
}
if(i < ColumnName.GetSize())...{
for(;i < ColumnName.GetSize(); i++)...{
((CStringArray *)(Column[i]))->Add(CString(""));
}
}
return ((CStringArray *)(Column[0])) ->GetSize();
}else...{
return 0xFFFF;//数据项数比表的字段还多
}
}
UINT CTable::Save(const CString &sPath, const CString &sTag)
...{
if(ColumnName.GetSize() == 0)
return 0xFFFF;//连字段都没有,空的,直接返回
CStdioFile f;
if(!f.Open(sPath,CFile::modeWrite,NULL))
return 0xFFFF;//打开文件出错
CString sLine;
for(int i = 0 ; i < ColumnName.GetSize(); i ++)...{
sLine += (ColumnName[i] + CString(","));
}
sLine = sLine.Left(sLine.GetLength()-1);
f.WriteString(sLine);
CStringArray * pSL;
for(i = 0; i < ((CStringArray *)Column[0])->GetSize(); i ++)...{
sLine.Empty();
for(int j = 0; j < Column.GetSize(); j++)...{
pSL = (CStringArray *)Column[j];
sLine += (pSL->GetAt(i)+ CString(","));
}
sLine = sLine.Left(sLine.GetLength()-1);
f.WriteString(sLine);
}
return 0;
}
UINT CTable::ClearTable(bool IsFullClear)
...{
for(int i = 0; i < Column.GetSize(); i++)...{
CStringArray * psl = (CStringArray *) Column[i];
psl->RemoveAll();
}
if(IsFullClear)...{
for(int i = 0; i < Column.GetSize(); i++)...{
CStringArray * psl = (CStringArray*)Column[i];
delete psl;
}
Column.RemoveAll();
ColumnName.RemoveAll();
}
return 0;
}
CString CTable::GetValue(const CString &ColumnName, const int Index)
...{
int Columnindex = GetColumnIndex(ColumnName);
if(Columnindex == -1)...{
return CString("");
}
CStringArray * psl = (CStringArray *)Column[Columnindex];
if(psl->GetSize() <= Index)
return CString("");
return psl->GetAt(Index);
}
int CTable::GetColumnIndex(const CString &ColumnName)
...{
for(int i = 0; i < this->ColumnName.GetSize(); i++)...{
if((this->ColumnName)[i] == ColumnName)...{
return i;
}
}
return -1;
}
int CTable::GetCount()
...{
if(ColumnName.GetSize())...{
return ((CStringArray*)Column[0])->GetSize();
}
return -1;
}
//
/**///////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "FileFilter.h"
#include "Table.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
/**///////////////////////////////////////////////////////////////////////
// Construction/Destruction
/**///////////////////////////////////////////////////////////////////////
CTable::CTable()
...{
}
CTable::~CTable()
...{
for(int i = 0; i < this->Column.GetSize(); i++)...{
CStringArray * psl = (CStringArray *)Column[i];
delete psl;
}
}
UINT CTable::Load(const CString & sPath,const CString &sTag)
...{
CStdioFile f;
if(f.Open(sPath,CFile::modeRead))...{
CString sLine;
CStringArray sl;
ClearTable(true);
if(f.ReadString(sLine))...{
Slipt(sl,sLine,sTag);
for(int i = 0; i < sl.GetSize(); i++)...{
AddColumn(sl[i]);
}
}else...{
return 0xFFFE;
}
while(f.ReadString(sLine))...{
Slipt(sl,sLine,sTag);
AddRecord(sl);
}
}else
return 0xFFFF;
f.Close();
return 0;
}
int CTable::AddColumn(CString &sColumn)
...{
ColumnName.Add(sColumn);
CStringArray * pColumn = new CStringArray;
if(Column.GetSize() > 0)
pColumn->SetSize(((CStringArray * )(Column[0]))->GetSize());
return Column.Add(pColumn);
}
int CTable::Slipt(CStringArray &StringList, const CString &sSrc, const CString &sFlag)
...{
StringList.RemoveAll();
LPCSTR pSrc = (LPCSTR) sSrc;
int pp = 0,ps = 0 ,pe=0;
for(pp=0;pp < sSrc.GetLength();pp++)...{
if(pSrc[pp] == ((LPCSTR)(sFlag))[0])...{
CString sTemp;
StringList.Add(sSrc.Mid(ps,pp - ps));
ps = pp +1;
}
}
StringList.Add(sSrc.Mid(ps,pp - ps));
return StringList.GetSize();
}
UINT CTable::AddRecord(const CStringArray &sRecord)
...{
if(sRecord.GetSize() <= ColumnName.GetSize())...{
int i;
for(i =0; i < sRecord.GetSize(); i++)...{
((CStringArray *)(Column[i]))->Add(sRecord[i]);
}
if(i < ColumnName.GetSize())...{
for(;i < ColumnName.GetSize(); i++)...{
((CStringArray *)(Column[i]))->Add(CString(""));
}
}
return ((CStringArray *)(Column[0])) ->GetSize();
}else...{
return 0xFFFF;//数据项数比表的字段还多
}
}
UINT CTable::Save(const CString &sPath, const CString &sTag)
...{
if(ColumnName.GetSize() == 0)
return 0xFFFF;//连字段都没有,空的,直接返回
CStdioFile f;
if(!f.Open(sPath,CFile::modeWrite,NULL))
return 0xFFFF;//打开文件出错
CString sLine;
for(int i = 0 ; i < ColumnName.GetSize(); i ++)...{
sLine += (ColumnName[i] + CString(","));
}
sLine = sLine.Left(sLine.GetLength()-1);
f.WriteString(sLine);
CStringArray * pSL;
for(i = 0; i < ((CStringArray *)Column[0])->GetSize(); i ++)...{
sLine.Empty();
for(int j = 0; j < Column.GetSize(); j++)...{
pSL = (CStringArray *)Column[j];
sLine += (pSL->GetAt(i)+ CString(","));
}
sLine = sLine.Left(sLine.GetLength()-1);
f.WriteString(sLine);
}
return 0;
}
UINT CTable::ClearTable(bool IsFullClear)
...{
for(int i = 0; i < Column.GetSize(); i++)...{
CStringArray * psl = (CStringArray *) Column[i];
psl->RemoveAll();
}
if(IsFullClear)...{
for(int i = 0; i < Column.GetSize(); i++)...{
CStringArray * psl = (CStringArray*)Column[i];
delete psl;
}
Column.RemoveAll();
ColumnName.RemoveAll();
}
return 0;
}
CString CTable::GetValue(const CString &ColumnName, const int Index)
...{
int Columnindex = GetColumnIndex(ColumnName);
if(Columnindex == -1)...{
return CString("");
}
CStringArray * psl = (CStringArray *)Column[Columnindex];
if(psl->GetSize() <= Index)
return CString("");
return psl->GetAt(Index);
}
int CTable::GetColumnIndex(const CString &ColumnName)
...{
for(int i = 0; i < this->ColumnName.GetSize(); i++)...{
if((this->ColumnName)[i] == ColumnName)...{
return i;
}
}
return -1;
}
int CTable::GetCount()
...{
if(ColumnName.GetSize())...{
return ((CStringArray*)Column[0])->GetSize();
}
return -1;
}
// Table.h: interface for the CTable class.
//
/**///////////////////////////////////////////////////////////////////////
#if !defined(AFX_TABLE_H__5ABB29C6_C138_4FA7_8D67_E4BC9D5C8EA5__INCLUDED_)
#define AFX_TABLE_H__5ABB29C6_C138_4FA7_8D67_E4BC9D5C8EA5__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CTable
...{
public:
int GetCount();
int GetColumnIndex(const CString & ColumnName);
CString GetValue(const CString & ColumnName,const int Index);
UINT ClearTable(bool IsFullClear);
UINT Save(const CString & sPath,const CString & sTag);
UINT AddRecord(const CStringArray & sRecord);
int Slipt(CStringArray& StringList,const CString & sSrc,const CString & sFlag);
int AddColumn(CString & sColumn);
virtual UINT Load(const CString & sPath,const CString &sTag);
CTable();
virtual ~CTable();
private:
CStringArray ColumnName;
CPtrArray Column;
};
#endif // !defined(AFX_TABLE_H__5ABB29C6_C138_4FA7_8D67_E4BC9D5C8EA5__INCLUDED_)
//
/**///////////////////////////////////////////////////////////////////////
#if !defined(AFX_TABLE_H__5ABB29C6_C138_4FA7_8D67_E4BC9D5C8EA5__INCLUDED_)
#define AFX_TABLE_H__5ABB29C6_C138_4FA7_8D67_E4BC9D5C8EA5__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CTable
...{
public:
int GetCount();
int GetColumnIndex(const CString & ColumnName);
CString GetValue(const CString & ColumnName,const int Index);
UINT ClearTable(bool IsFullClear);
UINT Save(const CString & sPath,const CString & sTag);
UINT AddRecord(const CStringArray & sRecord);
int Slipt(CStringArray& StringList,const CString & sSrc,const CString & sFlag);
int AddColumn(CString & sColumn);
virtual UINT Load(const CString & sPath,const CString &sTag);
CTable();
virtual ~CTable();
private:
CStringArray ColumnName;
CPtrArray Column;
};
#endif // !defined(AFX_TABLE_H__5ABB29C6_C138_4FA7_8D67_E4BC9D5C8EA5__INCLUDED_)
- MFC操作文本型数据的源码
- MFC实现文本的基本操作
- MFC 对话框 文本操作
- MFC一天一练 ---- 基本的文本操作
- mysql操作文本数据
- VC++2005MFC -中文文本操作
- QT实现对数据文本保存的办法及其操作
- QT实现对数据文本保存的办法及其操作
- JDBC学习之路-对大文本数据的操作
- Matlab大数据文本操作
- 基本IO操作 、 文本数据IO操作
- MFC ODBC数据操作编程
- MFC/C++ CFile写入文件数据,输出utf-8的文本。(防止中文乱码)
- emacs的文本操作
- 文本块的操作
- 文本操作的底层
- Thymeleaf的文本操作
- c的文本操作
- alv macro
- 使用linq to xml 快速创建自己的Rss 之二 Syndication篇
- 小波传奇与诗歌神话: 小波变换与傅里叶变换
- ASP.NET 2.0网站专案同时使C#与VB.NET之技巧
- Eclipse快捷键大全
- MFC操作文本型数据的源码
- 下載含有中文名的EXCEL文件,文件名亂碼問題
- 用ext动态创建tree
- PHP Warning: PHP Startup: Unable to load dynamic library './php_mysql.dll' - /xd5/xd2/xb2/xbb/xb5/xbd/xd6/xb8/xb6/xa8/xb5/xc4/x
- > tips
- 在15分钟内构造一个数据访问层。
- Java with Python
- 一些命令
- XML+JS创建树形菜单