我有一个简短的测试程序来提取由制表符分隔的字符串.输出对我来说没有意义.我们的想法是找到下一个标签位置,并返回上一个和下一个标签之间的值.
我的程序输出如下."抢劫"从何而来?
fred ted rob a rob alex
程序
<cfscript>
s="fred"&chr(9)&"ted"&chr(9)&"rob"&chr(9)&"alex";
oldp=0;
while(oldp<Len(s))
{
p=Find(chr(9),s,oldp+1);
if (p==0)
break;
m=Mid(s,oldp+1,p); // oldp is the old tab poit p is the new get string in between
WriteOutput(m);
WriteOutput(" ");
oldp=p;
}
</cfscript>
Run Code Online (Sandbox Code Playgroud)
现在,如果我将程序更改为oldp在每个字符串后打印出来,结果是:
fred => 1
ted rob a => 6
rob alex => 10
Run Code Online (Sandbox Code Playgroud)
我希望看到1,5,9,.我不明白为什么ted rob是第二个字符串.我希望能看到rob.
Mid(s,oldp+1,p);
Run Code Online (Sandbox Code Playgroud)
要回答你的问题,那不是中旬的工作方式.第三个参数p是要返回的字符数,而不是字符串中的位置.
mid(s, 6, 3) ; // this would return "Ted"
Run Code Online (Sandbox Code Playgroud)
如果我可以提出建议 - 将字符串视为列表更容易,由制表符分隔.然后用列表函数解析它.
<cfscript>
str = "red"& chr(9) &"ted"& chr(9) &"rob"& chr(9) &"alex";
for (i = 1; i <= listLen(str, chr(9)); i++) {
WriteDump( listGetAt(str, i, chr(9)) );
}
</cfscript>
Run Code Online (Sandbox Code Playgroud)
注意,大多数列表函数忽略空元素.如果要保留它们,请使用listToArray.
<cfscript>
str = "red"& chr(9) &"ted"& chr(9) &"rob"& chr(9) &"alex";
arr = listToArray(str, chr(9), true);
for (i = 1; i <= arrayLen(arr); i++) {
WriteDump( arr[i] );
}
</cfscript>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1474 次 |
| 最近记录: |