Crea hash MD5 per un fileVoglio creare un'utilità per creare hash MD5 per i file. Lo scopo è avere l'hash da usare in seguito per verificare l'integrità del file (che non sia stato alterato). Ecco lo script di base che ho ideato. È ragionevole e appropriato per il compito che voglio realizzare?
/*
JMP JSL script to open data file as BLOB and calculate MD5 Hash
*/
Names Default To Here( 1 );
// substitute in your directory path and filename as strings below
dirpath = "";
// filename
filename = "";
//load file as text file Blob, and calculate the hexadecimal MD5 Hash
Char To Hex( Blob To Char( Blob MD5( Load Text File( dirpath || filename, blob ) ) ) );
/*
End script
*/
sistema operativo macOSPersonalizzazione di massaFinestreRe: Creare hash MD5 per un filePenso di aver usato qualcosa di simile quando ho effettuato controlli di questo tipo (da allora ho semplicemente spostato tali file nel controllo di versione e lo uso per assicurarmi che vengano utilizzati i file corretti).
Per le tabelle JMP esiste anche il messaggio << Checksum() "interno"

Ho provato ad usarlo nella mia classe "Anteprima tabella dati" e sembra funzionare bene. Non sono sicuro di quanto sarà robusto a causa del "solo uso interno".
Re: Creare hash MD5 per un filegrazie @jthi , quel messaggio della tabella dati è una novità nella v18, a quanto pare, e funzionerebbe per le tabelle dati JMP. La mia esigenza è più generica, funzionerebbe per qualsiasi tipo di file (.JMP, .JMPADDIN, .JMPXXXXX, .DOCX, .XLSX, .TXT, ...)
Re: Creare hash MD5 per un fileSe @Craige_Hales ha dato il suo kudo, devo essere sulla strada giusta!
Re: Creare hash MD5 per un fileOppure puoi usare l'hashlib di Python
import jmp
import sys, os, hashlib
from pathlib import Path
# Function to open a file and compute it's checksum
def file_cksum(a_filename):
digest = hashlib.md5()
try:
f = open(a_filename, 'rb') # open in binary mode
while True:
t = f.read(8192)
if len(t) == 0: break; # end of file
digest.update(t)
except:
print('file_cksum: Unexpected error: ', sys.exc_info()[0])
else:
f.close()
return digest.hexdigest()
jmp.run_jsl('''
local_path = Pick File("Chose File to checksum");
// Pick Directory on windows returns a leading / use Convert File Path()
If( Host is("Windows"),
local_path = Convert File Path( local_path, windows )
);
Python Send(local_path);
''')
print(local_path)
cksum = file_cksum(local_path)
print(f'MD5 {local_path}: {cksum}')
Utilizzando il JSL Pick File(), ho selezionato il codice sopra salvato in un file md5_file.py
dando i risultati:
/Users/_me_/Scripts/md5_file.py
MD5 /Utenti/_me_/Scripts/md5_file.py: d175790247060d7e415516794660216f