[字符][替换]中间字符如何替换

09月 18th, 2008 by admin
Posted in VC/MFC | No Comments »

我有一个数据表,表中纪录很多,其中有D22401-3YT2(大约有30条纪录),D22102-3YT12(大约有35条纪录),D224032-32YT2(大约也有30条纪录),D22121-5YT3(大约30多条纪录),现在问题是对D22401-3YT2,D22102-3YT12,D224032-32YT2中的YT变换为LY,但是对D22121-5YT3中的YT又不变换。我是用
REPL   ALL   XX   WITH   'D22401-3LY2 '   FOR   TRIM(LL)== 'D22401-3YT2 '这样的语句一个一个来实现的。
有没有一个语句能够同时将YT变换为LY呢?

use   表名
replace   xx   with   strtran(xx, 'YT ', 'LY ')   for   alltrim(xx) <> 'D22121-5YT3 '

update   表名   set   xx=strtran(xx, 'YT ', 'LY ')   where   alltrim(xx) <> 'D22121-5YT3 '

我试了
UPDATE   SS   SET   XX=STRTRAN(LJH, 'YT ', 'LY ')   WHERE     HH= 'DD '   AND   HH <> 'DD-4308YTDB3 '   AND   HH <> 'DD-4308YTDB5 '
但是没有任何用处,
是怎么回事?

UPDATE   SS   SET   XX=STRTRAN(XX, 'YT ', 'LY ')   WHERE     HH= 'DD '   AND   HH <> 'DD-4308YTDB3 '   AND   HH <> 'DD-4308YTDB5 '

哈哈,是我将字段名写错了,是可行的。多谢十三豆先生

Tags: , ,

[CList][替换][一个结点]CList列表类中,如何替换中间的一个结点?我的代码如下:

05月 14th, 2008 by
Posted in VC/MFC | No Comments »

代码大致如下:
typedef struct node{ 
CString s1;
CString s2;
CString s3;
} Node;

        POSITION pos;
CList <struct node ,struct node&> L;
struct node *Nn=new (struct node);  //新串
struct node *No=new (struct node);  //老串
Nn->s1=S1;                               //类型均为CString ,对新值赋值
Nn->s2=S2;
Nn->s3=S3;
l=L.GetCount();  //取得结点个数
pos = L.GetHeadPosition();
if(l>0){ //这里排序。
     while (pos != NULL)
    {       l–;
                    *No = L.GetNext(pos);          //取出原来的串
                       if(…){                             //如果新旧结点的其中s1、s2两个数据相同时往下运行。
             if(S3.GetLength() <No->s3.GetLength())
                        Nn->s3=No->s3;
             if(l == 0){                 //链表尾部
                         L.RemoveTail(); //删除尾端的结点。
                            L.AddTail(*Nn);  //加入新结点。
                            break;
                                  }else{
                       //L.RemoveAt(pos);    //先删除结点,会出错。
                          L.SetAt(pos,*Nn);     //用新串替换原位置的结点,这样只是在老词后面加入了同一个串

                          // ??? 怎样替换呢?

                          break;
                              }
                   }
            }
      }else     //如果结点为空,尾端加入结点。
         L.AddTail(*Nn);

我运行跟踪过,是指向的前一个结点,但是,不能L.RemoveAt(pos-1)做啊?这就是我的问题啊,怎么解决呢?

POSITION nowPos = pos;//记录当前pos 
不是让你先记录下来么

TYPE GetNext(POSITION& rPosition) const; // return *Position++
看一下CList的GetNext函数的说明。注意参数为引用类型。后面的注释说明返回值是Position位置的数据,然后Position向后移动了。所以你必须记录当前的Position

:)是我眼拙,多谢!!

LS正解,POSITION是一个结构指针,不能用于++,–,-1,+1的操作

Tags: , ,