<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />JMP 스크립트에서 대량의 텍스트 데이터를 출력하고 싶습니다. 문자열 연결을 사용하여 출력을 구성한 다음 텍스트 파일 저장 명령을 사용하여 한 번에 모두 쓸 수 있습니다. 그러나 이는 매우 비효율적이며 문자열이 커질수록 실행 불가능해집니다.
JMP는 버퍼가 생성될 때 문자열 출력을 버퍼로 보낼 수 있는 파일 스트림을 지원합니까?
자세한 접근 방식에 감사드립니다. 비닝을 위한 목록 사용과 Append를 통한 텍스트 파일 저장 사용을 결합하면 파일 스트림에 대한 좋은 근사치를 얻을 수 있습니다. 이 접근 방식을 사용하면 bin 크기 및 주기적인 추가 작업을 수동으로 코딩해야 하지만 이를 구현하면 성능이 합리적입니다.
매우 긴 문자열 속도 저하를 해결하기 위한 또 다른 전략: 더 짧은 문자열 목록을 작성하고 ConcatItems( list )를 사용하여 이를 단일 문자열로 결합합니다.필요한 구분 기호를 지정하십시오. 항목 사이에 구분 기호를 추가할 필요가 없는 경우 ""가 될 수 있습니다. JMP 13 이전에는 수천 개의 항목이 있는 경우 목록을 신중하게 작성해야 할 수도 있습니다...참조 빠른 목록. 이 예에서는 역방향 빌드 방식을 보여줍니다.
목록 = {};
insert into(list, "line1", 1);
insert into(list, "line2", 1);
insert into(list, "line3", 1);
목록 = 역방향(목록);
ConcatItems( 목록, "\!n");
"라인1
2호선
3호선"
선택할 수 있는 경우 문자열을 10,000~100,000자 범위로 유지하세요.너무 짧으면 각각 고유한 오버헤드가 있는 엄청난 수의 목록 항목과 관련된 문제가 발생할 수 있습니다.너무 길면 연결 속도가 느린 문제가 계속 발생합니다(N^2 문제이므로 이러한 방식으로 문자열 길이를 관리하면 정말 돕다).
그러나 JSL 문자열은 2^31(2GB) 문자로 제한됩니다.나는 Jim의 추가 아이디어가 2GB 이상에서도 작동할 것이라고 생각합니다.각각의 저장+추가에는 열기/쓰기/닫기 오버헤드가 있으므로 파일에 상당히 큰 블록을 추가하는 것이 좋습니다.이 예에서는 디스크가 가득 찰 때까지 500,000,000개의 문자 블록을 쓰고 있습니다.
txt = 반복( "a", 5e8 );
텍스트 파일 저장( "$temp\deleteme.txt", txt, 모드( "교체" ) );
표시( 파일 크기( "$temp\deleteme.txt" ) );
( i = 1, i <= 20, i++,
텍스트 파일 저장( "$temp\deleteme.txt", txt, 모드( "append" ) );
표시( 파일 크기( "$temp\deleteme.txt" ) );
);
파일 크기("$temp\deleteme.txt") = 500000000;
파일 크기("$temp\deleteme.txt") = 1000000000;
파일 크기("$temp\deleteme.txt") = 1500000000;
파일 크기("$temp\deleteme.txt") = 2000000000;
파일 크기("$temp\deleteme.txt") = 2500000000;
파일 크기("$temp\deleteme.txt") = 3000000000;
파일 크기("$temp\deleteme.txt") = 3500000000;
파일 크기("$temp\deleteme.txt") = 4000000000;
파일 크기("$temp\deleteme.txt") = 4500000000;
파일 크기("$temp\deleteme.txt") = 5000000000;
파일 크기("$temp\deleteme.txt") = 5500000000;
쓸 수 없습니다.
디스크에 공간이 부족합니다.

내 제안은 텍스트 파일 저장에 "추가" 한정자를 사용하는 것입니다.

이를 통해 지속적으로 출력 파일을 채울 수 있습니다.