我有以下文本文件:
079082084072079032084069067072000000,0
0820780320490500032067072065082071069000,1
076065066032065083084000000000000000,0
08207803204905072082000000000000,1
08207803204905072082000000000000,1
08207803204905072082000000000000,1
07008308703207307303208006800000000000,0
0800670650320039050032072082000000000000,0
082078032056072082000000000000000000000,1
070083087032073073073000000000000,0
08207803208706906907506907808000000,1
08207803204905072082000000000000,1
077065073080840320770670707072073073,0
08207803204905072082000000000000,1
0800670650320039050032072082000000000000,0
08207803204905072082000000000000,1
我也需要矩阵:
X尺寸16x13
Y尺寸16x1
我想将文件的每一行分成13个值,例如:
079 082 084 072 079 032 084 069 067 072 000 000 000
是否可以使用textread函数将其导入倍频程?
如果没有,可以使用Linux bash命令完成吗?

最佳答案

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

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”将其作为字符串读取(处理时会遇到额外的麻烦,并且会降低性能,因为接下来您将处理单元格数组)。
因为您正在读取文件:
[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
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
[...]

或:
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
[...]

如果需要捕获逗号后的值(不是原始问题的一部分),可以使用:
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

}

08-28 04:26