我有一个包含字节值0
或1
的文件,其格式没有任何空格,例如1010111101010010010101
。我想从那些中创建[1, 0, 1, ...]
向量,一次读取一位数。我怎样才能做到这一点?我尝试使用fscanf(fileId,'%c')
,但我得到ASCII代码而不是实际值。另一方面,'%d'
将整个文件读作一个数字。
我也尝试过写文件:
fprintf(file1,'%d ',matrix); //notice the space after `%d`
并阅读
fscanf(file2,'%d');
但是我得到了Nx1
矩阵,我希望将其保留为1xN
。
我可以将它转换为水平,但我仍然需要在数字之间添加空格,如果可能的话我不想这样做。
答案 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字符并附加空格,但是您需要处理连接数据。