2017-12-18 17 views
1

내 CF 응용 프로그램은 사용자가 자신의 파일에있는 구분 기호와 일치하도록 선택할 수있는 세 가지 선택 사항 (세미콜론, 쉼표 또는 탭)을 제공합니다. 사용자가 파일에서 구분 기호를 사용하여 선택한 항목의 유효성을 검사하려고합니다. 이것을 할 수있는 방법이 있습니까?ColdFusion에서 구분 기호의 유효성을 검사 할 수 있습니까?

그래서 나는이 오류가 발생합니다 사용자가 자신의 텍스트 파일 탭 구분 기호를 사용하지만 그는 실수로 쉼표를 선택한 경우 :

잘못된리스트 인덱스 기능 ListGetAt(list, index [, delimiters]) 2.
, 인덱스, 2의 값, 첫 번째 인수로 유효하지 않습니다 (이 목록에는 1 개의 요소가 있음). 유효한 색인의 범위는 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> 

:

+0

오류를 catch 한 다음 사용자에게 문서의 형식이 잘못되었다는 메시지를 표시하고 올바른 구분 기호를 선택했는지 확인할 수 있습니까? –

+0

cftry cfcatch를 사용하여 오류를 잡으면됩니까? – MGL

+0

그럴 수 있습니다. 그렇습니다. –

답변

1

당신은, 그래서 여기에 데이터의 종류는 파일에 구분되는 것을 지정하지 않은 추측 방법 그냥 아주 간단합니다 대부분의 서면 언어로 된 쉼표의 빈도에 맞추어 소금물로 찍으십시오.