배열을 내부함수로 저장한후 다시 불러와 쓸수 있나요?
다음 식과 같이 종목코드를 내부함수로 저장하고
다시 종목코드를 불러오려 하는데 잘 안되네요...
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
지나가다 역시 단순한 문제여서 실례를 무릅쓰고 달아봅니다. ^^
우선 배열을 직접 저장할 수는 없습니다.
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
미리 감사드립니다 꾸벅!!!