如何从文件到矩阵读取数字,没有分隔符

时间:2014-01-04 12:43:58

标签: matlab octave

我有以下格式存储的数据,没有分隔符和数字域{0,1}。使用八度音程,取数字并将它们存储在martix中对我来说是一个问题。我没有管理下面的scnerio。那么,我怎样才能将这些数字存储在矩阵中,如下所述?

Data in File, 32 x 32 digits

00000000000000000000000000000000
00000000001111110000000000000000
        ...
00000010000000100001000000000000


how to store data
matrix[1, 1:32] = 00000000000000000000000000000000
matrix[2, 1:32] = 00000000001111110000000000000000

            . . .
matrix[32, 1:32] = 00000010000000100001000000000000

OR

matrix[1, 1:32] = 00000000000000000000000000000000
matrix[1, 33:64] = 00000000001111110000000000000000

    . .  .
matrix[1, 993:1024] = 00000010000000100001000000000000

4 个答案:

答案 0 :(得分:0)

一种可能的解决方案是首先将数据作为字符串读取:

octave> textread('foo.dat', '%s', 'headerlines', 2)
ans = 
{
  [1,1] = 00000000000000000000000000000000
  [2,1] = 00000000001111110000000000000000
  ...
}

如果这些是小数的二进制表示,您可能会发现bin2dec()有用。

答案 1 :(得分:0)

这可以解决问题(虽然我不知道freadarrayfun的第三个输入与Octave一起使用的效果如何,在Matlab上进行了测试):

fid         = fopen('a.txt','rt');
str         = fread(fid,inf,'char=>char');
st          = fclose(fid);
qrn         = str==10|str==13;
str(qrn)    = [];
yourMat     = reshape(arrayfun(@str2num,str),find(qrn,1)-1,[]).'

答案 2 :(得分:0)

假设您没有标题行,您可以将文本作为字符串的字符串读取,如下所示:

C = textread('names.txt', '%s'); 

然后,通常对于从0到9的所有数字,您可以将其转换为如下矩阵:

M = vertcat(S{:})-'0';

如果性能是一个问题,您可以查看导入字符串的其他方法,但这应该可以完成工作。

答案 3 :(得分:0)

我从未使用过Matlab,但是假设它以与Octave相同的方式读取文件,如果使用外部工具就可以了,您可以尝试使用文本编辑器替换字符以添加分隔符。你可以改变每一个" 0"到" 0,"以及每一个" 1"到" 1,"然后只需加载文件。

(这会在每一行的末尾添加分隔符。如果产生问题,您可以尝试成对替换文本" 00" - >" 0,0& #34;" 10" - >" 1,0"依此类推)

如果文件对于普通编辑器来说太大,您甚至可以尝试用sed替换字符:

sed -i 's/charactertoreplace/newcharacter/g' yourfile.txt