导入 csv 并仅更改几列的格式我有一些需要导入的 csv 文件,并且有一些与软件版本相关的字段。 然而,它们与 xyz 一样位于 csv 中,并且没有封装在引号中,因此 JMP 尝试将其作为数字数据类型引入。 当这样做时,JMP 认为该数字是日期并将其转换为日期,因此很难转换回可用版本。
如果我手动导入文件,我可以使用预览将我需要的列强制为我想要的数据类型。 然而,生成的导入脚本对于每一列都有“new column()”,我要么必须忽略整个内容,以便 JMP 仅导入文件,要么列出所有 186 列,以便我可以控制其中一些的导入。
真正的问题在于,其中一些文件具有不同的列……有些是共同的,有些不是,但在所有情况下,版本列都是共同的,并且我需要控制它们的引入方式。
下面是我想要做的(或类似的事情),但总列数实际上是 186...
Open(
filepath,
columns(
New Column( "ALGORITHM_VERSION", Character, "Nominal" ),
New Column( "CLUST_ALG_VERSION", Character, "Nominal" ),
New Column( "CYTOFILEIO_VERSION", Character, "Nominal" ),
New Column( "RELEASE_VERSION", Character, "Nominal" )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, 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 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
)
数据存取回复:导入 csv 并仅更改几列的格式是的,不幸的是,我不会获得有关该组织的大量信息。 不过,我也检查了 JMP 支持,并找到了解决方案。
由于 Open() 命令试图变得智能并为每列获取正确的格式,因此建议执行 Multiple File Import()。 由于它的重点是速度,因此不需要花太多时间来识别数据类型,因此格式 xyz 乍一看就像字符,所以它可以工作! 具有讽刺意味的是,不久前我就被这个问题困扰了,如果使用 MFI 来纠正 Open() 正确识别的一些内容,我就必须向脚本中添加代码。
在这种情况下,这个“缺陷”是一个好处。 我不确定它是否会是 100% 总是做我需要的解决方案,但它在这里轻松解决了问题。 向给我这个想法的温迪·墨菲致敬。
回复:导入 csv 并仅更改几列的格式有选择。 如果我只知道版本号的模式而不知道其他内容(列数、名称、数据类型等),您可以使用加载文本文件,遍历数据一次以查找它们所在的位置,然后相应地构建导入代码。 或者,您可以将所有列作为文本读取,然后检查每个列是否有可能的版本号(在必要时转换为数字)。 对于非常大的文件,这两种方法都可能很慢,但是很强大 - 您不会丢失信息。 您对版本号的可能位置了解得越多,这两种方法的效率就越高。
回复:导入 csv 并仅更改几列的格式看看一些布局,这适用于其中一些,但不适用于全部。当然,在处理之前我不会知道我得到的布局。
现在我们有针对 CSV 每种途径的代码,我们只需要将文件发送到正确的路径即可进行处理……但是由于所有文件应该有 90% 相同,所以这似乎是一种耻辱不是一个更动态的解决方案。
回复:导入 csv 并仅更改几列的格式你能用这样的公式吗
Char( Month( :colName ) ) || "." || Char( Day( :colName ) ) || "." ||
Char( Year( :colName ) )
转换回来?
回复:导入 csv 并仅更改几列的格式我的错误,这不会纠正具有 xyz 结构的列
这是一个应该可以正确地将列更改为字符的脚本。
Names Default To Here( 1 );
dt = Open(
filepath,
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, 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 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
);
For( i = 1, i <= N Cols( dt ), i++,
If(
Contains(
Uppercase( Column( dt, i ) << get name ),
"_VERSION"
) & Column( dt, i ) << get data type == "Numeric",
Column( dt, i ) << set format( "Fixed Dec", 18, 0 );
Column( dt, i ) << data type( "Character" );
)
);