如何防止 3 位版本号作为日期读入数据表?在 JMP 14.2.0 中,当我读入(或“打开”)包含具有 3 位版本号值的列的 CSV 文件时,这些值会被解释为日期。 例如,如果 verTest.csv 包含:
Product,Station,Version,Date
Widget,Audio-Test,2.2.2044,3/2/19
Widget,RF-Test,2.2.2045,3/2/20
所有列值都按预期解释,但版本值除外,版本值以日期形式读取,例如 2/2/2044 和 2/2/2045,具有数字数据类型、连续建模类型和 m/d/y格式。 我发现2位和4位版本号读取正常,即作为字符串。
更复杂的是,我事先不知道哪些列可能包含此格式,因此我无法提前显式设置列类型(也不清楚是否可以在打开之前设置列类型) CSV 文件)。 而且,如果我尝试在事后手动更改列类型,似乎会烘焙“/”字符,以便将类型更改为“字符”,从而使值留下“2/2/2044”字符串。
有没有办法禁止这种解释,以便 3 位版本号作为字符串读入,即字符、名义(并且不影响使用传统格式(例如 m/d/y)解释日期的方式)?
回复:如何防止 3 位版本号作为日期读入数据表?...你可以使用这样的日期
<<SET date="" filter=""></SET>
<<CreateWindow with pre-populated date range<<CreateWindow with pre-populated date range<<使用预先填充的日期范围创建窗口
回复:如何防止 3 位版本号作为日期读入数据表?很高兴这对你有用!
该语法有三个用途:如果您想使用预先填充的值重新启动对话框,则记住对话框的完整状态、运行导入以及显示可能性。 过滤器是所有这些的一个示例:
<<SET name="" filter=""></SET>
与对话框相比,
using <<CreateWindow instead of <<ImportDatausing <<CreateWindow instead of <<ImportData使用 <<
对话框中有一些复选框可以启用和禁用过滤器。 上面,名称过滤器已启用,大小和日期过滤器未使用。 大小和日期过滤器中的值是 (1) 您最后试验的值,或 (2) 您选择的文件的大小范围和日期范围。 最有可能的是(2)。 所以你的文件可能有 100 字节长。 该数字是 JMP 日期时间值,您可以使用类似 asdate( 3666002110.40841 ) 要得到
2020年3月2日:13:55:10
您可以从脚本中删除这些行和(可能)许多其他行;它们大多是显示如何使用 MFI 的默认值。
最后,该脚本实际上在做什么:MFI(...) 函数返回一个对象。 <<导入数据最后的方法告诉对象实际导入数据。 脚本索引中有一个示例显示 <<创建窗口作为另一种方法。 MFI 对象立即被使用,然后在 <<导入数据案件。 在<<创建窗口如果窗口关闭,MFI 对象不会被销毁。 您还可以使用 xyz = MultipleFileImport(...);并向变量 xyz 发送消息(包括导入数据和创建窗口);在变量被清除之前,该对象不会被销毁。 ShowProperties(xyz) 将在日志窗口中列出消息;它们也在脚本中使用。
回复:如何防止 3 位版本号作为日期读入数据表?你好@Craige_Hales ,
非常感谢您的建议! 我实施了多个文件导入并对其进行了大量测试;我找不到任何问题,它的读数是我的 3 位数版本列(以及其他类似的列)的分隔符完好无损,但仍然正确读取日期。
从手册产生的来源多个文件导入,我得到以下信息:
Multiple File Import(
<<SET folder=""></SET>
要将其集成到我的导入函数中(该函数需要小路作为参数),我只需正确填充前两个方法:
Convert_csv_to_jmp = Function( {path},
:
:
// determine folder and file args for Multiple File Import function.
lastSlash = Contains( path, "/", -1 );
dir = Substr( path, 1, lastSlash );
If( Length(dir) == 0,
dir = "./";
);
file = Substr( path, lastSlash+1 );
Write( "Path: ", dir, "\!nFile: ", file, "\!n" );
Multiple File Import(
<<SET folder=""></SET>如果社区中的有人可以链接到有关此功能的一些好的文档,我将不胜感激。 我想了解所有方法都在做什么。 例如,设置日期过滤器似乎想要一些非常神秘的论点。
回复:如何防止 3 位版本号作为日期读入数据表?使用多个文件导入。 它不会尝试猜测日期格式。 如果您只选择了一个文件,它会一次导入一个文件,但它的真正目标是从一个文件夹中导入一堆类似的文件。 如果需要重复该过程,请查看手动导入的源脚本。
回复:如何防止 3 位版本号作为日期读入数据表?嗨卡梅伦,
感谢您的答复。 根据您的建议,在最后一个导入屏幕上,我可以单击红色箭头左侧的图标,将其从数字数据列更改为字符数据列。 这样,它就按照我想要的方式导入了数据。

其来源给了我以下信息:
Open(
"<SPAN>/Users/st/src/analysis_jmp/</SPAN>testVer.csv",
columns(
New Column( "Product", Character, "Nominal" ),
New Column( "Station", Character, "Nominal" ),
New Column( "Version", Character, "Nominal" ),
New Column( "Date",
Numeric,
"Continuous",
Format( "m/d/y", 10 ),
Input Format( "m/d/y" )
)
),
这表明可以在打开 CSV 文件之前设置列类型。 然而,当我只针对 JSL 脚本中的 Version 列时,事情就会变得混乱 – (也许是 JSL bug??)。
我的脚本:</CODE></P><P> </P><PRE><CODE class=" language-jsl">path = "./verTest.csv";<BR />dt = Open(
path,
columns(
New Column( "Version", Character, "Nominal" )
),
结果来源:
Open(
"/Users/st/src/analysis_jmp/verTest.csv",
columns(<BR /> New Column( "Product", Character, "Nominal" )<BR /> ),
因此,看起来进口商忽略了新列规范中的名称,只是按照文件中出现的顺序获取它们(“产品”是第一个 - 我添加了第二个具有类似结果的新列,从而加强了这一假设) 。
即使这确实有效,它也会假设我在导入之前知道列的名称(我不知道)。 在某些情况下我会这样做,所以我至少可以将这个逻辑(假设它有效)应用于那些;但我最终会想念其中的一些。
我希望可能有一个导入选项可以限制或限制日期的一般解释方式(例如,“.”字符不被视为 m/d/y 分隔符)。
回复:如何防止 3 位版本号作为日期读入数据表?你好@史蒂夫特里,
当您在 JMP 中打开 .csv 时,导航窗口上应该有一些选项(至少对于 Windows)。我没有 Mac)。选择数据(使用预览),您将有机会手动设置导入列的格式。它在 Windows 中的样子如下:

单击“打开”时,您将看到一系列对话框屏幕,用于设置导入参数。在第二个屏幕上,您可以单击预览顶部要更改的标题,并确保该列作为字符列导入。一旦您按照您喜欢的方式导入它,您只需从表中复制源脚本并在将来重新使用它即可自动导入。