2017-09-26 4 views
2

셀 배열의 내용으로 텍스트 파일을 만들려고합니다. 아래는 MWE입니다. 파일 인수없이 fprintf을 사용하면 (예 : fprintf(['\t\\hline ',repmat('%s & ',1,size(A,1)),'\b\b','\\\\','\n'],A{:})과 같이 명령 창에서 인쇄하는 것만으로) 코드가 올바르게 작동합니다. 그러나 fopen으로 파일을 열고 같은 것을 쓰려고하면 이중 백 스페이스 (\b\b)가 작동하지 않습니다.fprintf에서 txt 파일 (MATLAB)에서 작동하지 않는 백 스페이스를 생성하는 ' b'

MWE :

내가 명령 창에서 무엇을 얻을
A = num2cell(rand(3,3)); 
fid = fopen('test.txt','w'); 
fprintf(fid,['\t\\hline ',repmat('%s & ',1,size(A,1)),'\b\b','\\\\','\n'],A{:}) 

:

\hline 7.922073e-01 & 9.594924e-01 & 6.557407e-01 \\ 
\hline 3.571168e-02 & 8.491293e-01 & 9.339932e-01 \\ 
\hline 6.787352e-01 & 7.577401e-01 & 7.431325e-01 \\ 

나는 'TEST.TXT'파일의 내용물 :

\hline 7.922073e-01 & 9.594924e-01 & 6.557407e-01 & \\ 
\hline 3.571168e-02 & 8.491293e-01 & 9.339932e-01 & \\ 
\hline 6.787352e-01 & 7.577401e-01 & 7.431325e-01 & \\ 

을 붙여 넣기 할 때 이 질문에 대한 'test.txt'의 내용은 .txt 파일을 볼 때 정확하게 표시되는 것이 아니라 일부 상자가 뒷부분 보행이 적용되어야합니다 (아래 그림). 백 스페이스를 사용하여 .txt 파일에서 &을 삭제하고 삭제하려면 어떻게해야합니까? 파일이 정상적으로 작동에 서면 어떻게 그렇게 생각하지 않습니다

text

+0

'A '의 내용이 부동 소수점 숫자 인 경우'% s' 대신'% f'을 사용해야합니다. – rahnema1

+0

@ rahnema1 그게 문제를 해결하지 못합니다. – Rodrigues

+0

[관련] (https://stackoverflow.com/questions/43299376/writing-a-backspace-in-a-file/43299424). 백 스페이스의 ASCII 코드를 파일에 씁니다. – rahnema1

답변

1

입니다. fprintf은 데이터를 역 추적하거나 해석하지 않고 순서대로 수신 한 각 문자를 파일에 씁니다. '\b'의 원시 바이트 값 (char(8))은 모든 파일에서 백 스페이스를 나타내지 않습니다 (예 : 이미지/이진 데이터). 말하듯이 실제 텍스트 편집기 (예 : Notepad 또는 TextEdit이 아닌)에서 파일을 열면 물음표 또는 열린 상자 또는 "BS"로 표시되는 백 스페이스가 실제로 포함되어 있음을 알 수 있습니다. 터미널은 Matlab 명령 창과 마찬가지로 일반적으로 텍스트를 표시하기 전에 텍스트를 사전 처리합니다. This page은 약간의 배경을 제공합니다.

Matlab에서 fprintf의 동작을 변경하는 방법을 알지 못합니다. 텍스트를 파일로 인쇄하기 전에 사전 처리해야하거나 파일을 후 처리하여 백 스페이스를 적용하고 다시 작성해야합니다. 내 마음에

이에 더 읽기 솔루션입니다 : 당신은을 사용하는 경우

A = num2cell(rand(3,3)); 
fid = fopen('test.txt','w'); 
str = sprintf(['\t\\hline ',repmat('%f & ',1,size(A,1)),'\b\b','\\\\','\n'],A{:}); 
fprintf(fid,'%s',str); 
fclose(fid); 

: 당신이 정말로 백 스페이스를 유지하려는 경우 당신은 또한이 같은 뭔가를 할 수

A = num2cell(rand(3,3)); 
fid = fopen('test.txt','w'); 
str = repmat('%f & ',1,size(A,1)); 
fprintf(fid,['\t\\hline ',str(1:end-2),'\\\\','\n'],A{:}); 
fclose(fid); 

코드를 질문에 사용하고 OS X 또는 Linux에서 unix 명령을 사용하여 (here에서) 적용된 백 스페이스가있는 새 파일을 작성하십시오.

unix('cat test.txt | col -b > test2.txt') 
관련 문제