Help with iterations over large file.
조회 수: 9 (최근 30일)
이전 댓글 표시
Hello everyone, I have a huge ascii.txt wind file with the following format.
time = 0 hour
2 3 4 5 6 7
0 9 8 7 6 5
7 6 5 4 3 2
9 8 7 6 5 4
time = 3 hour
2 3 4 5 6 7
0 9 8 7 6 5
7 6 5 4 3 2
9 8 7 6 5 4
The thing is that I need to flip the rows from each block between hours, like this
time = 0 hour
9 8 7 6 5 4
7 6 5 4 3 2
0 9 8 7 6 5
2 3 4 5 6 7
time = 3 hour
9 8 7 6 5 4
7 6 5 4 3 2
0 9 8 7 6 5
2 3 4 5 6 7
I can do this for one block by
X = readlines('xwind.txt');
Y = X(2:5);
Y = flip(Y);
But I couldn’t write the loop for the entire file (4865x1 string).
Any help would be much appreciated.
댓글 수: 0
채택된 답변
Dyuman Joshi
2023년 12월 11일
If the format of the data is homogenous through the file, try this -
in = readlines('ascii.txt')
for k=2:5:size(in,1)
in(k:k+3,:) = flipud(in(k:k+3,:));
end
in
추가 답변 (1개)
Mathieu NOE
2023년 12월 11일
hello
try this
I choosed to store each Y array into a cell
D=readlines('data.txt'); % read as string array
[eof] = size(D,1); % last row number (end of file)
ixP1=find(contains(D,'time')); % find the "time" line
ixP1=[ixP1 ; eof]; % add end of file line number
for k=1:numel(ixP1)-1
ind = ixP1(k)+1:ixP1(k+1)-1;
Y = str2num(char(D(ind)));
Y = flip(Y);
out{k} = Y; % store Y flipped in cell array
end
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 File Operations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!