Ciao a tutti,
Sto cercando di scrivere uno script che accetta un input e lo crittografa con un codice. Per fare ciò, il testo di input deve essere in formato binario. Ho chiesto aiuto a ChatGPT e mi ha consigliato
if ( Matches Reg Expr(input, "^[01]+$"),
Show("Valid"),
Show("Not Valid"));Non funziona e sto cercando di capire perché. Sto anche cercando di trovare un modo per verificare se un numero è in binario, quindi qualsiasi aiuto sarebbe molto apprezzato
Persa una riga in alto:
CheckIfBinary = Function( {input},
{isbinary},
If( //If the string only contains 0 and 1 and is at least 1 character long
!Is Missing( Regex( input, "^[01]+$" ) )
, //then return 1
isbinary = 1
, //otherwise return 0
isbinary = 0
);
Return( isbinary );
);
CheckIfBinary( "123" );
CheckIfBinary( "10" );
Ho evitato il completamento automatico di ChatGPT fino ad ora. È interessante... ha comunque trovato la regex giusta.
@LatentHyena653 - La regex di JMP restituisce un valore mancante per "nessuna corrispondenza" e altrimenti il testo della corrispondenza. Il test dei valori mancanti deve essere eseguito con la funzione isMissing. La maggior parte degli altri linguaggi avrà dettagli diversi per l'utilizzo delle espressioni regolari, quindi non è troppo sorprendente.
Inoltre, JMP ha una funzione hex() che converte il testo in una stringa esadecimale:
hexData = hex("ABC");
binaryData = substitute(hexData,
"0","0000",
"1","0001",
"2","0010",
"3","0011",
"4","0100",
"5","0101",
"6","0110",
"7","0111",
"8","1000",
"9","1001",
"A","1010",
"B","1011",
"C","1100",
"D","1101",
"E","1110",
"F","1111",
"????"
);
show(hexData,binaryData);
// hexData = "414243";
// binaryData = "010000010100001001000011";
E, come mostrato, replace() può convertire la stringa esadecimale in una stringa binaria.
Infine, si noti che la stringa binaria di 1 e 0 è in realtà una rappresentazione in forma di stringa di caratteri di dati binari. JMP dispone anche di un tipo di dati blob se è necessario lavorare con dati binari effettivi. Ma è molto più semplice lavorare con gli 1 e gli 0 stampabili.
Questo dovrebbe funzionare:
If( //If the string only contains 0 and 1 and is at least 1 character long
!is missing(regex( input, "^[01]+$" ))
, //then return 1
isbinary= 1
, //otherwise return 0
isbinary=0
);
return(isbinary);
);
CheckIfBinary("123");
CheckIfBinary("10");