In che modo JSL può modificare i dati in una tabella direttamente in un file binario specificato?"Text.blk" è un file binario salvato in C:\, come JSL può scrivere, riscrivere e sostituire i dati nella tabella dati.
Il seguente codice è il codice VBA di Excel, che può scrivere i dati della colonna Excel da A a C:\ testo.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 SubAutomazione e scriptingRi: In che modo JSL può modificare i dati in una tabella direttamente in un file binario specificato?JMP è potente

Ri: In che modo JSL può modificare i dati in una tabella direttamente in un file binario specificato?Grazie Craig!
Questo funzionerà. Può essere fatto direttamente con JSL in futuro.
Ho provato: i dati specifici hanno ancora bisogno di +1000000.

Ri: In che modo JSL può modificare i dati in una tabella direttamente in un file binario specificato?Dovrai comunque aggiungere 1.000.000 se è quello che ti serve, ma qualcosa del genere
dt = Open( "$desktop/1T.jmp" );
filename = Save Text File(
"$temp/deleteme.blk",
Matrix To Blob( dt:code << getvalues, "int", 4, "little" )
);
Chi segue:
- le funzioni LoadTextFile e SaveTextFile funzionano normalmente con i dati di testo della stringa di caratteri e possono modificare le terminazioni CRLF, aggiungere UNICODE Byte Order Mark e non possono gestire il carattere ASCII NUL. Tuttavia, se utilizzato con il tipo BLOB di JMP, il file viene letto/scritto solo con i dati binari.
- BlobToMatrix e MatrixToBlob sono funzioni inverse. Trattano tutti gli elementi dell'array o tutti gli elementi del blob come blocchi di 1, 2, 4 o 8 byte. Possono anche fare in modo che gli elementi dell'array (che sono sempre numeri a 8 byte a doppia precisione) siano numeri interi con segno o senza segno o numeri in virgola mobile nel blob. E possono gestire rappresentazioni big- vs little-endian nel blob. E BlobToMatrix ha un argomento in più per creare più colonne nella matrice.
- Potresti voler utilizzare BlobPeek per gestire le sezioni dei dati binari che non sono dimensioni di blocchi uniformi e || operatore concatenate per unire nuovamente i BLOB.
Ri: In che modo JSL può modificare i dati in una tabella direttamente in un file binario specificato?Si prega di scaricare nuovamente il file "1T.blk",
vedere la sua struttura e come salvare le 4 righe nella tabella sotto forma di "1T.blk".
Grazie Craig!

Ri: In che modo JSL può modificare i dati in una tabella direttamente in un file binario specificato?Grazie Craig!
Vedo. È la direzione sbagliata.
Invece di scrivere i dati "1T.blk" nella tabella, salvare i dati nella tabella come "1T.blk".
Do "1T. BLK", proprio per indicare la forma del file in cui verranno salvati i dati della tabella.
Ho provato a scrivere JSL:

Ma ancora non so come salvare i dati nella tabella sotto forma di grafico. Il nome del suffisso del file salvato non è la chiave.
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.Ri: In che modo JSL può modificare i dati in una tabella direttamente in un file binario specificato?Non so nulla sui file BLK e molto poco su VBA, ma * potrebbe * essere il caso che un file BLK sia davvero semplice:
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]Se ti aspettavi 64 numeri interi nel file precedente, è tutto ciò che contiene. Non ho idea dell'ordine (riga principale? colonna principale? altro?) in cui si trovano i valori.
Ri: In che modo JSL può modificare i dati in una tabella direttamente in un file binario specificato?Grazie Craig!
Ho imparato il tuo codice JSL, non ho scollature.
Sono stato così sbadato che ho caricato per sbaglio il file "text.blk". Mi dispiace.
Il caricamento originale non corrispondeva ai quattro dati della tabella.
Il mio requisito è di emettere i 4 punti dati della tabella come un nuovo file come file *.blk. Il file BLK originale è stato eliminato prima dell'output.
Ho ricaricato il file Excel VBA specifico, l'ho aperto e ho fatto clic sul pulsante "BLK", che genererebbe un file "1t. BLK" nel percorso di "C:\".

La richiesta su come scrivere il codice JSL può ottenere questa funzione di VBA: i quattro dati nella tabella vengono generati direttamente e il file BLK generato da VBA è esattamente lo stesso.
Grazie!
Ri: In che modo JSL può modificare i dati in una tabella direttamente in un file binario specificato?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)));Ri: In che modo JSL può modificare i dati in una tabella direttamente in un file binario specificato?Ho provato a scriverlo, ma i punti chiave sono rimasti poco chiari.
Grazie!

Ri: In che modo JSL può modificare i dati in una tabella direttamente in un file binario specificato?Grazie Craig!
Queste operazioni possono essere eseguite direttamente utilizzando JSL?
Mi chiedevo se potessi scrivere il primo metodo come JSL.
Grazie Esperti!
Ri: In che modo JSL può modificare i dati in una tabella direttamente in un file binario specificato?Utilizzare loadTextFile con l'opzione blob (ignora il tipo di file). Quindi, a seconda di cosa vuoi fare, uno di questi:
- convertire il blob in esadecimale, manipolare l'esadecimale (il doppio dei caratteri rispetto ai byte binari), riconvertire l'esadecimale in blob
- usa blobPeek() per segmentare il blob, quindi riassembla il blob con i tuoi dati iniettati
- utilizzare blobToMatrix per estrarre i dati e matrixToBlob per riassemblare il blob. Questo è forse il più potente, il più veloce e il più facile o il più difficile da usare, a seconda del file. La funzione blobToMatrix scomporrà l'intero blob (che potrebbe essere da 2, sopra) in blocchi di 1, 2, 4 o 8 byte in una matrice; i pezzi possono essere numeri interi big o little-endian o float. (Se i dati erano un file wav stereo, ad esempio, potresti creare una matrice a 2 colonne di campioni interi a 16 bit.)
Infine, salva il blob con saveTextFile. Non ha bisogno di un'opzione blob perché gli dai un blob o una stringa di testo da salvare.
Ri: In che modo JSL può modificare i dati in una tabella direttamente in un file binario specificato?testo.BLK
codice
123029
128108
113555
113038