こんにちは皆さん、
添付されているものと同様のフラットな.txtファイルをエクスポートするプログラムがあります。 私は最初の列を取り、新しいものを作成してそれらの値を埋めるスクリプトを書きたいと思います。 私はこのサイトで見つけたJSLの実装に失敗しました。
JSLスクリプトだけを使用して、"Example Before"の "Column 1"を3つの新しい列に分割し、その列にインスタンスにラベルを付けてから、次の有効な値まで入力します。 「後の例」に見られるように。
前の例

以下の例

質問:あなたのテキストの入れ子構造はXMLを彷彿とさせます。これは元のテキストですか、それともタグを削除するなどの編集後のバージョンですか。
これは私がすぐに作ったもので、一緒に作業するフラットファイルを模倣したものです。 .txtファイルをエクスポートするソフトウェア(HAScientific、SLIM)には耳を傾けていません。 だから私は実際にデータがネイティブに構造化されている方法がわからない。 私はそのSQLベースだと思います、私はただその城への鍵を持っていません。 これはいらだたしいですが、私が思い付いた回避策はテキストファイルを読み込んできれいにするJSLスクリプトです。
@danielrbiber 添付のスクリプトは、ネストされたXMLのような構造を念頭に置いて記述されています。変更されるまで同じ値を保持し、新しい行を作成して、時点が変更されたときに結果を書き込む これはあなたのファイルのすべてのインスタンスを処理するわけではないかもしれませんが、この例のテキストファイルに対してあなたが望むことをするでしょう。
実行するテキストファイルのパスを変更する必要があります。
Names Default to Here(1);
dt0 = Open(
"C:\Users\_xx\Downloads\Example Before.txt",
Table Contains Column Headers (1),
End of Line ( CRLF, CR, LF),
End of Field (comma, CSV(0)),
Column Names Start(1));
//create a new table
dt = New Table("Restruct",
New Column( "Column 1", Character),
New Column( "Meta Data", Character),
New Column( "Data", Numeric),
New Column( "Project", Character),
New Column( "Time Point", Character),
New Column( "Condition", Character) );
//Initialize values
md="";
dv=empty();
tp="";
pj="";
cd="";
crow = 0;
//new rows will be created for new time point
//this might not cover all files, but matches your sample text data.
for(i=1,i<=nrow(dt0),i++,
cval = dt0:Column 1[i];
If(cval =="", Continue());
if(starts with(cval,"PT"), pj=cval);
if(contains(cval,"/"), cd = cval);
if(contains(cval,"Initial") | contains(cval,"month"),
tp = cval;
if(trim(cval)=="Initial", cd = cval);
md = dt0:Meta Data[i];
dv = dt0:Data[i];
dt << add rows(1, At End);
crow++;
dt:Column 1[crow] = cval;
dt:Meta Data[crow] = md;
dt:Data[crow] = dv;
dt:Time Point[crow] = tp;
dt:Project[crow] = pj;
dt:Condition[crow] = cd;
); // end if
); // end for
これは私が問題を解決することを考えていたのとはかなり異なる方法です。 少し手を加えるだけでうまくいくと思います。 助けてくれてありがとう。