Matlab一次从文本文件中读取一位数

时间:2015-03-07 19:47:25

标签: matlab

我有一个包含字节值01的文件,其格式没有任何空格,例如1010111101010010010101。我想从那些中创建[1, 0, 1, ...]向量,一次读取一位数。我怎样才能做到这一点?我尝试使用fscanf(fileId,'%c'),但我得到ASCII代码而不是实际值。另一方面,'%d'将整个文件读作一个数字。

我也尝试过写文件:

fprintf(file1,'%d ',matrix); //notice the space after `%d`

并阅读

fscanf(file2,'%d');

但是我得到了Nx1矩阵,我希望将其保留为1xN

我可以将它转换为水平,但我仍然需要在数字之间添加空格,如果可能的话我不想这样做。

1 个答案:

答案 0 :(得分:0)

您可以轻松地将ascii char代码转换为整数格式,如下所示:

   text = fscanf(fileId,'%c') - '0' ; 

请注意,如果有的话,您也会以这种方式选择行尾字符。

如果您的文件中只有0/1,使用fileread将完成相同的操作,但也会捕获EOL字符:

 text = fileread('test.txt');
 text = text' - '0';

您还可以使用textread

阅读整个文件
text = textread('test.txt','%s');
text = char(text) - '0' ;

现在,行返回单元格数组,每行一行。 char然后将单元格数组转换为常规char数组。这不会捕获EOL字符,但如果行的长度不相等,char将追加空格(ascii代码32)。

最后,您还可以循环读取并在每次迭代时应用fgetl,直到函数返回-1。

  while ~isnumeric(c)
     c = fscanf(fileId,'%c') 
     c - '0';
  end

这可以避免读取EOL字符并附加空格,但是您需要处理连接数据。