是否可以使用ColdFusion验证分隔符?

时间:2017-12-18 17:32:18

标签: coldfusion

我的CF应用程序提供三种选择(分号,逗号或制表符)供用户选择匹配文件中的分隔符。我想验证用户使用他们的文件中的分隔符选择的内容。有没有办法做到这一点?

因此,如果用户使用制表符分隔符作为其文本文件,但他不小心选择了逗号,那么我将收到此错误:

无效的列表索引2.
在函数ListGetAt(list, index [, delimiters])中,index的值2不是第一个参数(此列表包含1个元素)。有效索引的范围为1到列表中的元素数。

我认为避免此类错误的唯一方法是,如果我可以验证用户在其文件中使用的分隔符,但在搜索网页时找不到任何示例。

1 个答案:

答案 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>

但是,如果您的文件中有文本段落,由于大多数书面语言中的逗号频率,这将会非常糟糕地猜测,所以请大家用它。