커뮤니티

배열을 내부함수로 저장하고 불러오기

프로필 이미지
brucehan
2013-10-15 14:59:59
1357
글번호 222637
답변완료
배열을 내부함수로 저장한후 다시 불러와 쓸수 있나요? 다음 식과 같이 종목코드를 내부함수로 저장하고 다시 종목코드를 불러오려 하는데 잘 안되네요... var Ch1_fillcode = new Array(); function Main_OnStart() { for(var i = 0; i <=2; i++) { Ch1_fillcode[i] = Option.GetATMCallRecent(i,0); } Main.SetUserValue("Ch1_fillcodeUserValue",Ch1_fillcode); Main.MessageList(Main.GetUserValue("Ch1_fillcodeUserValue")); for(var i = 0; i <=2; i++) { Main.MessageList(Main.GetUserValue("Ch1_fillcodeUserValue")[i]); } } =========== 디버깅 내용 =============== 201HB267, 201HB270,201HB272 2 0 1 미리 감사드립니다 꾸벅!!!
답변 2
프로필 이미지

불꽃기사

2013-10-15 21:05:32

지나가다 역시 단순한 문제여서 실례를 무릅쓰고 달아봅니다. ^^ 우선 배열을 직접 저장할 수는 없습니다. SetUserValue 메쏘드에 배열을 넣었을 때 "201HB267, 201HB270,201HB272" 이렇게 들어간 것은 제가 보기엔 그냥 내부적으로 배열의 각 요소를 쉼표로 구분해서 문자열을 만들어 주는 것 에 불과합니다. 물론 문자열 객체의 substring 같은 걸 이용해서 문자열을 추출해서 사용할 수도 있겠지만 그러면 스크립트도 지저분해지고 나중에 유지보수하기가 힘들어지겠지요. 따라서 이해하기 쉽고 정상적으로 처리하기 위해서는 배열의 각 요소를 각각 이름을 주어 SetUserValue 메쏘드에 넣어주는게 좋습니다. var Ch1_fillcode = new Array(); function Main_OnStart() { for(var i = 0; i <=2; i++) // 배열에 코드담기 { Ch1_fillcode[i] = Option.GetATMCallRecent(i, 0); } for(var i = 0; i <=2; i++) // 배열요소에 각각 이름을 주어 값 저장하기 { // "Ch1_fillcode" + i ==>> i 가 증가함에 따라 // "Ch1_fillcode0", "Ch1_fillcode1", "Ch1_fillcode2" // 이렇게 이름이 만들어지겠지요 Main.SetUserValue("Ch1_fillcode" + i, Ch1_fillcode[i]); } for(var i = 0; i <=2; i++) // 저장한 이름으로 값 불러오기 { Main.MessageList(Main.GetUserValue("Ch1_fillcode" + i)); } } 핵심은 이렇습니다. 1. MessageList 로 배열을 출력했을 때 나오는 건 배열이 아니라 그냥 스트링(문자열)일 뿐이다. 2. 배열요소를 저장하려면 각각 이름을 줘야하는데 순차적으로 이름을 만들기위해서는 문자열에 + 연산자로 숫자를 덧붙힌다. 간단하죠? ^^ > brucehan 님이 쓴 글입니다. > 제목 : 배열을 내부함수로 저장하고 불러오기 > 배열을 내부함수로 저장한후 다시 불러와 쓸수 있나요? 다음 식과 같이 종목코드를 내부함수로 저장하고 다시 종목코드를 불러오려 하는데 잘 안되네요... var Ch1_fillcode = new Array(); function Main_OnStart() { for(var i = 0; i <=2; i++) { Ch1_fillcode[i] = Option.GetATMCallRecent(i,0); } Main.SetUserValue("Ch1_fillcodeUserValue",Ch1_fillcode); Main.MessageList(Main.GetUserValue("Ch1_fillcodeUserValue")); for(var i = 0; i <=2; i++) { Main.MessageList(Main.GetUserValue("Ch1_fillcodeUserValue")[i]); } } =========== 디버깅 내용 =============== 201HB267, 201HB270,201HB272 2 0 1 미리 감사드립니다 꾸벅!!!
프로필 이미지

예스스탁 예스스탁 답변

2013-10-16 11:07:46

> 불꽃기사 님이 쓴 글입니다. > 제목 : Re : 배열을 내부함수로 저장하고 불러오기 > 지나가다 역시 단순한 문제여서 실례를 무릅쓰고 달아봅니다. ^^ 우선 배열을 직접 저장할 수는 없습니다. SetUserValue 메쏘드에 배열을 넣었을 때 "201HB267, 201HB270,201HB272" 이렇게 들어간 것은 제가 보기엔 그냥 내부적으로 배열의 각 요소를 쉼표로 구분해서 문자열을 만들어 주는 것 에 불과합니다. 물론 문자열 객체의 substring 같은 걸 이용해서 문자열을 추출해서 사용할 수도 있겠지만 그러면 스크립트도 지저분해지고 나중에 유지보수하기가 힘들어지겠지요. 따라서 이해하기 쉽고 정상적으로 처리하기 위해서는 배열의 각 요소를 각각 이름을 주어 SetUserValue 메쏘드에 넣어주는게 좋습니다. var Ch1_fillcode = new Array(); function Main_OnStart() { for(var i = 0; i <=2; i++) // 배열에 코드담기 { Ch1_fillcode[i] = Option.GetATMCallRecent(i, 0); } for(var i = 0; i <=2; i++) // 배열요소에 각각 이름을 주어 값 저장하기 { // "Ch1_fillcode" + i ==>> i 가 증가함에 따라 // "Ch1_fillcode0", "Ch1_fillcode1", "Ch1_fillcode2" // 이렇게 이름이 만들어지겠지요 Main.SetUserValue("Ch1_fillcode" + i, Ch1_fillcode[i]); } for(var i = 0; i <=2; i++) // 저장한 이름으로 값 불러오기 { Main.MessageList(Main.GetUserValue("Ch1_fillcode" + i)); } } 핵심은 이렇습니다. 1. MessageList 로 배열을 출력했을 때 나오는 건 배열이 아니라 그냥 스트링(문자열)일 뿐이다. 2. 배열요소를 저장하려면 각각 이름을 줘야하는데 순차적으로 이름을 만들기위해서는 문자열에 + 연산자로 숫자를 덧붙힌다. 간단하죠? ^^ > brucehan 님이 쓴 글입니다. > 제목 : 배열을 내부함수로 저장하고 불러오기 > 배열을 내부함수로 저장한후 다시 불러와 쓸수 있나요? 다음 식과 같이 종목코드를 내부함수로 저장하고 다시 종목코드를 불러오려 하는데 잘 안되네요... var Ch1_fillcode = new Array(); function Main_OnStart() { for(var i = 0; i <=2; i++) { Ch1_fillcode[i] = Option.GetATMCallRecent(i,0); } Main.SetUserValue("Ch1_fillcodeUserValue",Ch1_fillcode); Main.MessageList(Main.GetUserValue("Ch1_fillcodeUserValue")); for(var i = 0; i <=2; i++) { Main.MessageList(Main.GetUserValue("Ch1_fillcodeUserValue")[i]); } } =========== 디버깅 내용 =============== 201HB267, 201HB270,201HB272 2 0 1 미리 감사드립니다 꾸벅!!!