在不打开文件的情况下访问 .jmp 文件行/列计数和注释至少在 Windows 上可以通过 JMP Open 文件访问此信息:

想知道是否可以通过脚本访问这些而不打开 JMP 数据表(打开数据文件选项)?
列名可以通过
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp", "Column Names Only");
数据表脚本回复:在不打开文件的情况下访问 .jmp 文件的行/列计数和注释感谢您强调参加的好处之一发现峰会并与开发人员会面/询问专家。
由于您的对话和 JMP 17 中的这篇文章,我们将添加一个 JSL 选项来获取数据表中的行数和列数,以及列的名称和 Notes 属性的内容(如果存在) . 太棒了!
回复:在不打开文件的情况下访问 .jmp 文件的行/列计数和注释我今天在 Discovery 峰会上参加了与开发人员会面的会议来询问这个问题。 似乎我之前发布的解决方案(获取列名,N Items() 用于列计数,打开数据表,其中一列作为私有,N Rows() 用于行计数)是目前最快的方法。 他们做了一个记录,所以将来可能不需要打开私有数据表,或者 JMP 将提供执行此操作的功能。
下面是函数格式的脚本。 他们建议为 dt_temp 添加关闭。 这个脚本可能需要 Wait(0);到处都是,但是因为没有它们它确实有效,所以我没有添加任何东西。
Names Default To Here(1);
//https://community.jmp.com/t5/Discussions/Accessing-jmp-file-row-col-count-and-notes-without-opening-file/td-p/366316
//Function to get column count, rowcount, table notes and column names to associative array
getTableInfo = function({path_to_table}, {Default Local},
//Check that file exists
If(!File Exists(path_to_table),
return(Associative Array({"error"}, {"File not found"}));
);
//Initialize associative array
retVal = Associative Array(
{"name", "rowCount", "columnCount", "notes", "columnNames"},
{"", 0, 0, "", {}}
);
//Open datatable as columns only list
colNames = Open(path_to_table, "Column Names Only");
//Check that table has atleast one column
If(N Items(colNames) > 0,
retVal["columnNames"] = colNames;
retVal["columnCount"] = N Items(colNames);
dt_temp = Open(path_to_table, Select Columns([1]), Private);
retVal["name"] = dt_temp << get name();
retVal["rowCount"] = N Rows(dt_temp);
);
//Get notes from "Notes" table variable
retVal["notes"] = dt_temp << Get Table Variable("Notes");
Close(dt_temp, no save);
return(retVal);
);
//Examples with tables from $SAMPLE_DATA
aa_probe = getTableInfo("$SAMPLE_DATA/Probe.jmp");
Show(aa_probe["name"],aa_probe["rowCount"], aa_probe["columnCount"], aa_probe["notes"]);
Show(getTableInfo("$SAMPLE_DATA/Alcohol.jmp"));
Show(getTableInfo("$SAMPLE_DATA/Alcohol.jmpmissing"));回复:在不打开文件的情况下访问 .jmp 文件的行/列计数和注释JMP 在“打开数据文件”菜单中显示它的方式更快(也许......)。 我有一些很宽的表,有 60 列,很高,大约 1500 万行。 打开这些是相当缓慢的。 我可以通过仅将其作为列名打开来获取列数,也可以通过仅将数据表打开为单列但所有行来获取行数,但我认为这仍然会更慢。 当然,JMP 有可能在幕后做这样的事情吗?
我也许可以实现这样的事情:
Names Default To Here(1);
dtPath = "$SAMPLE_DATA/Probe.jmp";
//dtPath = "$SAMPLE_DATA/Alcohol.jmp"; //table with notes
colNames = Open(dtPath, "Column Names Only");
colCount = N Items(colNames);
dt_temp = Open(dtPath, Select Columns([1]), Private);
notesTableVar = dt_temp << Get Table Variable("Notes");
rowCount = N Rows(dt_temp);
dt_temp = Empty();
Show(colCount, rowCount, notesTableVar);
//Show(colNames);因为 Discovery Summit 目前正在进行,也许我会参加其中一个 Meet-The-Developer 会议并在那里问这个问题。
回复:在不打开文件的情况下访问 .jmp 文件的行/列计数和注释我建议指定“私人”而不是“不可见”。 它不会使 JMP 工作那么辛苦,因为它不必创建显示对象。回复:在不打开文件的情况下访问 .jmp 文件的行/列计数和注释你好@jthi ,
我不知道如何从 JMP 中打开的窗口对话框中获取该信息,但您可以执行以下操作:
Names Default to Here(1);
dt=open("$SAMPLE_DATA/Big Class.jmp", Invisible);
Show(Nrows(dt));
Show(NCols(dt));
Close(dt);它应该在“日志”窗口或“脚本”窗口的嵌入式日志中返回以下内容:
N行(dt)= 40;
N列(dt)= 5;
打开命令中的“不可见”不会使数据表出现在前面并将其隐藏在后台。 您甚至可以执行 Show Properties(dt) 命令并获得有关数据表的更广泛的信息列表。
我知道这不是你想要的,但我认为它可以完成这项工作。
DS