[字符][替换]中间字符如何替换
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 '
哈哈,是我将字段名写错了,是可行的。多谢十三豆先生
[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的操作