Help with iterations over large file.

9 views (last 30 days)
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.

Accepted Answer

Dyuman Joshi
Dyuman Joshi on 11 Dec 2023
If the format of the data is homogenous through the file, try this -
in = readlines('ascii.txt')
in = 10×1 string array
"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"
for k=2:5:size(in,1)
in(k:k+3,:) = flipud(in(k:k+3,:));
end
in
in = 10×1 string array
"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 "

More Answers (1)

Mathieu NOE
Mathieu NOE on 11 Dec 2023
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

Categories

Find more on File Operations in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!