主题:  如何将字符串内容转化为属性列表?

gwllb

职务:普通成员
等级:1
金币:0.0
发贴:91
注册:2000/12/1 15:19:02
#12004/1/13 9:09:52
比如,我有一个字符串,为
MyString="name="1.mp3" Mynum="1" MyText="text/1.txt""
我需要自动将MyString中的内容转化为
[#name:"1.mp3",#Mynum:"1",#MyText:"text/1.txt"]
因为字符串MyString是变化的,所以不知道改怎么自动添加,或者说,是怎么去获取字符串中各个属性的值。



wanlang

职务:普通成员
等级:1
金币:0.0
发贴:39
注册:2005/4/21 16:35:45
#22004/1/13 23:59:59
转过来倒是不难,关键是看你作什么用?
如果是属性列表可以用addprop来添加,用getprop或getpropat来获取值
我看你的意思可能会要用属性列表和线性列表混合用
线性列表的话就用append、add、addat来添加
用getone、getpos来获取值!



gwllb

职务:普通成员
等级:1
金币:0.0
发贴:91
注册:2000/12/1 15:19:02
#32004/1/14 9:10:37
如何添加属性列表和线性列表就不用解说了。我所要知道的是怎么把"name="1.mp3" Mynum="1" MyText="text/1.txt"" 这一字符串中的三个属性的值取出来,因为这个字符串只是一个例子,我做的项目,此字符串中的属性的值是变化的



wanlang

职务:普通成员
等级:1
金币:0.0
发贴:39
注册:2005/4/21 16:35:45
#42004/1/14 20:24:01
如果都那样格式的字符串的话,
你可以先取到“=”的位置
再根据“=”的位置不就可以获取到它的值了吗?



gwllb

职务:普通成员
等级:1
金币:0.0
发贴:91
注册:2000/12/1 15:19:02
#52004/1/15 10:02:10
想到过,但是字符串中有3个或更多的“=”,用offset怎么去判断你要检测第几个"="的位置呢?现在问题已经解决,没用字符串的方式,用了笨办法,将所有属性都生成一个文本,再根据行去读相应文本行的内容。



wanlang

职务:普通成员
等级:1
金币:0.0
发贴:39
注册:2005/4/21 16:35:45
#62004/1/16 22:40:17
用offset是只会获得在指定字符串的第一次出现的位置,所以是行不通的!
用下面这个函数可以获得字符串中所有的"=",这个函数只能相对于一个字符哦,它会返回一个位置列表

on startMovie me
stringx="name=1.mp3 Mynum=1 MyText=text/1.txt"
put Mulioffset("=",stringx)
end

on Mulioffset str1,str2
strlist=[]
repeat with i=1 to str2.length
m=str2.char[i]
if m=str1 then
strlist.append(i)
end if
end repeat
return strlist
end



wanlang

职务:普通成员
等级:1
金币:0.0
发贴:39
注册:2005/4/21 16:35:45
#72004/1/17 3:04:44
下面有个函数,方法比较笨:),而且你的格式不能错误,不能同时有两个空格存在,等号前后也不能有空格
on startMovie me
stringx="name=1.mp3 Mynum=1 MyText=text/1.txt"
put Mulioffset(stringx)
end

on getstring str1
strlist1=[]
strlist2=[]
l=" "
repeat with i=1 to str1.length
m=str1.char[i]
if m="=" and l<>m then
strlist1.append(i)
end if
if m=" " and l<>m then
strlist2.append(i)
end if
l=m
end repeat
if strlist2>=strlist1 then exit
ch1_1=str1.char[strlist1[1]+1..strlist2[1]-1]
ch2_1=str1.char[strlist1[2]+1..strlist2[2]-1]
ch3_1=str1.char[strlist1[3]+1..str1.length]
str=[#name:ch1_1,#myNum:ch2_1,#myText:ch3_1]
return str
end
--[#name: "1.mp3", #mynum: "1", #mytext: "text/1.txt"]