关于导入:matlab 分隔符不起作用

matlab delimiters doesn't work

我有一个文件 test.txt 看起来像:

日期时间季节假期工作日天气温度湿度

2011/1/1 0:00 1 0 0 1 冷高
2011/1/1 1:00 1 0 0 1 冷高

我想通过分隔符"\\\\\\\\t"将它们导入到matlab中。但是,a=importdata(\\'test.txt\\',\\'\\\\\\\\t\\') 只是将数据作为一个整体导入,而不是用 \\\\\\\\t 分隔。

我也尝试过其他命令,例如 dlmread:

使用 dlmread 时出错(第 139 行)
文件和格式字符串不匹配。
无法从文件中读取数字(第 1u 行,第 1u 字段)==>
日期时间季节假日工作日天气 atemp
湿度\\\\

然后我尝试 str1=textsacn(\\'test.txt\\',\\'%s%s%s%s%s%s%s\\');

未定义函数 \\'textsacn\\' 用于 \\'char\\' 类型的输入参数。

我的 matlab 版本是 2012a。我用窗户。
有人可以帮忙吗?


也可以使用textscan直接指定数字格式:

1
2
3
fid = fopen('test.txt');
out = textscan(fid, '%s%d%d%d%d%s%s', 'Delimiter', '\\t')
fclose(fid);

这样,变量 out 就已经包含了四个数字列的数字。您可以通过执行以下操作将第一列转换为 datenum:

1
dates = datenum(out{1});

importdatadlmread 用于数值数据。对于混合文本/数字,您必须将 textscan(您在 textsacn 上有错别字)与 fopenfclose 一起使用,然后使用 reshape:

重新格式化您的元胞数组

1
2
3
4
5
fid = fopen('test.txt');
s = textscan(fid,  '%s', 'Delimiter', '\\t');
fclose(fid);

s = reshape(s{1}, [7 numel(s{1})/7])';

和输出:

1
2
3
s =
    '2011/1/1 0:00'    '1'    '0'    '0'    '1'    'cold'    'high'
    '2011/1/1 1:00'    '1'    '0'    '0'    '1'    'cold'    'high'

然后,一些像 '0''1' 这样的字符串可以用 str2num.

转换成数字

最好的,