2016-06-06 2 views
2

으로 변환이 유형의 ColdFusion 코드를 작성 했으므로 잠시 시간이 지났습니다.이름 값 쌍을 구조체

.NET 웹 서비스에서 ColdFusion으로 값을 반환합니다. webservice는 문자열 배열을 반환합니다. 다음 코드 ... 다음 출력

<cfoutput> 
<cfset xArrayItems=#GetRequestedUserSettings.settingValues.getString()#> 
<cfset xLen=ArrayLen(GetRequestedUserSettings.settingValues.getString())> 
<cfloop index="x" from=1 to="#xLen#"> 
    #xArrayItems[x]#<br /> 
</cfloop> 
</cfoutput> 

결과 ... 내가 멀리 아래에서이를 참조 할 수 있도록 의미있는 구조로 그 이름/값 쌍을 데려 가고 싶다는

maxsize=50 
isdomainadmin=False 
seenwelcome=False 

코드. 나는 실제로 다음 webservice 호출을 위해 cfinvoke 인수로 전달해야합니다.

CF8에서이 작업을 수행 할 수있는 사람을 친절하게 알릴 수 있습니까? 내가 찾는 것은 대부분 최신 버전입니다.

+2

힌트 :에 "="기호로 구분 된 "목록"로 취급합니다. 그런 다음 목록 함수를 사용하여 첫 번째 요소와 두 번째 요소 (즉 매개 변수 이름과 값)를 추출합니다. – Leigh

+1

물론 내부 루프. –

+0

감사합니다. 주스가 흘러 나오고 해결했습니다. –

답변

7

나는 당신이 제공 한 @Henry와 아주 비슷한 무언가로 끝을 맺었다.

<cfset UserSettings = structNew()> 
    <cfset xArrayItems= GetRequestedUserSettings.settingValues.getString()> 
    <cfset xLen=ArrayLen(GetRequestedUserSettings.settingValues.getString())> 
    <cfloop index="x" from=1 to="#xLen#"> 
     <cfset varName = ListGetAt(xArrayItems[x], 1, "=")> 
     <cfset varValue = ListGetAt(xArrayItems[x], 2, "=")> 
     <cfset "UserSettings.#varname#" = varValue> 
    </cfloop> 

배열이나 구조체가 더 나은 솔루션이지만 둘 다 결국 작동하는지 확실하지 않습니다. 내가 그와 함께 올 수

+2

잘 했어. 몇 가지 팁 : a) 연관 배열 표기법을 사용하여 값을 설정할 수도 있습니다. 즉, 및 b) 대부분의 목록 함수는 빈 요소를 무시합니다. 요소가 비어있을 수 있으면'listLen()'is> = 2를 검증하거나'getToken()'을 사용하십시오. 요소가 존재하지 않으면 오류를 발생시키지 않습니다. – Leigh

+1

CFScript와 for-in을 사용하여 루프를 수행합니다 –

+1

동의합니다. 불행히도 그들은 CF8을 사용하고있는 것처럼 보입니다. IIRC, for-in 어레이 루프 지원은 9.0.1까지 추가되지 않았습니다. – Leigh

1

약간 더 읽기 버전은 CF8와 함께 작동합니다 :

<cfset UserSettings = {}> 
<cfset xArrayItems = GetRequestedUserSettings.settingValues.getString()> 
<cfloop array="#xArrayItems#" index="item"> 
    <cfset varname = ListFirst(item, "=")> 
    <cfset varvalue = ListRest(item, "=")> 
    <cfset UserSettings[varname] = varvalue> 
</cfloop> 
관련 문제