>

바이너리 EDF 파일을 읽고 있는데 특정 지점에서 여러 개의 작은 EDF 파일로 분할 한 다음 일부 값을 조정해야합니다. 전반적으로 그것은 잘 작동하지만 파일을 읽을 때 2 문자 배열을 서로 결합합니다. 분명히 모든 후문도 손상됩니다. 막 다른 길에 있었고 내가 뭘 잘못하고 있는지 전혀 모른다.

문제를 포함해야하는 코드 부분 (쓰기) :

byt=fread(fid,8,'*char');
fwrite(tfid,byt,'*char');
fwrite(tfid,fread(fid,44));
%new number of records
s = records;
fwrite(tfid,s,'*char');
fseek(fid,8,0);
%test
fwrite(tfid,fread(fid,8,'*char'),'*char');

리더를 사용할 때 레코드를 결합합니다 ( fwrite(tfid,s,'*char') ) 다음 변수의 값과 함께. 이 전에 모든 변수가 올바르게 표시됩니다. 독자의 관련 코드 :

hdr.bytes      = str2double(fread(fid,8,'*char')');
reserved       = fread(fid,44);%#ok
hdr.records    = str2double(fread(fid,8,'*char')');
if hdr.records == -1
    beep
    disp('There appears to be a problem with this file; it returns an out-of-spec value of -1 for ''numberOfRecords.''')
    disp('Attempting to read the file with ''edfReadUntilDone'' instead....');
    [hdr, record] = edfreadUntilDone(fname, varargin);
    return
end
hdr.duration   = str2double(fread(fid,8,'*char')');


  • 답변 # 1

    어쩌면 문제는 당신의 문자 배열 s 입니다  8 글자가 없지만 파일에서 읽을 때 8 자일 것으로 예상합니다. 배열의 문자 수에 관계없이 fwrite 값의 수입니다.  파일에 기록합니다. 8 자 미만이면 파일에서 읽을 때 다음 데이터의 일부를 읽게됩니다.

    하나의 수정은 s 를 채우는 것입니다  쓰기 전에 공백이있는 경우 :

    s = [blanks(8-numel(records)) records];
    
    
    또한, 구문 '*char'   fread 를 사용할 때만 유효합니다 : *  출력 클래스가 'char' 여야 함을 나타냅니다.  게다가. fwrite 를 사용할 때 필요하지 않습니다 .

  • 이전 angular2 routing - 각도 2 오류 발생" '라우터 콘센트'는 알려진 요소가 아닙니다 - " 하위 모듈을 사용하는 경우 안내하십시오
  • 다음 bi publisher - 페이지에서 BI RTF 행 구분