こんにちは、専門家の皆さん
構造化されていない文字列を含む列を複数の列に分割したいのですが、複雑なため作成できません。
改行で分割することを考えていますが、区切り文字でテキストから列に分割することはできません。別の方法としては、区切り文字で使用可能な任意の信号に改行を置き換えることです。1 つのオプションは、正規表現 (:Column 1、"^\R"、"#"、GLOBALREPLACE) を実行することですが、予期しない結果が表示されます。

これを実現するには、二重改行(またはJMPの\!N)を何かに置き換えます(私は¤を使用しました)。
Names Default To Here(1);
dt = Open("$DOWNLOADS/example3.jmp");
dt << New Column("Col2", Character, Nominal, Formula(
Substitute(:Column 1, "\!N\!N", "¤")
));

そして、列名については1つ(またはさらにいくつか)の追加手順が必要になります。
私も同様のアイデアを持っていました。substitute を使用して 2 つの改行を検索します。
列名を正しくするには、「:」を区切り文字として使用することもできますが、次のようになります。
- 「:」はエントリ内でも使用されます
- サンプルには「:」がありますが、その後の改行がありません。
そこで私は 2 つのアプローチを組み合わせました。
- 2回改行して検索
- 検索 ":"
ヘッダーを見つけます。
列名とエントリを分離するには、 Contiguous設定を使用して列を積み重ねることができます。
Col2 は一時的に使用されるだけなので、最後に削除するか、変換列として追加することができます。
変換列からテキストから列へを介して生成された列は、テーブルの最初の列になります。
これにより、列の選択とスタックが簡単になります。新しい列を数えて、インデックスで選択するだけです。
連続設定では、いくつかのダミー列が追加されますが、それらは最後のステップで削除されます。

dt = Open( "$DOWNLOADS/example3.jmp" );
tmpCol = dt << Transform Column ( "split",
Character,
Formula(
Substitute(
Regex(
Substitute( :Column 1, "\!r\!n", "#", "Sample:", "Sample^\!n" ),
"#{2,}(.*?):",
"^\1^",
GLOBALREPLACE
),
"#", "\!r"
)
)
);
before = NItems(dt << get column names());
dt << Text to Columns(
columns (tmpCol),
Delimiters( "^" )
);
newCols = NItems(dt << get column names()) - before;
result = dt << Stack(
columns(
Eval(1::newCols)
),
Number of Series( Eval(newCols/2) ),
Contiguous,
Drop All Other Columns( 1 )
);
// Move column names up
result << Move up;
cols= result << get column names();
cols = Filter each({col}, cols, Contains(col << get name, "split"))
result << Delete Columns(cols);見た目は良く滑らかではありません...
プラン B: エントリを計算するためのチューリング マシンをセットアップします。
@jthi さん、ありがとうございます! 新しい数式列の作成では、新しく作成された列への参照が返されます。
JMP18以降、新しい数式列は新しく生成された列のリストを返します。
Text to Columns は、生成された列への参照を含むリストも返すことができます。
これが願いです: テキストによって作成された列のリストを列に保存する
ご注意ください:
連想配列と削除操作による回避策はここでは機能しません。10 <2 で「アルファベット順」に並べ替えて列をシャッフルするため、スタック操作が台無しになります。
正規表現は好きだけど、JSL がほとんど理解できないという場合は、列を再コード化して、文字列の置換 (赤い三角形の「文字列の置換...」を参照) を行い、変わった文字 (よく使うのは「%」) に正規表現を置換してから、その文字で列を分割 (Cols -> Text to columns) します。
次に、alt-ctrl-shift-r を「再コード化」に、alt-ctrl-shift-s を「テキストを列に」にバインドすると、JMP のスーパーヒーローのようになり、これらすべてを実行するのに数回のキーストロークだけになります。
@BHarrisアドバイスありがとうございます。ところで、改行を奇妙な文字に置き換える正規表現を実行するにはどうすればいいですか?

正規表現では改行は「\n」です。したがって、「\n」(引用符なし)を検索し、「正規表現を使用する」をクリックして、「%」に置き換えます。