Wie kann JSL Daten in einer Tabelle direkt in eine bestimmte Binärdatei ändern?„Text.blk“ ist eine in C:\ gespeicherte Binärdatei, mit der JSL die Daten in der Datentabelle schreiben, neu schreiben und ersetzen kann.
Der folgende Code ist der VBA-Code von Excel, der die Daten der Excel-Spalte A nach 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 SubAutomatisierung und SkripterstellungBetreff: Wie kann JSL Daten in einer Tabelle direkt in eine bestimmte Binärdatei ändern?JMP ist leistungsstark

Betreff: Wie kann JSL Daten in einer Tabelle direkt in eine bestimmte Binärdatei ändern?Danke, Craige!
Das reicht. Dies kann in Zukunft direkt mit JSL erfolgen.
Ich habe es versucht: Die spezifischen Daten benötigen immer noch +1000000.

Betreff: Wie kann JSL Daten in einer Tabelle direkt in eine bestimmte Binärdatei ändern?Sie müssen immer noch 1.000.000 hinzufügen, wenn Sie das benötigen, aber in etwa so
dt = Open( "$desktop/1T.jmp" );
filename = Save Text File(
"$temp/deleteme.blk",
Matrix To Blob( dt:code << getvalues, "int", 4, "little" )
);
Wer mitmacht:
- Die Funktionen LoadTextFile und SaveTextFile funktionieren normalerweise mit Zeichenfolgentextdaten und ändern möglicherweise die CRLF-Endungen, fügen eine UNICODE-Bytereihenfolgemarkierung hinzu und können das ASCII-NUL-Zeichen nicht verarbeiten. Bei Verwendung mit dem BLOB-Typ von JMP wird die Datei jedoch nur mit den Binärdaten gelesen/geschrieben.
- BlobToMatrix und MatrixToBlob sind Umkehrfunktionen. Sie behandeln alle Array-Elemente oder alle Blob-Elemente als 1-, 2-, 4- oder 8-Byte-Blöcke. Sie können auch festlegen, 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 Big- und Little-Endian-Darstellungen im Blob verarbeiten. Und BlobToMatrix verfügt über 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 einheitliche Blockgröße haben, und die || Verkettungsoperator, um Blobs wieder zusammenzufügen.
Betreff: Wie kann JSL Daten in einer Tabelle direkt in eine bestimmte Binärdatei ändern?Bitte laden Sie die Datei „1T.blk“ erneut herunter,
Sehen Sie sich die Struktur an und erfahren Sie, wie Sie die 4 Zeilen in der Tabelle in der Form „1T.blk“ speichern.
Danke, Craige!

Betreff: Wie kann JSL Daten in einer Tabelle direkt in eine bestimmte Binärdatei ändern?Danke, Craige!
Ich verstehe. Es ist die falsche Richtung.
Anstatt „1T.blk“-Daten in die Tabelle zu schreiben, speichern Sie die Daten in der Tabelle als „1T.blk“.
Ich gebe „1T. BLK“, nur um die Dateiform anzugeben, in der die Daten in der Tabelle gespeichert werden.
Ich habe versucht, JSL zu schreiben:

Aber ich weiß immer noch nicht, wie ich die Daten in der Tabelle in Form des Diagramms speichern soll. Der Suffixname der gespeicherten Datei 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 bestimmte Binärdatei ändern?Ich weiß nichts über BLK-Dateien und sehr wenig über VBA, aber es *könnte* 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 früheren Datei 64 ganze Zahlen erwartet haben, sind das alles, was sie enthält. Ich habe keine Ahnung, in welcher Reihenfolge (Hauptzeile? Hauptspalte? Andere?) die Werte vorliegen.
Betreff: Wie kann JSL Daten in einer Tabelle direkt in eine bestimmte 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 ein „1t. BLK“-Datei im Pfad „C:\“.

Die Anfrage zum Schreiben von JSL-Code kann diese Funktion von VBA erreichen: Die vier Daten in der Tabelle werden direkt generiert und die von VBA generierte BLK-Datei ist genau gleich.
Danke!
Betreff: Wie kann JSL Daten in einer Tabelle direkt in eine bestimmte 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 bestimmte Binärdatei ändern?Ich habe versucht, es zu schreiben, aber die Kernpunkte blieben unklar.
Danke!

Betreff: Wie kann JSL Daten in einer Tabelle direkt in eine bestimmte Binärdatei ändern?Danke, Craige!
Können diese Vorgänge direkt mit JSL durchgeführt werden?
Ich habe mich gefragt, ob Sie die erste Methode als JSL schreiben könnten.
Danke Experten!
Betreff: Wie kann JSL Daten in einer Tabelle direkt in eine bestimmte Binärdatei ändern?Verwenden Sie „loadTextFile“ mit der Option „blob“ (der Dateityp wird ignoriert). Dann, je nachdem, was Sie tun möchten, eine dieser Aktionen:
- Konvertieren Sie den Blob in Hex, manipulieren Sie den Hex (doppelt so viele Zeichen wie Binärbytes), konvertieren Sie den Hex zurück in Blob
- Verwenden Sie blobPeek(), um den Blob zu segmentieren, und setzen Sie den Blob dann mit Ihren injizierten Daten wieder zusammen
- Verwenden Sie „blobToMatrix“, um die Daten zu extrahieren, und „matrixToBlob“, um den Blob wieder zusammenzusetzen. Dies ist möglicherweise die leistungsstärkste, schnellste und je nach Datei entweder am einfachsten oder am schwierigsten zu verwenden. Die Funktion „blobToMatrix“ zerlegt den gesamten Blob (der aus 2 oben stammen kann) in 1-, 2-, 4- oder 8-Byte-Blöcke in einer Matrix. Die Blöcke können Big- oder Little-Endian-Ganzzahlen oder Gleitkommazahlen sein. (Wenn es sich bei den Daten um eine Stereo-WAV-Datei handelte, könnten Sie beispielsweise eine zweispaltige Matrix aus 16-Bit-Integer-Samples erstellen.)
Speichern Sie abschließend den Blob mit saveTextFile. Es ist keine Blob-Option erforderlich, da Sie entweder einen Blob oder eine Textzeichenfolge zum Speichern angeben.
Betreff: Wie kann JSL Daten in einer Tabelle direkt in eine bestimmte Binärdatei ändern?text.BLK
Code
123029
128108
113555
113038