티스토리 뷰

참고 : 질문에 지정된 최신 파일 형식 (예 : 날짜와 시간 값 사이의 쉼표)을 사용하도록 답변을 업데이트했습니다. 또한 열 수는 알고 있지만 행 수는 가변적 인 매우 큰 파일을 처리하기 위해 아래 코드를 작성했습니다.

먼저 다음 업데이트 된 코드를 사용하여 파일을 읽어야합니다 ( FGETS 함수를 사용하여 맨 위 줄을 저장함 ).

fid = fopen('D:\file.txt','rt');  %# Open the file
topLine = fgets(fid);             %# Read the top line and store it in a string
data = textscan(fid,'%f','Delimiter',',/:');  %# Read the data
fclose(fid);                      %# Close the file

다음으로 data알려진 데이터 열 수를 사용하여 모양을 변경해야합니다 ( 날짜 및 시간 열은 계산 하지 않음).

N = 74;  %# Number of columns of data after the date and time
data = reshape(data{1},N+6,[])';

이제 data처음 6 개 열에 날짜 및 시간 정보 (월, 일, 연도,시, 분 및 초)가 포함되고 다른 모든 데이터가 나머지 N열에 있는 행렬이 있습니다. 날짜 및 시간 값으로 작업을 수행해야하는 경우 DATENUM , DATESTRDATEVEC같은 다른 형식으로 변환하는 방법을 알아 내기 위해 다음 함수를 살펴볼 수 있습니다 .

의 값을 수정 한 후 datafor 루프와 FPRINTF 함수 를 사용하여 다시 저장할 수 있습니다 .

fid = fopen('newfile1.txt','wt');  %# Open the file
fprintf(fid,'%s',topLine);         %# Print the top line
for i = 1:size(data,1)             %# Loop over the rows of data
  fprintf(fid,'%d/%d/%d, %d:%d:%d',data(i,1:6));  %# Print the date
    fprintf(fid,', %.1f',data(i,7:end));            %# Print the data
      fprintf(fid,'\n');                              %# Print a newline
      end
      fclose(fid);                       %# Close the file
      

86400x80 행렬로 위의 코드를 실행했는데 data데이터를 파일에 쓰는 데 약 30 초가 걸렸습니다.

-------------------

dlmwrite는 아시다시피 ASCII 텍스트 파일에 변수 (예 : M 배열)를 씁니다. 함수에 대한 설명서를 확인하여 구분 문자를 설정하는 방법 (각 행의 값 사이에서, 가져 오기) 및 기존 파일에 추가하는 방법을 알아보십시오.

헤더 행을 작성하려면 문자열 배열을 설정하고 채우고 dlmwrite를 사용하여 출력 파일에 쓰는 것이 좋습니다.

이제 파일의 나머지 (M 배열과 날짜 / 시간의 선행 열 2 개)를 작성하려면 M 크기와 2 개의 추가 열을 더한 임시 배열을 만들어야합니다. 데이터 값은 부동 소수점 숫자이고 날짜와 시간은 일종의 구조화 된 데이터 (아마도 문자열)이므로 Mtemp는 문자열 배열이어야한다고 생각합니다. 생성 한 후에는 단일 dlmwrite 문을 사용하여 출력 파일에 추가 할 수 있습니다.

num2str은 벡터에서 원하는대로 작동하지만 값 사이에,를 넣도록 강제 할 수 있는지 확실하지 않습니다. 그러나 지정한 형식으로 숫자를 쓸 수 있습니다.

이것이 원하는 출력을 제공하지 않거나 배열이 복사 및 확장하기에 너무 크거나 제안 된 솔루션이 마음에 들지 않는 다른 이유가있는 경우 출력을 작성하기 위해 루프를 작성해야 할까 봐 걱정됩니다. 한 번에 한 줄씩, 저수준 파일 쓰기 기능을 사용합니다.

문안 인사



출처
https://stackoverflow.com/questions/1905061
댓글
공지사항
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31