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 来做,但是需要八行难看的代码。
我是 运行 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 来做,但是需要八行难看的代码。