【发布时间】:2014-09-28 15:50:12
【问题描述】:
我有一个数据集,我想存储并能够在 Octave 中加载
18.0 8 307.0 130.0 3504. 12.0 70 1 "chevrolet chevelle malibu"
15.0 8 350.0 165.0 3693. 11.5 70 1 "buick skylark 320"
18.0 8 318.0 150.0 3436. 11.0 70 1 "plymouth satellite"
16.0 8 304.0 150.0 3433. 12.0 70 1 "amc rebel sst"
17.0 8 302.0 140.0 3449. 10.5 70 1 "ford torino"
15.0 8 429.0 198.0 4341. 10.0 70 1 "ford galaxie 500"
14.0 8 454.0 220.0 4354. 9.0 70 1 "chevrolet impala"
14.0 8 440.0 215.0 4312. 8.5 70 1 "plymouth fury iii"
14.0 8 455.0 225.0 4425. 10.0 70 1 "pontiac catalina"
15.0 8 390.0 190.0 3850. 8.5 70 1 "amc ambassador dpl"
当我尝试使用时它不会立即起作用:
data = load('auto.txt')
有没有办法从给定格式的文本文件中加载,或者我需要将其转换为例如
18.0,8,307.0,130.0,3504.0,12.0,70,1
...
编辑: 删除最后一行并修复“一半”数字,例如3504.-> 3504.0 然后使用:
data = load('-ascii','autocleaned.txt');
根据需要将数据加载到 Octave 中的矩阵中。
【问题讨论】:
-
由于所有数据都在固定宽度的列中(最后一个字符串除外),您应该能够逐行读取它,使用
fscanf解码该行。实际上,您将使用编写它时使用的相同记录说明符(在 C 或 Fortran 中)或fprintf来读取它。 -
我已经知道如何使用其
csv和numpy模块将其加载到Python,然后通过.mat文件将其传输到Octave。结果是1x10 struct array有 9 个字段 - 8 个数字和 1 个字符串。如果您愿意,我可以将其发布为答案。 -
@hpaulj 有兴趣了解更多低级方法来执行此操作。目前清理输入文件并使用 load 对我来说已经足够了。但在某些情况下,您需要更多控制权。在这里,更专业的方法可能会派上用场。
-
在 Octave 文档中进一步挖掘,我发现它确实有
dlmread、csvread、fileread、textread、textscan。除了dlmread之外的所有内容都被解释并且可以使用type读取。
标签: matlab io octave text-processing