異なるフォルダから複数のCSVファイルをインポートし、値を更新し、異なる名前でCSVを保存しますメインデータフォルダの下に保存された異なる列名の約95個のcsvファイルと、\ data \ dataset1 \ dataset1.csv、\ data \ dataset2 \ dataset2.csvなどの95個の異なるサブフォルダがあります。id1列とid2列は共通の変数です。すべてのファイル。 私は次のことをしたい:
- 95個のcsvファイルをすべてJMPにインポートします(JMP Pro 16を使用)
- 95個のファイルすべての条件に基づいて値を更新します。if(id1 = 'a001' then id2 = 'b001')
- 更新されたcsvファイルをそれぞれのフォルダーに異なる名前で保存します
最初の行はファイルのタイトルであり、削除できません。 列/変数名は行2から始まり、データは行3から始まります。
私はなんとかすべてのファイルをインポートすることができました:
dt:複数ファイルのインポート(
<<フォルダを設定(
"C:\ Data \"
)、
<< Show Hidden(0)を設定します。
<<サブフォルダーの設定(1)、
<<名前フィルターの設定( "* .csv")、
<< Set Name Enable(1)、
<<サイズフィルターの設定({522、2096152})、
<< Set Size Enable(0)、
<<日付フィルターの設定({3715322235、3718948571})、
<< Set Date Enable(0)、
<< Set Add File Name Column(0)、
<< Set Add File Size Column(0)、
<< Set Add File Date Column(0)、
<<インポートモードの設定( "CSVData")、
<< Set Charset( "Best Guess")、
<<スタックモードの設定( "ファイルごとのテーブル")、
<< Set CSV Has Headers(1)、
<< CSV Allow Numeric(1)を設定し、
<< CSVの最初のヘッダー行を設定(2)、
<<ヘッダー行のCSV数を設定(1)、
<< CSVの最初のデータ行を設定(3)、
<< CSV EOFカンマ(1)を設定し、
<< CSV EOFタブを設定(0)、
<< CSV EOFスペースを設定(0)、
<< CSV EOFスペースを設定(0)、
<< CSV EOFその他を設定( "")、
<< CSV EOL CRLF(1)を設定します。
<< CSV EOL CR(1)を設定します。
<< CSV EOL LF(1)を設定します。
<< CSV EOLセミコロン(0)を設定します。
<< CSV EOLその他を設定( "")、
<< CSV見積もりを設定( "\!" ")、
<< CSVエスケープを設定( "")、
<< XMLメソッドを設定( "guess")、
<< XML Guess( "huge")を設定します。
<< XML設定の設定(XML設定())、
<< JSONメソッドを設定( "guess")、
<< JSON Guess( "huge")を設定します。
<< JSON設定の設定(JSON設定())、
<<インポートコールバックを設定(Empty())
)<<データのインポート;
このコードには、列名とデータがどこから始まるかについての式はありません。
次に、次を使用して値を更新しようとしました。
dt:subjid <<
:id1 <<式を設定(
If(:id2 == "a001"、:id1 == "b001")
);
その結果、id1列の「a001」より前の値は削除され、「a001」のid1値は更新されません。
私はこの段階で在庫があり、それぞれのフォルダに異なる名前でファイルを保存する次の段階を考えることさえできません。 どんな助け/ガイダンスも大歓迎です。
ありがとうございました
データ表ウィンドウズ再:異なるフォルダから複数のCSVファイルをインポートし、値を更新し、異なる名前でCSVを保存しますあなたのJSLが何をしたのかわかりません:
dt: subjid << :id1 << Set Formula( If( :id2 == "a001", :id1 == "b001") )
<< "send"演算子は一度だけ表示され、数式を追加する列は左側にある必要があります。 次に、ifステートメントに条件があり、その後に真の場合の値、偽の場合の値が続きます。 このようなもの
dt << New Column( "likes",
"character",
formula( If(
Is Missing( name ), // first test
"unknown", // if first test is true
name == "KATIE", // second test
"cats", // if second test is true
"dogs" // if second test is false
)
)
);
これは、列名の値に応じて、猫または犬の新しい数式列を作成することを目的としています。 名前が空白(欠落)の場合、「不明」。
または、他の列の値に基づいて既存の列を上書きすることが目標である場合は、数式列よりも明示的なループの方が適している可能性があります。
foreachrow(dt,
if(
name == "DANNY", // a test with ==
name = "Dani"; // an assignment with =
sex = "F";
, /* else if */ name == "ROBERT",
name = "Roberta";
sex = "F";
);
);
((秘密ならコンマとセミコロンを理解するのに役立つ場合があります。 )名前が一致しない限り、行は変更されません。
2つの例がどのように異なるかに注意してください。
最初の例では、数式の列に割り当てられるif(...)で回答を生成する必要があります。 その行の列を変更しない場合、数式の値はその行の元の値である必要があります。編集:申し訳ありませんが、それは間違っています。 数式列がすべての行の値を生成することを確認してください。
2番目の例では、選択した行と列のみを更新します。
(JMPファイルを保存せずに)CSVファイルを書き出す予定なので、列に追加した数式は保存されません(ただし、数式から更新された値は保存されます)。 2番目の例。
再:異なるフォルダから複数のCSVファイルをインポートし、値を更新し、異なる名前でCSVを保存しますクレイジありがとう。 あなたが言ったように、2番目の例はうまくいきました。 ただし、1つのcsvを開くかインポートした場合にのみ機能し、複数のCSVをインポートした場合は機能しませんでした。 また、異なるファイル名でそれぞれのフォルダにcsvを書き戻す最後の段階も実行するように案内していただけますか?
ありがとうございました、
ハラール
再:異なるフォルダから複数のCSVファイルをインポートし、値を更新し、異なる名前でCSVを保存しますおかげで、それは一般的に有用であるように思われ、それのいくつかは実際に行う方法が明らかではないので、それを投稿しました。
MFI更新CSV
再:異なるフォルダから複数のCSVファイルをインポートし、値を更新し、異なる名前でCSVを保存しますありがとうございました。 これは素晴らしいです。
ハラール