JSL은 테이블의 데이터를 지정된 이진 파일로 직접 수정하는 방법은 무엇입니까?"Text.blk"는 C : \에 저장된 바이너리 파일로, JSL이 데이터 테이블의 데이터를 쓰고, 다시 쓰고, 바꿀 수있는 방법입니다.
다음 코드는 엑셀 A 열의 데이터를 C에 쓸 수있는 엑셀의 VBA 코드입니다.:\text.blk.

Sub text()
Dim arr, I, filename As String, t As Long
filename = "c:\text.BLK"
Open filename For Binary As #1: arr = Range("a2:a" & Cells(Rows.Count, "a").End(3).Row)
For r = 1 To UBound(arr)
If Left(arr(r, 1), 2) = "12" Then arr(r, 1) = 1000000 + arr(r, 1)
Next
For I = 1 To UBound(arr, 1)
If IsNumeric(arr(I, 1)) Then Put #1, , CLng(arr(I, 1))
Next
Close #1
End Sub스크립팅Re : JSL은 테이블의 데이터를 지정된 바이너리 파일로 직접 수정할 수 있습니까?text.BLK
Re : JSL은 테이블의 데이터를 지정된 바이너리 파일로 직접 수정할 수 있습니까?blob 옵션과 함께 loadTextFile을 사용합니다 (파일 형식 무시). 그런 다음 수행하려는 작업에 따라 다음 중 하나를 수행합니다.
- blob을 16 진수로 변환하고, 16 진수를 조작하고 (이진 바이트의 두 배의 문자), 16 진수를 다시 blob으로 변환
- blobPeek ()를 사용하여 blob을 분할 한 다음 데이터가 주입 된 blob을 다시 어셈블합니다.
- blobToMatrix를 사용하여 데이터를 추출하고 matrixToBlob을 사용하여 blob을 재 조립합니다. 이것은 아마도 파일에 따라 가장 강력하고 빠르며 사용하기 가장 쉬울 수도, 가장 어려울 수도 있습니다. blobToMatrix 함수는 전체 blob (위의 2 일 수 있음)을 매트릭스에서 1, 2, 4 또는 8 바이트 청크로 분해합니다. 청크는 빅 엔디안 또는 리틀 엔디안 정수 또는 실수 일 수 있습니다. (데이터가 스테레오 wav 파일 인 경우 예를 들어 16 비트 정수 샘플로 구성된 2 열 행렬을 만들 수 있습니다.)
마지막으로 saveTextFile을 사용하여 blob을 저장합니다. 저장할 blob 또는 텍스트 문자열을 제공하므로 blob 옵션이 필요하지 않습니다.
Re : JSL은 테이블의 데이터를 지정된 바이너리 파일로 직접 수정할 수 있습니까?Craige 감사합니다!
JSL을 사용하여 이러한 작업을 직접 수행 할 수 있습니까?
첫 번째 방법을 JSL로 작성할 수 있는지 궁금합니다.
전문가 감사합니다!
Re : JSL은 테이블의 데이터를 지정된 바이너리 파일로 직접 수정할 수 있습니까?글을 쓰려고했지만 요점이 불분명했습니다.
감사!

Re : JSL은 테이블의 데이터를 지정된 바이너리 파일로 직접 수정할 수 있습니까?b = loadTextFile("z:/text.blk",blob()); // load your file
hex = hex(b); // operate on hex data
show(hex); // the binary data is now character data
last4hex = right(hex,8); // two hex characters per byte
last4blob = blobpeek(b,length(b)-4,4); // operate on blob data
show(hex(last4blob)); // same data as above
mat = blobtomatrix(b,"int",4,"big"); // operate on matrix data
show(mat[nrows(mat)],hextonumber(last4hex),blobtomatrix(last4blob,"int",4,"big")); // all the same
// change the hex data (1-based offset to substr function, doubled. this is why programmers count from 0.)
show(substr(hex,5,4)); // the 3rd and 4th bytes, "1100". lets change them to "FE23"
hex = substr(hex,1,4) || "FE23" || substr(hex,9);
show(hex);
f1=savetextfile("$temp/text1.blk", hextoblob(hex)); // convert hex to blob before saving
// do the same with a blob (0-based offset to blobpeek function)
f2=savetextfile("$temp/text2.blk",blobpeek(b,0,2)||hextoblob("FE23")||blobpeek(b,4));
// do the same with a matrix. the matrix above is 4-bytes/element, lets use 1 instead
mat = blobtomatrix(b,"int",1,"big");
mat[3]=hextonumber("FE"); // 1-based matrix index
mat[4]=hextonumber("23");
f3=savetextfile("$temp/text3.blk",matrixtoblob(mat,"int",1,"big"));
// check our work:
b1=loadtextfile(f1,blob());
b2=loadtextfile(f2,blob());
b3=loadtextfile(f3,blob());
if(b1==b2==b3, write("\!nmatch, as expected"), write("\!nERROR"));
// this shows the changed data
show(shortesteditscript(hex(b),hex(b1)));Re : JSL은 테이블의 데이터를 지정된 바이너리 파일로 직접 수정할 수 있습니까?Craige 감사합니다!
나는 당신의 JSL 코드를 배웠고 분열이 없습니다.
너무 부주의해서 실수로 "text.blk"파일을 올렸어요. 죄송합니다.
원래 업로드는 표의 4 개 데이터와 일치하지 않습니다.
내 요구 사항은 테이블의 4 개 데이터 포인트를 * .blk 파일로 새 파일로 출력하는 것입니다. 원본 BLK 파일은 출력 전에 삭제되었습니다.
특정 VBA Excel 파일을 다시 업로드하고 열고 "BLK"버튼을 클릭하면 "1t. "C : \"경로에 BLK "파일이 있습니다.

JSL 코드 작성 방법 요청은 VBA의이 기능을 달성 할 수 있습니다. 테이블에있는 4 개의 데이터가 직접 생성되고 VBA가 생성 한 BLK 파일은 정확히 동일합니다.
감사!
Re : JSL은 테이블의 데이터를 지정된 바이너리 파일로 직접 수정할 수 있습니까?BLK 파일에 대해서는 아무것도 모르고 VBA에 대해서는 거의 알지 못하지만 BLK 파일이 정말 간단 할 수도 있습니다.
b = loadTextFile("z:/text.blk",blob()); // load your file
mat = blobtomatrix(b,"int",4,"little"); // operate on matrix data
/*:
[1123029, 1113555, 1110044, 1113038, 1113581, 1128108, 1110073, 1113509, 1113521,
1113037, 1113576, 1113586, 1113580, 1113035, 1113027, 1113592, 1113599, 1110059,
1113556, 1113565, 1113595, 1113543, 1113600, 1113520, 1113575, 1110072, 1113571,
1110067, 1113029, 1113582, 1113601, 1113011, 1110058, 1113034, 1113561, 1113593,
1113550, 1113008, 1110066, 1113548, 1113583, 1113039, 1113562, 1113537, 1113577,
1113527, 1113587, 1113541, 1113596, 1110053, 1113578, 1113526, 1113566, 1113591,
1113585, 1113589, 1110074, 1113572, 1110060, 1113590, 1113568, 1113021, 113555,
113038]이전 파일에서 64 개의 정수를 예상했다면 그게 전부입니다. 값이 어떤 순서 (행 전공? 열 전공? 기타?)에 있는지 모르겠습니다.
Re : JSL은 테이블의 데이터를 지정된 바이너리 파일로 직접 수정할 수 있습니까?Craige 감사합니다!
내가 참조. 잘못된 방향입니다.
"1T.blk"데이터를 테이블에 쓰는 대신 테이블의 데이터를 "1T.blk"로 저장하십시오.
나는 "1T. BLK ", 테이블의 데이터가 저장 될 파일 형식을 나타냅니다.
JSL 작성을 시도했습니다.

그래도 테이블에 데이터를 그래프 형태로 저장하는 방법을 모르겠는데 저장된 파일 접미사 이름이 핵심이 아닙니다.
dt = Current Data Table();
dt << New Column( "new", formula( If( Left( Char( :code ), 2 ) == "12", 1000000 + :code, :code ) ) );
dt << run formulas;
Column( "new" ) << deleteFormula;
Wait( 0 );
mx = dt << GetAsMatrix( {2} );
mx << Save( "C:\1T.BLK" );//The saved file suffix name is not the key.Re : JSL은 테이블의 데이터를 지정된 바이너리 파일로 직접 수정할 수 있습니까?"1T.blk"파일을 다시 다운로드하십시오.
그 구조와 "1T.blk"형식으로 테이블에 4 개의 행을 저장하는 방법을 참조하십시오.
Craige 감사합니다!

Re : JSL은 테이블의 데이터를 지정된 바이너리 파일로 직접 수정할 수 있습니까?필요한 경우 1,000,000을 추가해야하지만 이와 같은
dt = Open( "$desktop/1T.jmp" );
filename = Save Text File(
"$temp/deleteme.blk",
Matrix To Blob( dt:code << getvalues, "int", 4, "little" )
);
팔로우하는 사람 :
- LoadTextFile 및 SaveTextFile 함수는 일반적으로 문자열 텍스트 데이터와 함께 작동하며 CRLF 끝을 변경하고 UNICODE Byte Order Mark를 추가하며 ASCII NUL 문자를 처리 할 수 없습니다. 그러나 JMP의 BLOB 유형과 함께 사용하면 바이너리 데이터만으로 파일을 읽고 쓸 수 있습니다.
- BlobToMatrix 및 MatrixToBlob은 역함수입니다. 모든 배열 요소 또는 모든 blob 요소를 1, 2, 4 또는 8 바이트 청크로 처리합니다. 또한 배열 요소 (항상 배정 밀도 8 바이트 숫자 임)를 blob의 부호있는 정수 또는 부호없는 정수 또는 부동 소수점 숫자로 만들 수 있습니다. 그리고 그들은 blob에서 빅 엔디안 표현과 리틀 엔디안 표현을 처리 할 수 있습니다. 그리고 BlobToMatrix에는 행렬에 여러 열을 만드는 추가 인수가 있습니다.
- BlobPeek를 사용하여 균일 한 청크 크기가 아닌 이진 데이터 섹션을 처리하고 || blob을 다시 결합하는 concatenate 연산자.