首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >八度高级极速使用

八度高级极速使用
EN

Stack Overflow用户
提问于 2015-09-04 00:18:07
回答 2查看 69关注 0票数 0

我有以下文本文件:

079082084072079032084069067072000000000,0 082078032049050032067072065082071069000,1 076065066032065083083084000000000000000,0 082078032049050072082000000000000000000,1 082078032049050072082000000000000000000,1 082078032049050072082000000000000000000,1 070083087032073073032080068000000000000,0 080067065032049050032072082000000000000,0 082078032056072082000000000000000000000,1 070083087032073073073000000000000000000,0 082078032087069069075069078068000000000,1 082078032049050072082000000000000000000,1 077065073078084032077069067072032073073,0 082078032049050072082000000000000000000,1 080067065032049050032072082000000000000,0 082078032049050072082000000000000000000,1

我也需要矩阵:X号16x13 Y号16x1

我希望将文件的每一行分隔为13个值,例如: 079 082 084 072 079 032 064 067 072 000 000 000

是否可以使用极值函数将其导入八度?

如果不是,可以使用Linux命令完成吗?

EN

回答 2

Stack Overflow用户

发布于 2015-09-04 09:59:44

是的,您可以使用textscan (如果您真的想使用textread,请参见底部)。

代码语言:javascript
复制
octave> txt = "079082084072079032084069067072000000000,0\n082078032049050032067072065082071069000,1";
octave> textscan (txt, repmat ("%3d", 1, 13))
ans = 
{
  [1,1] =

    79
    82

  [1,2] =

    82
    78

  [1,3] =

    84
    32

  [1,4] =

    72
    49
[...]

请注意,您正在将它们读取为数字值,因此不会得到前面的零。如果需要,您可以使用格式中的"%3s“将它们作为字符串读取(处理它们会带来额外的麻烦和性能下降,因为您将处理单元格数组)。

因为您正在从文件中读取:

代码语言:javascript
复制
[fid, msg] = fopen ("data.txt", "r");
if (fid)
  error ("failed to fopen 'data.txt': %s", msg);
endif 
data = textscan (fid, repmat ("%3d", 1, 13));
fclose (fid);

如果您真的想使用textread

代码语言:javascript
复制
octave> [d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13] = textread ("data.txt", repmat ("%3d", 1, 13))
d1 =

  79
  82
  76
[...]    
d2 =

  82
  78
  65
[...]

或者:

代码语言:javascript
复制
octave> data = cell (1, 13);
octave> [data{:}] = textread ("data.txt", repmat ("%3d", 1, 13))
data = 
{
  [1,1] =

    79
    82
    76
[...]

  [1,2] =

    82
    78
    65
[...]

如果需要捕获逗号后的值(实际上不是原始问题的一部分),可以使用:

代码语言:javascript
复制
octave> textscan (txt, [repmat("%3d", 1, 13) ",%1d"])
ans = 
{
  [1,1] =

    79
    82

  [1,2] =

    82
    78

  [1,3] =

    84
    32

[...]

  [1,14] =

0
1

}

票数 1
EN

Stack Overflow用户

发布于 2015-09-04 00:40:23

通过在shell中使用read一次读取三个字符,您可以很容易地做到这一点:

代码语言:javascript
复制
while IFS="${IFS}," read -rn3 val tail; do
    [[ $tail ]] && echo || printf '%s ' "$val"
done < file

这个实现假设如果我们在逗号之后遇到一个值,我们应该转到下一行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32387358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档