hur.cn - 华软网

 热门搜索

请问我想将这个文本保存到数组里中间如何添加,有点难度

  作者:未知    来源:网络    更新时间:2011/6/23
文本内容

RLUX500 = 500
RLUX400 = 400
RLUX300 = 300
RLUX200 = 200
RLUX100 = 100
RLUX75 = 75
RLUX50 = 50
RLUX25 = 25
RLUX20 = 20 
RLUX15 = 15
RLUX10 = 10
RLUX5 = 5
RLUX2 = 2
RLUX1 = 1
RLUX0.5 = 0.5
RLUX0.1 = 0.1
GLUX500 = 500




说明:读取文本里的文件取等号右边的文本

现在想将读取的文本保存到数组里应该怎么添加代码

注意:文本内容长度是变化的

下面是程序代码

C++">	char* pFileName = "\LightSrcCalib.txt";
int nPos;
CStdioFile file;
CString strValue;

if( !file.Open( pFileName, CFile::modeReadWrite ) )
{
::MessageBox(NULL," 文件不存在!","错误",0);
exit(1);
}

while(file.ReadString(strValue))
{
nPos = strValue.Find('=');
CString str1 = strValue.Left(nPos);
CString str2 = strValue.Mid(nPos+1);
m_text+=str2+"\r\n";
//::MessageBox(NULL,str2,"错误",0);
}
UpdateData(false);
file.Close();



---华软 网友回答---
想问的是如何使用动态数组吧,有几种方法解决,但都不叫数组
1、使用CList,定义列表;,但得先定义1个结构,结构里包括 str1和str2;使用的时候遍历list就可以了
2、使用CStringArray,但要定义2个,一个来存str1,另一个来存str2,注意添加删除要对应的Index同步;
如果LZ熟悉数组的话,用CStringArray方便些,因为这个可以通过Index来取值,而CList通过POSITION,需要遍历来取值,麻烦些。
---华软网友回复---
可以把等号右边的数值作为字符串保存到vector<CString>或者CStringArray中
---华软网友回复---
嘿嘿,LS的,STL会让LZ有点摸不着头脑的,还是让LZ先学一下普通的处理吧,在VC2005以前,MS的STL是有问题的,不知道在VC2005之后有没有解决。我很久没有用STL了
---华软网友回复---
......的确让我摸不着头脑,要是行就不会来请教了

想把它保存到数组里,也可以用C++吗?其实这个我想写成C++
---华软网友回复---
如果想写成纯的C++,自己定义一个类,来实现动态数组,但这个类中,需要自己来定义结构和关系,特别注意的是上下项的连接,温习一下计算机课程中的列表,注意指针、内存申请及释放等关键问题。
---华软网友回复---
随手写个简单的吧,就针对你这个数据结构的,不一定正确,没有区别PUBLIC或PRIVATE等,希望对你有启发,你自己看后扩展一下
//定义结构
struct _st_string
{
    char cString[255];    //字符串,算你的=号左边的吧
    float fValue;         //值 ,=号右边的吧
    _st_string *pNext;    //下一个
    int        iIndex;    //你添加的顺序
}
class StringGroup
{
     int iCount;   //数组大小,且叫数组吧
      _st_String *pFist; //指向第一个对象
      _st_String *pLast; //指向最后一个
     StringGroup()
     {
        //做些初始化工作,如:
         iCount=0; //之类的
         pFirst=NULL;
       pLast=NULL;
        ...
     }
     ~StringGroup()
     {//做些善后工作
           _st_String *p=pFirst;
           while(p!=NULL)
         {
            _st_String *pNext=p->pNext;
            delete p;
            p=pNext;
         }
         iCount=0;
         ... //以及其它的
     }
     int addString(LPCTSTR szStr,flost fValue)
     {//添加一个项,返回在数组中的位置,也是数组的大小
         _st_String *p=new _st_String;
         _snprintf_s(p->cString,sizeof(p->cString),"%s",szStr);
 p->fValue=fValue;
 p->iIndex=iCount++;
 if(pFirst==NULL)
 {
 pFirst=p;
 pLast=p;
 }
 else
 {
 pLast->pNext=p;
 pLast=p;
 }
...//其它处理

     }
 int getGroupCount(){return iCount;}//取数组大小
 float getValue(LPCTSTR szStr)
 {  //根据STRING 来取值
    _st_String *p=pFist;
while(p)
{
if(_strcmpi(p->cString,szStr)==0)
return p->fValue;
p=p->pNext;
}
return 0.0;
 }
 float getValue(int iIndex)
{//根据索引取值 ,这个自己完成吧
    ....
}
//还有对数组的排序,删除其中某个项等操作,自己扩展了
void sortGroup()
{
...
}
bool deleteGroup(LPCTSTR szStr)
{
...
}
bool deleteGroup(int iIndex)
{
...
}
void clearGroup()
{
...
}
...
}
---华软网友回复---
非常感谢,你的精神非常伟大,目前已经越来越少人有这样的精神了,因为大家都在忙自己的事情!
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。