C++如何从文本内读取格式为"string=int"的数据,保存在类里,可直接以string来调用string和关联int的值

例如:txt文本里的数据为:string1=10string2=20string3=10string4=20……在C++新建个类,枚举了string1、string2、s... 例如:
txt文本里的数据为:
string1=10
string2=20
string3=10
string4=20
……

在C++新建个类,枚举了string1、string2、string3、string4
public enum MyClass {
string1,
string2,
string3,
string4
};

然后在类里调用 MyClass::string1.getName() 可以得到txt文本里对应的那个string类型的“string1”。
MyClass::string4.getName() 可以得到txt文本里string4等号右边的int值(20)。
或者有别的好的方案可以实现的,总结一下就是txt文本里等号左值是英文字母,等号右值是整数,写好后可以在程序里以英文字母直接可以分别调用到英文名和整数。
本人初学者,希望大家不吝赐教~!
展开
 我来答
khlerc
2012-12-13 · TA获得超过420个赞
知道小有建树答主
回答量:485
采纳率:0%
帮助的人:272万
展开全部
在VC中读写ini配置文件的函数

配置文件中经常用到ini文件,在VC中其函数分别为:
  写入.ini文件:bool WritePrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTRlpString,LPCTSTR lpFileName);
  读取.ini文件:DWORD GetPrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTRlpDefaut,LPSTR lpReturnedString,DWORD nSize,LPCTSTR lpFileName);
  读取整形值:UINT GetPrivateProfileInt(LPCTSTR lpAppName,LPCTSTR lpKeyName,INTnDefault,LPCTSTR lpFileName);
  其中个参数的意思:
  LPCTSTR lpAppName ------- INI文件中的一个字段名
  LPCTSTR lpKeyName -------- lpAppName 下的一个键名,也就是里面具体的变量名
  LPCTSTR lpString ---------是键值,也就是变量的值, 必须为LPCTSTR或CString类型
  LPCTSTR lpFileName --------完整的INI文件路径名
  LPCTSTR lpDefaut ----------如果没有其前两个参数值,则将此值赋给变量
  LPSTR lpReturnedString --------接收INI文件中的值的CString对象,即接收缓冲区
  DWORD nSize ------接收缓冲区的大小
  例子:
  CString StrName,Strtemp;
  int nAge;
  StrName = "jacky";
  nAge = 13;
  WritePrivateProfileString("Student","Name",StrName,"c:\\setting.ini");
  结果:(INI文件中显示如下:)
  [Student]
  Name=jacky
  读取:
  CString SName;
  GetPrivateProfileString("Student","Name","DefaultName",SName.GetBuffer(MAX_LENGTH),MAX_LENGTH,"c:\\setting.ini");
  结果:SName = "jacky";这里需要注意点就是用完GetBuffer函数后一定要释放(用SName.ReleaseBuffer()函数),不然后面再用到SName的其他子函数就会失灵。
  读整数比较简单,如下
  int Result = GetPrivateProfileInt("Student","nAge",0,"c:\\setting.ini")返回值即为所读取的结果!
  在GetPrivateProfileString最后一个参数是配置文件路径的参数,此路径只能是绝对路径,不能是相对路径,但现在我需要是我的exe文件能和我的配置文件在一起。因此我使用了GetCurrentDirectory函数。
  原代码如下:
  CString server_ip;
  CString des="";
  ::GetCurrentDirectory(MAX_PATHLENGTH,des.GetBuffer(MAX_PATHLENGTH));
  des.ReleaseBuffer();
  des+="\\config.ini";
  GetPrivateProfileString("PhoneDemo","Server_IP","",server_ip.GetBufferSetLength(15),15,des);
  server_ip.ReleaseBuffer();
  注意:在这里使用CString变量时,在使用完GetBuffer后,紧接着一定要使用ReleaseBuffer()函数,才可以进行其他的诸如字符串+操作

--------------------转自CSDN-cherryt-----------------------------------------------------
VC读取配置文件(.ini):
CString strIP = _T("");
CString strPort = _T("");
::GetPrivateProfileString("TCP/IP","IP","",
strIP.GetBuffer(MAX_PATH), MAX_PATH,".\\Config.ini");
strIP.ReleaseBuffer();
m_strIP = strIP; //IP地址
::GetPrivateProfileString("TCP/IP","Port","",
strPort.GetBuffer(MAX_PATH), MAX_PATH,".\\Config.ini");
strPort.ReleaseBuffer();
m_iPort = atoi(strPort); //端口号配置文件名为:Config.ini
文件结构:
[TCP/IP]
IP=127.0.0.1
Port=8848
另外:
DWORD GetPrivateProfileString(
LPCTSTR lpAppName, // 你定义的段
LPCTSTR lpKeyName, // 你的键名
LPCTSTR lpDefault, // 没有键值时的默认值
LPTSTR lpReturnedString, // char buff[xx]
DWORD nSize, // xxx
LPCTSTR lpFileName // 配置文件路径(完整路径)
);

WritePrivateProfileString:和上面的差不多,如果将 Private 去掉,可以不加路径(只写文件名),
函数自动到windows的默认路径搜索文件名
追问
关键问题不在于读取,而在于如何关联?
C++里声明一组常量,常量名和我要导入的文本里=号左值一样。
比如文本内容为:
one = 100;
那么我希望在代码里,可直接调用 MyClass::one.getName()获得一个"one"的字符串,MyClass::one.getValue()获得100这个值。
追答
那就看你想把它做得多复杂了,按照你的思路,你可以写一个基类,像下面这样:
class PropertyBase
{
public:
PropertyBase()
{
memset(propertyName, '\0', sizeof(propertyName));
};
virtual int getValue();
Protected:
char propertyName[100];
char appName[100];
char fileName[100];

}

然后,你必须为每个属性写一个实体类,如:
class One : public PropertyBase
{
public:
One(char* propertyName)
{
strncpy(propertyName, propertyName, sizeof(propertyName));
};
virtual int getValue() // 重载getValue()函数
{
char returnedString[100];
memset(returnedString, '\0', sizeof(returnedString));
GetPrivateProfileString("yourProgram.exe", propertyName, "", returnedString, sizeof(returnedString), fileName);
return atoi(returnedString);
};
}

这样,你就可以这样调用了:
MyClass::one.getValue()

但是我在想,你是否有必要为了这点便利性来为每个属性实现一个类了。
这属于设计方面的问题:过渡设计!
xrayron
2012-12-19 · TA获得超过1052个赞
知道大有可为答主
回答量:781
采纳率:0%
帮助的人:948万
展开全部
首先你要搞清楚变量名只是个名字,和字符串没有任何关系。变量名在机器中没有任何表示 只有变量存储一个内存地址,你不能指望机器能识别你定义的变量名。其次枚举的用法你没有弄明白,枚举的元素不等于类对象。你不能用枚举元素来进行类操作。
合理的方式是定义一个类对象,根据类对象进行操作。给你个合理的设计建议:

类对象可以读取文本中所有的字符串和常量,用于查找:
list<string> MyClass::getAllNames() const;
list<int> MyClass::getAllValues() const;

其次实例对象根据值或者字符串进行查找:
string MyClass::getName(int _value) const;
int MyClass::getValue(string _name) const;
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
周生008
2012-12-14 · TA获得超过1222个赞
知道小有建树答主
回答量:1329
采纳率:0%
帮助的人:645万
展开全部
char strBuf = fgetline(...);
int ret = strncmp("string1", strbuf, strlen("string1"));
if(ret == 0 &&strBuf[strlen("string1"+1] = '=')
{
//得到那个数字
}
只是写了下思路,你详细一下就可以实现
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lgao622
2012-12-12 · 知道合伙人软件行家
lgao622
知道合伙人软件行家
采纳数:1137 获赞数:6550
毕业于武汉工程大学邮电与信息工程学院通信专业,软件行业,4年工作经验。

向TA提问 私信TA
展开全部
GetPrivateProfileString 你查一下这个函数,就会发现它已经完成你所想要的功能

对应的 WritePrivateProfileString
追问
关键问题不在于读取,而在于如何关联?
C++里声明一组常量,常量名和我要导入的文本里=号左值一样。
比如文本内容为:
one = 100;
那么我希望在代码里,可直接调用 MyClass::one.getName()获得一个"one"的字符串,MyClass::one.getValue()获得100这个值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
loboho
2012-12-14 · TA获得超过506个赞
知道小有建树答主
回答量:441
采纳率:100%
帮助的人:409万
展开全部
楼主的意思含糊,看大概是不是这样:
struct Value
{
const char* Name;

int nValue;

};
#define DEFV(name) Value name = { #name, 0 }
namespace MyClass
{
DEFV(string1);

DEFV(string2);

DEFV(string3);

DEFV(string4);

};
然后读取配置文件中的值,伪代码:MyClass::string1.nValue = readIntFromTxt(MyClass::string1.Name);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式