2017-12-18 14 views
1

私のCFアプリケーションでは、ユーザーがファイル内の区切り文字と一致するものを選択するための3つの選択肢(セミコロン、カンマまたはタブ)を提供しています。私は、ユーザがファイル内の区切り文字で選択したものを検証したい。これを行う方法はありますか?ColdFusionでデリミタの検証が可能ですか?

それでは、私はこのエラーを取得するユーザーが自分のテキストファイルのタブ区切り文字を使用しているが、彼は偶然にコンマを選択した場合:

無効なリストインデックス機能ListGetAt(list, index [, delimiters]) 2.
、インデックス、2の値は、最初の引数として有効ではありません(このリストには1つの要素があります)。有効なインデックスの範囲は、1〜リストの要素数です。

このタイプのエラーを回避する唯一の方法は、ユーザーの区切り文字がファイルで使用されていることを検証できますが、Webを検索したときに例が見つかりませんでした。

+0

エラーをキャッチし、その文書が不正な形式になっている可能性があり、正しい区切り文字を選択したことをユーザーに伝えることができませんでしたか? –

+0

cftry cfcatchを使用してエラーをキャッチすることは意味しますか? – MGL

+0

それはうまくいくかもしれない –

答えて

1

あなたはので、ここだけの非常にシンプルな推測方法ですが、ファイルに区切られているデータの種類を指定しませんでした:あなたが原因ファイル内のテキストの段落を持っている場合しかし、これはひどく推測します

<!--- read file into memory ---> 
<cfset fileContent = fileRead(expandPath("yourfile.csv"))> 

<!--- declare delimiting characters to check, NOTE: due to using "listLen" you may only specify single characters ---> 
<cfset possibleDelimiters = [ ";", ",", chr(9) ]> <!--- chr(9) = tab ---> 

<!--- count number of records found for each delimiter ---> 
<cfset countResults = {}> 
<cfloop array="#possibleDelimiters#" index="delimiter"> 
    <cfset countResults[delimiter] = listLen(fileContent, delimiter)> 
</cfloop> 

<!--- determine delimiter with the highest count ---> 
<cfset sortedDelimiters = structSort(countResults, "NUMERIC", "DESC")> 
<cfset mostFrequentDelimiter = sortedDelimiters[1]> 

<cfoutput> 
    Is <code>#encodeForHtml(mostFrequentDelimiter)# (#asc(mostFrequentDelimiter)#)</code> the delimiter? 
</cfoutput> 

ほとんどの書かれた言語のコンマの頻度に、それで塩の穀物でそれを取る。

関連する問題