Wie kann JSL Daten in einer Tabelle direkt in eine angegebene Binärdatei ändern?"Text.blk" ist eine in C: \ gespeicherte Binärdatei, mit der JSL die Daten in der Datentabelle schreiben, umschreiben und ersetzen kann.
Der folgende Code ist der VBA-Code von Excel, der die Daten der Excel-Spalte A bis C schreiben kann:\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 SubSkriptingBetreff: Wie kann JSL Daten in einer Tabelle direkt in eine angegebene Binärdatei ändern?text.BLK
Betreff: Wie kann JSL Daten in einer Tabelle direkt in eine angegebene Binärdatei ändern?Verwenden Sie loadTextFile mit der Option blob (der Dateityp wird ignoriert). Dann, je nachdem, was Sie tun möchten, eine der folgenden Möglichkeiten:
- Konvertieren Sie den Blob in Hex, manipulieren Sie den Hex (doppelt so viele Zeichen wie Binärbytes) und konvertieren Sie den Hex zurück in Blob
- Verwenden Sie blobPeek (), um den Blob zu segmentieren, und setzen Sie dann den Blob mit den eingespeisten Daten wieder zusammen
- Verwenden Sie blobToMatrix, um die Daten zu extrahieren, und matrixToBlob, um den Blob wieder zusammenzusetzen. Dies ist je nach Datei möglicherweise die leistungsstärkste, schnellste und entweder am einfachsten oder am schwierigsten zu verwendende. Die blobToMatrix-Funktion zerlegt den gesamten Blob (möglicherweise von 2 oben) in 1, 2, 4 oder 8-Byte-Blöcke in einer Matrix. Die Chunks können Big- oder Little-Endian-Ganzzahlen oder Floats sein. (Wenn die Daten eine Stereo-WAV-Datei wären, könnten Sie beispielsweise eine 2-Spalten-Matrix aus 16-Bit-Ganzzahl-Samples erstellen.)
Speichern Sie zum Schluss den Blob mit saveTextFile. Es wird keine Blob-Option benötigt, da Sie entweder einen Blob oder eine Textzeichenfolge zum Speichern angeben.
Betreff: Wie kann JSL Daten in einer Tabelle direkt in eine angegebene Binärdatei ändern?Danke Craige!
Können diese Vorgänge direkt mit JSL ausgeführt werden?
Ich habe mich gefragt, ob Sie die erste Methode als JSL schreiben könnten.
Vielen Dank Experten!
Betreff: Wie kann JSL Daten in einer Tabelle direkt in eine angegebene Binärdatei ändern?Ich habe versucht, es zu schreiben, aber die wichtigsten Punkte blieben unklar.
Vielen Dank!

Betreff: Wie kann JSL Daten in einer Tabelle direkt in eine angegebene Binärdatei ändern?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)));Betreff: Wie kann JSL Daten in einer Tabelle direkt in eine angegebene Binärdatei ändern?Danke Craige!
Ich habe Ihren JSL-Code gelernt, ich habe keine Spaltung.
Ich war so nachlässig, dass ich versehentlich die Datei "text.blk" hochgeladen habe. Es tut mir leid.
Der ursprüngliche Upload entsprach nicht den vier Daten in der Tabelle.
Meine Anforderung besteht darin, die 4 Datenpunkte der Tabelle als neue Datei als * .blk-Datei auszugeben. Die ursprüngliche BLK-Datei wurde vor der Ausgabe gelöscht.
Ich habe die spezifische VBA-Excel-Datei erneut hochgeladen, sie geöffnet und auf die Schaltfläche "BLK" geklickt, wodurch eine "1t" generiert wurde. BLK "-Datei im Pfad von" C: \ ".

Die Anforderung, wie JSL-Code geschrieben werden soll, kann diese Funktion von VBA erfüllen: Die vier Daten in der Tabelle werden direkt generiert und die VBA-generierte BLK-Datei ist genau gleich.
Vielen Dank!
Betreff: Wie kann JSL Daten in einer Tabelle direkt in eine angegebene Binärdatei ändern?Ich weiß nichts über BLK-Dateien und sehr wenig über VBA, aber es * könnte * der Fall sein, dass eine BLK-Datei wirklich einfach ist:
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]Wenn Sie in der vorherigen Datei 64 Ganzzahlen erwartet haben, ist das alles, was sie enthält. Ich habe keine Ahnung, in welcher Reihenfolge (Zeilenmajor? Spaltenmajor? Andere?) Die Werte sind.
Betreff: Wie kann JSL Daten in einer Tabelle direkt in eine angegebene Binärdatei ändern?Danke Craige!
Aha. Es ist die falsche Richtung.
Speichern Sie die Daten in der Tabelle als "1T.blk", anstatt "1T.blk" -Daten in die Tabelle zu schreiben.
Ich gebe "1T. BLK ", nur um die Dateiform anzuzeigen, in der die Daten in der Tabelle gespeichert werden.
Ich habe versucht, JSL zu schreiben:

Ich weiß jedoch immer noch nicht, wie ich die Daten in der Tabelle in Form eines Diagramms speichern soll. Der Name des gespeicherten Dateisuffixes ist nicht der Schlüssel.
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.Betreff: Wie kann JSL Daten in einer Tabelle direkt in eine angegebene Binärdatei ändern?Bitte laden Sie die Datei "1T.blk" erneut herunter.
Siehe seine Struktur und wie man die 4 Zeilen in der Tabelle in Form von "1T.blk" speichert.
Danke Craige!

Betreff: Wie kann JSL Daten in einer Tabelle direkt in eine angegebene Binärdatei ändern?Sie müssen immer noch 1.000.000 hinzufügen, wenn Sie dies benötigen, aber so etwas
dt = Open( "$desktop/1T.jmp" );
filename = Save Text File(
"$temp/deleteme.blk",
Matrix To Blob( dt:code << getvalues, "int", 4, "little" )
);
Jeder, der mitmacht:
- Die Funktionen LoadTextFile und SaveTextFile arbeiten normalerweise mit Zeichenfolgentextdaten und ändern möglicherweise die CRLF-Endungen, fügen UNICODE Byte Order Mark hinzu und können nicht mit dem ASCII NUL-Zeichen umgehen. Bei Verwendung mit dem BLOB-Typ von JMP wird die Datei jedoch nur mit den Binärdaten gelesen / geschrieben.
- BlobToMatrix und MatrixToBlob sind inverse Funktionen. Sie behandeln alle Array-Elemente oder alle Blob-Elemente als 1-, 2-, 4- oder 8-Byte-Blöcke. Sie können auch dafür sorgen, dass die Array-Elemente (bei denen es sich immer um 8-Byte-Zahlen mit doppelter Genauigkeit handelt) vorzeichenbehaftete oder vorzeichenlose Ganzzahlen oder Gleitkommazahlen im Blob sind. Und sie können mit Big-vs-Little-Endian-Darstellungen im Blob umgehen. Und BlobToMatrix hat ein zusätzliches Argument, um mehrere Spalten in der Matrix zu erstellen.
- Möglicherweise möchten Sie BlobPeek verwenden, um Abschnitte der Binärdaten zu verarbeiten, die keine einheitlichen Blockgrößen haben, sowie || Verketten Sie den Operator, um die Blobs wieder zusammenzufügen.