임의 문자열 생성임의의 문자열을 생성하기 위해 이 코드를 작성했습니다.for 루프 없이 이 작업을 수행하는 더 나은 방법이나 대체 방법이 있는지 궁금합니다.
names default to here(1);
letters={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
randstrlength=100;
randstr="";
for(ii=1, ii<=randstrlength, ii++,
randstr=randstr || letters[Random Integer(26)];
);
randstr;Re: 무작위 문자열 생성나는 루프 없이 그것을 하는 방법을 생각할 수 없다. Random Integer는 임의의 벡터를 반환하지 않습니다. Random Index는 벡터를 반환하지만 중복은 없습니다.
나는 더 효율적이라고 생각할 수 밖에 없습니다. 루프에서 문자열을 연결하는 것은 효율적이지 않습니다. 다음은 약간 개선되어야 합니다.
names default to here(1);
letters={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
randstrlength=100;
idx = J(1,randstrlength);
for(ii=1, ii<=randstrlength, ii++,
idx[ii] = Random Integer(26);
);
randstr=concat items(letters[idx], "");
루프가 없는 솔루션의 존재에 대해서도 궁금합니다. 
Re: 무작위 문자열 생성names default to here(1);
letters={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
randstrlength=100;
idx = J(1,randstrlength, Random Integer(26));
randstr=concat items(letters[idx], "");
만세! 마법! 
Re: 무작위 문자열 생성Names Default To Here( 1 );
randomString = Function( { length }, { letters },
letters = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
Return( letters[J( length, 1, Random Integer( 1, length ) ) ] );
);
Show( randomString( 10 ) );Re: 무작위 문자열 생성기반으로 @Mark_Bailey 그리고 @peng_liu 기여, 이것은 잘 작동하는 것 같습니다
Names Default To Here( 1 );
randomString = Function( { length }, { letters },
letters = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
Return( substitute(concat items(letters[J( length, 1, Random Integer( 1, length ) ) ]), " ", "") );
);
Show( randomString( 10 ) );
문자 사이의 공백을 제거하려면 대체 명령을 사용해야 했습니다.
Re: 무작위 문자열 생성@샘가드너 "concat items"에는 두 번째 인수가 있는데, 이 인수를 직접 사용하고 더 효율적으로 대체를 피할 수 있습니다.
Re: 무작위 문자열 생성감사!다음은 훨씬 간단한 접근 방식입니다.
Names Default To Here( 1 );
randomString = Function( { length }, { letters },
letters = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
Return( concat items(letters[J( length, 1, Random Integer( 1, length ) ) ], "") );
);
Show( randomString( 10 ) );Re: 무작위 문자열 생성반복을 피하는 것이 목표라는 것을 알고 있지만 모든 문자가 포함된 긴 코드 줄이 나를 괴롭혔습니다. 다음은 ASCII 테이블을 사용하여 임의의 문자를 생성하는 방법입니다. J() 명령에는 숫자가 필요하므로 작동하지 않았습니다. 아마도 누군가가 루프를 사용하지 않고도 이 작업을 수행할 수 있습니다.
randstrlength = 100;
lstchars = {};
for each ({i}, 1::randstrlength,
lstchars[i]= hex to char (right(Hex(64+Random integer (26), "integer"),2));
);
randstr = concat items (lstchars, "");
Re: 무작위 문자열 생성@샘가드너 @Mark_Bailey 이것은 정말 중요한 주제입니다. 난수 벡터를 생성하는 것은 통계 계산에서 중요합니다.
JMP18 OSI에서 변경을 했으므로 기존 한 줄 예제는 다음과 같습니다.

이제 다음과 같이 됩니다.

Re: 무작위 문자열 생성J() 함수가 과소 평가되고 있다고 생각합니다. 행 방향 순서로 각 요소에 대한 세 번째 인수를 평가합니다. JSL에서 명시적으로 반복하지 않고도 할 수 있는 일이 너무 많습니다. 보다 광범위한 예제로 스크립팅 가이드를 개선해 주셔서 감사합니다.
Re: 무작위 문자열 생성안녕하세요 여러분,
추가할 두 가지 빠른 항목입니다.
1) 크고 긴 목록 할당이 마음에 들지 않으면(나도 좋아하지 않음) 문자 세트를 얻기 위해 다음을 수행할 수 있습니다.
charset = words("ABCDEFGHIJKLMNOPQRSTUVWXYZ", "");
나는 순전히 게으름 때문에 항상 이것을합니다. 여러 문자열이 필요한 경우 구분 기호만 사용하십시오.

2) 기술적으로 J는 실제로 루프를 수행합니다... 빠르게. 행렬을 반환하지만 루프 내에서 원하는 모든 작업을 수행할 수 있습니다. 아래에서는 루프를 통해 매번 Nixonian 거부가 인쇄되고 피보나치 수의 행렬이 반환됩니다. 인덱스인 i는 루프 외부에서 초기화되고 루프 내에서 증가합니다.
i = 1;
J( 10, 1,
print(evalinsert("For the ^i^^if(i < 4, words(\!"st,nd,rd\!",\!",\!")[i], \!"th\!")^ time, I'm not a loop!"));
round(1/sqrt(5)*((1+sqrt(5))/2)^i++)
);

Re: 무작위 문자열 생성예, 그리고 그것을 설명하기 위해 여기에 결과 J( 10, 3...)가 J( 10, 1, ... ) 대신 사용됩니다(참고: 전체 로그를 표시하지 않았습니다... 인쇄의 처음 20줄은 표시되지 않습니다. 또한 "21일", "22일" 등과 같은 문학적 남용은 무시하십시오.)

Re: 무작위 문자열 생성귀하의 예를 사용하도록 허락해 주셔서 감사합니다. @brady_brady ! 이제 제품에서 사용자와 공유됩니다. 설명과 예제를 업데이트했습니다. 당신은 읽을 흥미롭고 재미있는 예가 될 것입니다 
