Separate one column into 3 when finding a character

3 views (last 30 days)
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
OCDER
OCDER on 12 Oct 2017
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.
Mohamed Gamal
Mohamed Gamal on 14 Oct 2017
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!