将多个 CSV 文件导入文件夹中并堆叠大家好,
我的 CSV 文件有问题,它有一个奇怪的分隔符( “,” ),我不知道如何让 JMP 自动导入。
我的目标是能够选择一个包含多个 CSV 文件的文件夹,具有相同的结构和列名,导入所有数据并将它们堆叠起来。
我附加了一个看起来像我的文件的 CSV 文件。
希望你能帮助我:)
欢呼吧,克里斯蒂安
自动化和脚本数据访问大规模定制回复:导入文件夹中的多个 CSV 文件并堆叠它们甚至更多,引号有1、2、3个:

也许最好的解决方案是修复文件导出:)
另一种解决方案:使用“Notepad ++”/在文件中替换:

去掉引号。
回复:导入文件夹中的多个 CSV 文件并堆叠它们您似乎还在每一行末尾添加了“”,并且第一列没有“,”格式,而是“,”格式。

我不确定这是否适用于您的所有文件,但我会将它们作为文本处理,将它们清理为“适当的” csv,然后从内存中打开到 JMP 表中
Names Default To Here(1);
filedir = "$DOWNLOADS\New folder (2)\";
csvfiles = {};
For Each({filename}, Files In Directory(filedir),
If(Ends With(filename, ".csv"),
Insert Into(csvfiles, filedir || filename);
);
);
dt_res = Empty();
For Each({csvfile}, csvfiles,
txt = Load Text File(csvfile);
lines = Words(txt, "\!N");
lines_fixed = Transform Each({line}, lines,
items = Concat items(Words(line, "\!","), ",");
);
csv_txt = Concat Items(lines_fixed, "\!N");
dt = Open(Char to Blob(csv_txt), "text", Invisible);
dt << Set Name(Word(-1, csvfile, "\/"));
If(Is Empty(dt_res),
dt_res = dt;
,
dt_res << Concatenate(
dt,
"Append to first table";
);
Close(dt, no save);
);
);
dt_res << Bring Window To Front;
回复:导入文件夹中的多个 CSV 文件并堆叠它们啊,对的, 字()使用与文本分列()相同的技巧。
回复:导入文件夹中的多个 CSV 文件并堆叠它们深入挖掘:
主要问题是

在 MFI 设置中。
JMP对第一个和最后一个引号很满意 -并将整行文本读取为一列(保留每个第二个引号?!?):

编辑:第一个和最后一个引号?不,它更复杂 - 见下文!
作为一种快速解决方案,可以将 CSV 引用设置更改为另一个字符:

<
<SET csv="" quote=""></SET>
<P>并使用引号本身作为分隔符:</P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="hogi_2-1756463581618.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_2-1756463581618.png" style="width: 193px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_2-1756463581618.png" style="width: 193px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_2-1756463581618.png" style="width: 193px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_2-1756463581618.png" style="width: 193px;"><span class="lia-inline-image-display-wrapper" image-alt="hogi_2-1756463581618.png" style="width: 193px;"><img src="https://us.v-cdn.net/6038925/uploads/images/81530i4BF1266286F27E58/hogi_2-1756463581618.png" role="button" title="hogi_2-1756463581618.png" alt="hogi_2-1756463581618.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></P> <P><BR />这允许 JMP 读取文件 - 但是:</P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="hogi_3-1756463633644.png" style="width: 773px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_3-1756463633644.png" style="width: 773px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_3-1756463633644.png" style="width: 773px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_3-1756463633644.png" style="width: 773px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_3-1756463633644.png" style="width: 773px;"><span class="lia-inline-image-display-wrapper" image-alt="hogi_3-1756463633644.png" style="width: 773px;"><img src="https://us.v-cdn.net/6038925/uploads/images/81531iE7879526B8F81200/hogi_3-1756463633644.png" width="773" height="87" role="button" title="hogi_3-1756463633644.png" alt="hogi_3-1756463633644.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></P> <P>与<FONT face="courier new,courier">字()</FONT>和<FONT face="courier new,courier">文本分列()</FONT>不同, <FONT face="courier new,courier">小额信贷机构</FONT>将每个(单个)分隔符视为分隔符<BR />其思想是:缺失数据=缺失数据,没有跳过的列!</P> <P>感谢 MFI,对于大多数文件来说,这是有意义的:-)</P> <BR /> <P>这里不行 - 因此,导入后,用户必须删除空列。<BR /><BR />请注意:导入具有空 CSV 报价设置的文件不起作用。</P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="hogi_4-1756463762291.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_4-1756463762291.png" style="width: 158px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_4-1756463762291.png" style="width: 158px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_4-1756463762291.png" style="width: 158px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="hogi_4-1756463762291.png" style="width: 158px;"><span class="lia-inline-image-display-wrapper" image-alt="hogi_4-1756463762291.png" style="width: 158px;"><img src="https://us.v-cdn.net/6038925/uploads/images/81533iF2FFDC8A29503E1D/hogi_4-1756463762291.png" role="button" title="hogi_4-1756463762291.png" alt="hogi_4-1756463762291.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></P> <CODE class=" language-jsl"><
<SET csv="" quote=""></SET> <P>JMP 将自动使用引号作为 CSV 引用并将整个文件作为单个列加载。</P>
回复:导入文件夹中的多个 CSV 文件并堆叠它们更多 MFI 和 CSV 报价的乐趣
使用附件
输入:JMP:

一旦建立了适合第 1-N 行的假设,就很容易找到第 N+1 行的黑天鹅……
回复:导入文件夹中的多个 CSV 文件并堆叠它们0. 如果引号前面有字符,则不是 CSV 引号。
- 如果单元格的第一个字符是引号,则它是 CSV 引号 -> 扫描以找到结束引号
- 如果有两个相邻的引号,则将它们视为单引号

- 如果你在路上发现一个逗号,那就是一个逗号
- 如果你在途中发现换行符,那么它就是换行符(!!)
实际上,单元格的内容是:

- 还有其他有趣的角色吗?...
- 如果你找到结束引号,则引文已完成
- 搜索分隔符或换行符。
您找到的任何字符:只需将其添加到引文中。
- 这里:单引号是单引号
- 2 个引号就是 2 个引号(比较 #2)
- 如果找到分隔符或换行符,则表示这是单元格的末尾(比较#4)
- 如果引用前面有一个空格,则该引用不是 CSV 引用。
(#0 的子集)
我花了一段时间才明白
从上一篇文章来看,这就是我将其添加为单独案例的原因。
csv文件:JMP:

回复:导入文件夹中的多个 CSV 文件并堆叠它们在 JMP 中,
文本到列是处理此类分隔符的工具:
它不关心它是“或”“,”或“”
它将多个分隔符视为一个分隔符(!)
这可能非常有害: 文本到列:正确处理丢失的数据
...但通常这正是我们所需要的,就像这里一样。
所以,
a) 通过 MFI 使用“每行一行”选项加载文件
b) and use 文本分列 with Delimiters = ,"

dts = Multiple File Import(
<
<SET folder="">
</SET>
<BR />
回复:导入文件夹中的多个 CSV 文件并堆叠它们根据新发现,原始帖子中的数据表现在看起来更加熟悉:
它类似于一个数据表,在第一步(“V1”)中,导出时在数字和字符列中添加了引号(只是第一列没有添加引号:

出奇:
V1 可以通过拖放操作在 JMP 和 Excel 中打开。这两个程序都会自动“解压”CSV 格式的报价,并以正确的格式加载表格。那么,如何从 V1 到带有奇怪 sep.csv 的 CSV ?
有效的方法:
步骤 2:将 V1 以制表符分隔的表格形式打开(而不是带有 CSV 引号的 CSV 文件)
步骤3:将表保存为csv(在此步骤中[在JMP和Excel中],每行开头和结尾的附加引号会自动添加,并且单引号会被2个引号替换)
逆过程应该很简单:
- 只需在 JMP 或 Excel 中打开带有 sep.csv 的 CSV 文件即可。这两个程序都会自动删除引号,并将双引号转换回单引号:在 Excel 中如下所示:

正如我们想要的:

因此,让我们将数据表保存为 csv - 然后再次加载它:)
在 JMP 中,我们可以禁用以下选项:
]
不幸的是,CSV 编码默认启用。一方面,这很合理——保存不带 CSV 引号的文件会显著改变数据结构!
但实际上,这正是我们想要的。
因此,唯一的方法(?)是将条目从 JMP 或 Excel 复制到文本编辑器并从那里保存 v1.txt。
文本编辑器不知道 csv 引号并按原样保存文本。
回复:导入文件夹中的多个 CSV 文件并堆叠它们@hogi @jthi非常感谢你的回答和努力!结果比我想象的还要糟糕!
我需要花一些时间仔细研究你的答案,但我还是想立即感谢你:)
欢呼吧,克里斯蒂安