【问题标题】:Read table from text file从文本文件中读取表格
【发布时间】:2016-11-18 07:17:45
【问题描述】:

我正在尝试使用 readtable 函数将文本文件中的数据导入工作区。

文本文件结构非常简单,由 datetimeintegerfloat 分别如以下最小示例所示:

2013-07-07 05:15:19 8 213.0

2013-07-07 05:15:19 11 109.0

2013-07-07 05:15:20 14 33.5

2013-07-07 05:15:24 56 182.0

当我尝试像这样加载数据时:

data = readtable(filename,...
                'Format','%{yyyy-MM-dd}D %{HH:mm:ss}D %d %f %*[^\n]',...
                'ReadVariableNames',false);

我收到以下错误:

Error using textscan
Badly formed format string.

Error in table/readTextFile (line 160)
raw = textscan(fid,format,'delimiter',delimiter,'whitespace',whiteSpace, ...

Error in table.readFromFile (line 41)
    t = table.readTextFile(filename,otherArgs);

Error in readtable (line 114)
t = table.readFromFile(filename,varargin);

如果我尝试这样做:

data = readtable(filename,...
                'Format','%{yyyy-MM-dd}D%{HH:mm:ss}D%d%f%*[^\n]',...
                'Delimiter',' ',...
                'ReadVariableNames',false);

我得到了完全相同的错误。

我检查了Mathwork's online documentation,但我无法找到解决问题的方法。

编辑:实际上,所需的表格格式是用 datetime 列替换 datetime 列。我正在做的是在阅读表格后手动加入 datetime。如果您知道一种方法可以直接导入合并这两个变量的表,那就太好了。

【问题讨论】:

  • 您使用的是 R2014b+ 吗?我不确定'%{yyyy-MM-dd}D' 样式格式规范是否存在于早期版本中。如果您使用的不是最新版本,请确保您阅读的是安装随附的文档,而不是在线文档(尽管有 archived documentation)。
  • @horchler 很好发现!这似乎是这里的问题,因为我正在运行 Matlab R2013b,它显然无法识别 %{fmt}D formatspec。

标签: matlab datetime-format


【解决方案1】:

最初,如果您将使用您的数据格式执行此操作:

data = readtable('data.txt','Delimiter',' ','ReadVariableNames',false)

您将获得 Nx4 数据数组,以便您可以随意操作它。

您可以阅读如何处理导入为表 here 的数据

【讨论】:

  • 这可能有效,但看起来它只是将所有内容都导入为字符串,因为所有值都不是数字。
  • 看起来像这样,但数据可以通过大括号访问,并且可能不是重铸数据的最有效方式。我添加了链接
  • @madbitloman 我知道这一点。事实上,这就是我现在正在做的事情。我只是想知道是否有更好的方法可以一步将数据导入所需的格式,而不是对其进行后处理。
猜你喜欢
  • 1970-01-01
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
  • 2017-08-06
  • 2023-03-04
相关资源
最近更新 更多