Separate one column into 3 when finding a character

I have one column line but huge data >400,000 points separated by a character /& like this
1
2
3
4
/&
5
6
7
8
/&
9
10
11
12
/&
I want to split this one column into three columns stops at the separator/& like :
1 5 9
2 6 10
3 7 11
4 8 12

 Accepted Answer

OCDER
OCDER on 11 Oct 2017
Edited: OCDER on 12 Oct 2017
New Answer:
FID = fopen('data.txt');
T = fscanf(FID, '%f');
fseek(FID, 0, 'bof');
Data = fscanf(FID, [repmat('%f\n', 1, length(T)) '/&'], [length(T) Inf]);
fclose(FID);
Old Answer:
FID = fopen('data.txt', 'r');
Data = fscanf(FID, '%f\n%f\n%f\n%f\n/&', [4 Inf])
fclose(FID);
Data =
1 5 9
2 6 10
3 7 11
4 8 12

3 Comments

Dear Donald:
The problem is that I do not have just four rows from my data I have unknown number sometimes more than 100,000 row.
Also I have tried the code but it could not see the separators "/&"
But anyway thank you for your effort.
Hi Mohamed, try the new answer and see if this works. It uses the first scan to determine how many entries there are until the first non-double character (/&), and then uses that information to read in all the data into a Mx3 array.
Dear Donald I found the answer based on your comment 1-I have used fscanf to count the numbers 2-Use reshape fuction to split the 1 column to 3 column 3-use Save to save this regular shape matrix. here is the code:
fid3=fopen('c:\mat3\CH_AN1.dat'); % reshape the one column matrix into "3 Channels" T = fscanf (fid3, '%15E'); % to read ascii data L=(length (T)/3); B = reshape(T,L,3); save 'c:\mat3\save20.dat' B -ascii fclose(fid3);
Thanks alot for your help

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!