やあ、皆さん。
入力を受け取り、それを暗号で暗号化するスクリプトを作成しようとしています。 これを行うには、入力テキストがバイナリである必要があります。 ChatGPTに助けを求めたところ、次のように勧められました。
if ( Matches Reg Expr(input, "^[01]+$"),
Show("Valid"),
Show("Not Valid"));それはうまくいきません、そして私はその理由を理解しようとしています。 また、数値がバイナリであるかどうかを確認する方法を見つけようとしているので、助けていただければ幸いです
上部の行が失われています:
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" );
私は今までChatGPTのオートコンプリートを避けてきました。 興味深いですね...とにかく正しい正規表現が見つかりました。
@LatentHyena653 - JMP の正規表現は、「一致なし」の場合は欠損値を返し、それ以外の場合は一致のテキストを返します。 欠損値のテストは isMissing 関数を使用して実行する必要があります。 他のほとんどの言語では正規表現の使用に関する詳細が異なるため、それほど驚くべきことではありません。
また、JMP には、テキストを 16 進文字列に変換する hex() 関数があります。
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";
また、示されているように、substitute() は 16 進文字列をバイナリ文字列に変換できます。
最後に、1 と 0 のバイナリ文字列は、実際にはバイナリ データの文字列表現であることに注意してください。 実際のバイナリ データを操作する必要がある場合、JMP には BLOB データ型もあります。 ただし、印刷可能な 1 と 0 を使用する方がはるかに簡単です。
これは機能するはずです:
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");