Re: 複数の CSV ファイルをインポートしますが、一部のタイトル形式エラーは JSL で修正する必要があります.csv ファイルの例を 1 つ(または、異なる種類がある場合はいくつか)提供できれば、これがより簡単になります。 そうでない場合は、「壊れた」データ テーブルを 1 つ提供していただけますか?
Re: 複数の CSV ファイルをインポートしますが、一部のタイトル形式エラーは JSL で修正する必要があります参考のためにサンプルテーブルを添付しました
複数の CSV ファイルをインポートしますが、一部のタイトル形式エラーは JSL で修正する必要があります複数の CSV ファイルをインポートしようとしていますが、元のデータ列名の形式にタイトルとデータが一致しないという 2 つの問題があるため、「複数ファイルのインポート」機能がうまく機能しません。
1. データ列名は次のようになります: 日付時刻名 ( ABC ) (DEF ) 身長 体重 ......etc
2. 私が必要とするディリムはスペースと ( と ) です
3. ただし、「日付」の前に追加のスペースまたはタブがあるため、最初の列名は日付ではなく列 1 になり、データと比較してタイトルが 1 列右にシフトされます。
4. 2 番目のエラーは (D、この 2 つのタイトルの間にはスペースがないため、1 つのタイトルとして扱われますが、データは (と D の間にスペースがあるため 2 つの列に分かれているため、タイトルは左にシフトされます) です。 1 つの列をデータと比較する
5. 最初のエラーは常に最初の列名「Date」の前に存在しますが、2 番目のエラー「(D」はソース ツールに基づいて異なる順序で表示される場合があります。
すべてのタイトルと列を自動的に照合できるように JSL を作成したいのですが、これを行う方法がわかりません。
最初のステップは、Get Column Names() を使用して名前を解析することだと思いますが、parse() と word() は機能しないようです。
私はここで行き詰まっています。コーディングが本当に苦手です。事前にご協力いただきありがとうございます

自動化とスクリプト作成Re: 複数の CSV ファイルをインポートしますが、一部のタイトル形式エラーは JSL で修正する必要があります2 行の例に基づくと、.csv ファイルをクリーンアップして (() を削除し、空白を折りたたむ)、次に Open with Char to Blob() を使用して、その「固定」文字列をデータ テーブルに変換することになるでしょう。
Names Default To Here(1);
str = Load Text File("$DOWNLOADS/sample CSV.csv");
lines = Words(str, "\!N");
data = Transform Each({line}, lines,
str = Collapse Whitespace(Substitute(line, {"(", ")"}, ""))
);
str = Concat Items(data, "\!N");
dt = Open(Char To Blob(str),
Import Settings(
End Of Line(CRLF, CR, LF),
End Of Field(Spaces, Space, CSV(0)),
Strip Quotes(1),
Use Apostrophe as Quotation Mark(0),
Use Regional Settings(0),
Scan Whole File(1),
Treat empty columns as numeric(0),
CompressNumericColumns(0),
CompressCharacterColumns(0),
CompressAllowListCheck(0),
Labels(1),
Column Names Start(1),
First Named Column(1),
Data Starts(2),
Lines To Read("All"),
Year Rule("20xx")
)
);Re: 複数の CSV ファイルをインポートしますが、一部のタイトル形式エラーは JSL で修正する必要があります@jthi
あなたの解決策は素晴らしいです!
一つの質問。各行から括弧を削除する行を指定します。
str = Collapse Whitespace(Substitute(line, {"(", ")"}, ""))
すべての「(」を「)」に置き換えてから、すべての「)」を「」に置き換えます。
私の昔ながらのアプローチは次のとおりです。
str = Collapse Whitespace(Substitute(line, "(", "", ")", ""))
ここで、「(」は「」に置き換えられ、次に「)」は「」に置き換えられます。
あなたの構文には利点があるのでしょうか、それとも単に個人的な選択なのでしょうか?
Re: 複数の CSV ファイルをインポートしますが、一部のタイトル形式エラーは JSL で修正する必要がありますそれは単なる私の個人的な選択です。 通常、複数のものを同じものに置き換えたい場合は、置き換える値のリストを Substitute に提供してから、その値を 1 回指定します。 それらを別のものに置き換えたい場合は、あなたが示したアプローチを使用します。または、動的に構築する必要がある場合/構成ファイルがある場合は、2つのリストを使用します
Names Default To Here(1);
str = "AA BB CC DD";
a = Substitute(str, {"AA", "BB"}, "11"); // a = "11 11 CC DD";
b = Substitute(str, "AA", "11", "BB", "22"); // b = "11 22 CC DD";
subs = ["AA" => "33", "BB" => "44"];
c = Substitute(str, subs << get keys, subs << Get Values); // c = "33 44 CC DD";
show(a, b, c);Re: 複数の CSV ファイルをインポートしますが、一部のタイトル形式エラーは JSL で修正する必要がありますサポートしていただきありがとうございます。この方法は単一ファイルに適しています。
しかし、まだ質問が 1 つ残っています。1 つの JMP ファイルとしてインポートする必要がある同じ形式のファイルがたくさんあります。
したがって、この方法では、それらを1つずつ開いてから1つのファイルに連結する必要があるようです
これが、私の当初の考えが次のような理由です。
1. 複数のインポート機能を使用する
2. 列名を取得する
3. 次に、列名の再コード化関数を使用して各列名を変更します。
Re: 複数の CSV ファイルをインポートしますが、一部のタイトル形式エラーは JSL で修正する必要があります以下を実行できなかった特別な理由はありますか?
- 興味のあるファイルのリストを取得する
- For Each を使用してループします。
- ループ内でファイルを解析し、最初に開いたテーブルにそれらを連結します。
列を修正することもできますが、例に基づくと、値をインポートした後に列名をいじったり値をシフトしたりするよりも、csv ファイルを修正する方がはるかに簡単です。
Re: 複数の CSV ファイルをインポートしますが、一部のタイトル形式エラーは JSL で修正する必要がありますファイルを生成するプログラムを修正することも良い選択肢になる可能性があります。 これは標準の CSV ではなく、他のプログラムでも正しく解析できないと思います。
Re: 複数の CSV ファイルをインポートしますが、一部のタイトル形式エラーは JSL で修正する必要がありますデータテーブルを連結するそれを行うための1つの方法を示します
Re: 複数の CSV ファイルをインポートしますが、一部のタイトル形式エラーは JSL で修正する必要がありますfor ループを使用してファイルをループしようとしましたが、機能しません。ファイルを連結しようとしたときに問題が発生したようです
Names Default To Here(1);
dir = Pick Directory("Select a directory");
filelist = Files In Directory(dir);
strings = {};
For(i = 1, i <= N Items(filelist), i++,
file = dir || Eval(Parse(filelist[i]));
str = Load Text File(file);
lines = Words(str, "\!N");
data = Transform Each({line}, lines,
str = Collapse Whitespace(Substitute(line, {"(", ")"}, ""))
);
str = Concat Items(data, "\!N");
strings = strings || str;
);
dt = Open(
Char To Blob(str),
Import Settings(
End Of Line(CRLF, CR, LF),
End Of Field(Spaces, Space, CSV(0)),
Strip Quotes(1),
Use Apostrophe as Quotation Mark(0),
Use Regional Settings(0),
Scan Whole File(1),
Treat empty columns as numeric(0),
CompressNumericColumns(0),
CompressCharacterColumns(0),
CompressAllowListCheck(0),
Labels(1),
Column Names Start(2),
First Named Column(1),
Data Starts(3),
Lines To Read("All"),
Year Rule("20xx")
)
);
Re: 複数の CSV ファイルをインポートしますが、一部のタイトル形式エラーは JSL で修正する必要があります何度か試した後、以下のコードはループを通じて複数の CSV を正常にインポートし、形式は正しいです。
しかし、まだ2つの問題が残っています。
1. 2 番目のファイルから開始します。ヘッダーは列タイトルとして除外されず、テーブル内のデータとして扱われます。ヘッダーは 2 行あり、最初の行はファイル名、2 行目はスペースで区切られたタイトルです。
2. さまざまなファイルを分析できるようにファイル名列を追加したいのですが、これは複数ファイルのインポート機能とは異なり、簡単に実現できませんか?
名前のデフォルトは Here( 1 );
dir = Pick Directory( "ディレクトリを選択" );
filelist = ディレクトリ内のファイル( dir );
マイリスト = {};
For( i = 1, i <= N Items( filelist ), i++,
ファイル = ディレクトリ || "/" ||ファイルリスト[i];
str = テキスト ファイルをロード( file );
行 = Words(str, "\!N");
data = Transform Each({line}, 行,
line = Collapse Whitespace(Substitute(line, {"(", ")"}, ""))
);
modifiedstr = Concat Items(data, "\!N");
mylist[i] = 変更された文字列;
);
dt = オープン(
Char To Blob( Concat Items( mylist, "\!N" ) )、
インポート設定(
行末(CRLF、CR、LF)、
フィールドの終わり(スペース、スペース、CSV( 0 ) )、
引用符を削除( 1 )、
アポストロフィを引用符 ( 0 ) として使用します。
地域設定を使用(0)、
空の列を数値 ( 0 ) として扱います。
数値列を圧縮( 0 )、
文字列を圧縮( 0 )、
圧縮許可リストのチェック ( 0 )、
ラベル( 1 )、
列名 Start( 2 )、
最初の名前の列( 1 )、
データ開始( 3 )、
読み取る行( "すべて" )、
年規則( "20xx" )
)
);
Re: 複数の CSV ファイルをインポートしますが、一部のタイトル形式エラーは JSL で修正する必要があります1 つの巨大な文字列を作成するのではなく、データ テーブルを 1 つずつ作成し、それらを連結していきます。 また、JSL スクリプトを投稿する場合は、「JSL スクリプトの挿入」を使用してください。
はるかに読みやすくなるからです。
</CODE></PRE>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="jthi_2-1703167262034.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/60013iEF81464ED8426C0C/jthi_2-1703167262034.png" role="button" title="jthi_2-1703167262034.png" alt="jthi_2-1703167262034.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-711549" slang="en-US" mode="NONE">Re: 複数の CSV ファイルをインポートしますが、一部のタイトル形式エラーは JSL で修正する必要があります</LINGO-SUB><LINGO-BODY id="lingo-body-711549" slang="en-US" mode="NONE"><P><A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/14366" target="_blank">@jthi</A>これは正しいですが、文字列を連結し続けたい場合は、いくつかの変更が必要になります。<STRONG>連結が 2GB 文字を超える場合、これは JMP が処理できる最長の文字列であるため、これは失敗します。</STRONG></P>
<P>アイデア:</P>
<PRE><CODE class=" language-jsl">
For( i = 1, i <= N Items( filelist ), i++,
file = dir || "/" || filelist[i];
str = Load Text File( file );
lines = Words(str, "\!N");
header1 = RemoveFrom(lines, 1); // remove the first line, two times.
header2 = RemoveFrom(lines, 1); // (removes both header lines.)
data = Transform Each({line}, lines,
// prepend the file name to each data line
filelist[i] || " " || Collapse Whitespace(Substitute(line, {"(", ")"}, ""));
);
modifiedstr = Concat Items(data, "\!N");
mylist[i] = modifiedstr;
);
header2 = "filename" || header2; // add the column name "filename"
insertInto(mylist,header2,1); // check the order of the arguments, the goal
insertInto(mylist,header1,1); // is to push these onto the front of the list
// now do the import...Names Default To Here(1);
dir = "$DOWNLOADS/New Folder (7)";
filelist = Files In Directory(dir);
mylist = {};
dt_collector = Empty();
For(i = 1, i <= N Items(filelist), i++,
file = dir || "/" || filelist[i];
str = Load Text File(file);
lines = Words(str, "\!N");
data = Transform Each({line}, lines,
line = Collapse Whitespace(Substitute(line, {"(", ")"}, ""))
);
modifiedstr = Concat Items(data, "\!N");
dt = Open(
Char To Blob(modifiedstr),
Import Settings(
End Of Line(CRLF, CR, LF),
End Of Field(Spaces, Space, CSV(0)),
Strip Quotes(1),
Use Apostrophe as Quotation Mark(0),
Use Regional Settings(0),
Treat empty columns as numeric(0),
Compress Numeric Columns(0),
Compress Character Columns(0),
Compress Allow List Check(0),
Labels(1),
Column Names Start(1),
First Named Column(1),
Data Starts(2),
Lines To Read("All"),
Year Rule("20xx")
),
invisible
);
dt << Set Name(filelist[i]);
dt << New Column("Source", Character, Nominal, << Set Each Value((dt << get name)));
If(!Is Empty(dt_collector),
dt_collector << Concatenate(
dt,
Append to first table
);
Close(dt, no save);
,
dt_collector = dt;
);
);
未テストですが、ほぼ正しいです。 InsertInto() と RemoveFrom() を調べます。現在 JMP を開いていません。 アイデアは、毎回最初の 2 行を削除 (およびキャプチャ) し、すべてがキャプチャされてスタックされた後、最初の 2 行を先頭に置き、追加の列名を追加することです。 そしてその中に、各行にファイル名を付け加えます。
Re: 複数の CSV ファイルをインポートしますが、一部のタイトル形式エラーは JSL で修正する必要がありますサポートしていただきありがとうございます。この JSL プロジェクトでは本当に多くのことを学びました。