2012-02-13 30 views
0

タブで区切られた文字列を抽出するための短いテストプログラムがあります。出力は私には意味がありません。考え方は、次のタブ位置を見つけて、前と次のタブの間に値を戻すことです。ColdFusion、タブ区切り文字列を解析しようとしています

下記のプログラムの出力。 「ロブ」はどこから来たのですか?私は1,5,9,を見ることを期待する

fred => 1 
ted rob a => 6 
rob alex => 10 

 
    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> 

は今、私は結果は各文字列の後oldpをプリントアウトするようにプログラムを変更した場合。私はなぜted robが2番目の文字列であるのか分かりません。代わりにrobが表示されます。

+0

コードスニペットが正しく表示されるように、コードタグ{{}}を使用することを忘れないでください。 – Leigh

答えて

6
Mid(s,oldp+1,p); 

あなたの質問に答えるためにどのようにmid作品、それはないです。 3番目のパラメータpは、返される文字数であり、文字列内の位置ではありません。

mid(s, 6, 3) ; // this would return "Ted" 

私は提案を作ることができれば - タブで区切られたリストとして文字列を治療するためにはるかに簡単です。リスト関数で解析します。

ほとんどのリスト関数は、空の要素を無視します。保存する場合は、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> 
+0

こんにちは、リストのように扱うというあなたの理想は、私のほうがはるかに優れています。 –

関連する問題