有一种方法可以导入 csv 文件,其中标题不从第一行开始。 您只需指定标题所在的行即可。
但是假设我对数据表做了一些操作并且我想将其导出回相同的格式,我该怎么做? 假设我有文本,而且只有一行。
Excel 中的 CSV 看起来像这样:

在记事本中它看起来像这样:

有没有一种干净的方法可以纯粹在 JSL 中做到这一点?
我目前正在尝试这样做的方式:
我正在执行的读取 CSV 文件的相反操作是将 CSV 作为文本文件读取到前任,找出我的标题从哪里开始(它们可以从不同的地方开始)并获取行号标题位置,然后做:
dtInt_ = Open(
Char To Blob( ex ),
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( headersLocation ),
Data Starts( headersLocation + 1 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
),
Invisible
);因此,我当前的计划是以某种方式将处理后的数据表放入 BLOB,然后执行相反的 Blob To Char() 函数并在其中添加一些文本并将其保存为 CSV 文件。
我一直致力于将数据表转换为 blob,这样我就可以将其转换为 Char(这可能不是正确的方法),或者以某种方式将数据表转换为 CSV 格式的文本(而不是另存为文件)。
或者,我可以将其保存到 CSV 文件,然后将该文件作为文本读回,并在前面添加一行并再次保存(删除临时 CSV 文件) - 但这似乎是一种非常尴尬的方法。
谢谢,
M。
好吧,现在我是这样解决的:
dt = Current Data Table();
filePath = "C:\TEMP\test.csv";
dt << Save(filePath);
dt_text = Load Text File(filePath);
out = "Custom Line \!n"||dt_text;
Save Text File(filePath, out, mode("Replace"));有没有更干净的方法而无需保存文件两次? (假设这将用于多个本身相当大的文件 - 因此额外的保存操作很重要)。
您可能想考虑使用以下命令将整个 csv 文件读入文本字符串
加载文本文件()
然后,您可以解析字符串变量以获取所需的信息。
保存文本文件()
然后可用于将文件写回硬盘。
吉姆,
这正是我在当前解决方案中所做的 - 见上文。
问题是我还需要进行一些数据操作 - 所以我也需要将其作为数据表加载。
问题是如何将数据表变成文本(CSV格式)...... 我只能想出另存为 CSV,然后再次将其加载为文本,以便插入字符串。 这比我希望的多了一个保存\加载周期 - 当我有多个大文件时,它会变得昂贵。