Matlab:如何将 "date time" 数据导出到外部文件? "Error using fprintf. Function is not defined for 'cell' inputs."

Matlab: how to export "date time" data to an external file? "Error using fprintf. Function is not defined for 'cell' inputs."

我是 运行 Matlab 2016a,我有点新手。

我从一个非常大的外部 .txt 文件中导入了某些数据列。第一列是“日期时间”。当我将它打印到屏幕上时,它是这样显示的:

'2019-07-10 20:00:00'

其他导入的列都是由数字组成的。我只想打印导入到 .txt 文件的列。对于数字列,这有效:

fileID = fopen('fag_1.txt','w'); fprintf(fileID,'%f\n',fag_1); fclose(fileID);

但是,我试了一个下午,还是找不到打印日期时间列的方法。例如,这是一个适用于论坛某人的解决方案:

fileID = fopen('DT.txt','w'); fprintf(fileID, '%23s\n', DT); fclose(fileID);

它给了我这个错误(这与我尝试过的所有其他方法得到的错误相似):

Error using fprintf
Function is not defined for 'cell' inputs.

Error in XXX (line 230)
fileID = fopen('DT.txt','w'); fprintf(fileID, '%23s\n', DT); fclose(fileID);

有没有人知道如何处理这个问题?谢谢。


回复保罗 Paolo,文本文件很大,所以我只会在第一行显示前四列。如果这还不够,请随时告诉我。我很想知道如何在 Matlab 中执行此操作,所以如果您能提供帮助,那就太好了!非常感谢。

DT  MOD UNMOD   PRESS
2015-07-01 00:00:00 -999.0  -999.0  -999.0

我无法弄清楚如何在 Matlab 中执行此操作,但在 Whosebug 上找到了使用 awk 的不同解决方案(如下)。

awk '{print }' test.txt > test2.txt

这并没有真正回答我的问题,但它解决了我的问题!如果有人对是将我的问题标记为已回答还是删除它有意见,很高兴知道。我不想让它开放,因为这会阻止那些喜欢回答问题的人和那些有选择答案记录的人。谢谢。

使用 matlab 从文本文件中提取几列就像用你的车开一个街区。你可以做到,但这需要大量额外的工作和资源(金钱、汽油),而且有更好的工具来完成这项工作(步行、骑自行车)。在这种情况下,awk 是一个不错的选择。它专为此类任务而设计,效果很好。

但是,您的 Matlab 问题的直接答案正是错误消息所说的:您正试图给 fprintf 一个要打印的单元格,而 fprintf 无法打印单元格。例如,制作一个文本文件,其中包含您问题中的四行示例数据(“2015-07-01 00:00:00 -999.0 -999.0 -999.0”)。如果导入此文件并在 Matlab 中查看结果,我们会看到:

>> fin = fopen('sline.txt','r');
>> sin = textscan(fin,'%s %s %f %f %f')

sin =

  1×5 cell array

{4×1 cell}    {4×1 cell}    {4×1 double}    {4×1 double}    {4×1 double}

>> fclose(fin);

可以看到导入的数据已经放在了cells中。如果您想引用单元格内的项目(在本例中为字符串,以便打印),请使用 {}。例如:

fout2 = fopen('sout2.txt','w');    
for k=1:4
    fprintf(fout2,'%s %s %f %f %f\n',sin{1,1}{k},sin{1,2}{k},sin{1,3}(k),sin{1,4}(k),sin{1,5}(k))
end
fclose(fout2);

所以你可以用 Matlab 来做,但是需要八行难看的代码。