Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

how to load a txt data

Asked by Mohammad on 3 Feb 2013

I cannot load following txt data into matlab, I have tried many functions,

BEGIN IONS
TITLE=445.1185_908.046
PEPMASS=445.1185
RTINSECONDS=908.046
CHARGE=1
355.074005126953 543
223.07470703125 59
150.026992797852 97
END IONS

I would like sort then this data as

TITLE	   PEPMASS  RTINSECONDS	CHARGE			
445.118    445.118  908.046	1       355.0740  223.0747  150.0269

1 Comment

Image Analyst on 3 Feb 2013

You didn't say what you want. For example, is Title a string? Or two floating point numbers separated by an underline? Is CHARGE = 1 or does it = [1, 355.074005126953, 543, 223.07470703125, 59, 150.026992797852, 97]? Or do you simply want a cell array of strings where each string is one line of the file? No one can give a complete answer unless they know things like that.

Mohammad

Tags

Products

No products are associated with this question.

3 Answers

Answer by Azzi Abdelmalek on 3 Feb 2013
Edited by Azzi Abdelmalek on 3 Feb 2013
fid = fopen('file.txt');
line1 = fgetl(fid);
res=line1;
while ischar(line1)
  line1 = fgetl(fid);
  res =char(res,line1);
end
fclose(fid);
display(res)

0 Comments

Azzi Abdelmalek
Answer by Miroslav Balda on 4 Feb 2013

Your code doesn't create or print data in the required format. The following code does it. The input data are in file IONS.txt:

% IONS.txt   = comment 
BEGIN IONS
TITLE=445.1185_908.046
PEPMASS=445.1185
RTINSECONDS=908.046
CHARGE=1
355.074005126953 543
223.07470703125 59
150.026992797852 97
END IONS

The following program creates the output that you required:

%   IONSrw.m
%%%%%%%%%%%%%%    4.2.2013
clc
clear
%           Function ffread.m is available from File Exchange 
%           www.mathworks.com/matlabcentral/fileexchange/9034
ffread('IONS.txt', '=');        %   file name
ffread(2,'');                   %   skip 1st line
TI = ffread(2,'');
PE = ffread(2,'');
RT = ffread(2,'');
CH = ffread(2,'');
d  = ffread(6,'');
ffread(2,'');                   %   skip lastline
%
w  = TI{2};
n  = findstr(w,'_');
fprintf('%s       %s   %s %s\n', TI{1}, PE{1}, RT{1}, CH{1});
fprintf('%s    %s  %s     %s       %s %s %s\n', ...
  w(1:n-1), PE{2}, RT{2}, CH{2}, d{1}, d{3}, d{5});  

THe program uses function ffread.m for free format reading of text files of the known structure.

2 Comments

Miroslav Balda on 4 Feb 2013

The result is

TITLE       PEPMASS   RTINSECONDS CHARGE
445.1185    445.1185  908.046     1       355.074005126953 223.07470703125 150.026992797852

Only the last number is in the same line as the other numbers.

Miroslav Balda on 5 Feb 2013

You have to ask properly, otherwise you get an answer not fulfilling your wishes.

Miroslav Balda
Answer by Miroslav Balda on 5 Feb 2013

The general program for processing files of presented structure follows:

%   IONS.m     Answers:   Mohamad, 3.2.2013, 12:14,  Tags: load txt data
%%%%%%%%%%%%%%      4.2.2013
%         Reads txt files using ffread.m for free format input
clc
clear
%           Function ffread.m  is available from File Exchange
%            www.mathworks.com/matlabcentral/fileexchange/9034
%           Function inp.m  is available from File Exchange
%            www.mathworks.com/matlabcentral/fileexchange/9033
file = inp('File name','IONS.txt','%s',5);
fprintf('     Processing of the file %s\n\n', file);
ffread(file, '=');              %   file name 
while 1                 %   CYCLE OF LINES
  w  = ffread(1,'');          %   skip 'BEGIN'
  if w==127, break,end        %   the end of data
  ffread(1,'');               %   skip 'IONS'
  TI = ffread(2,'');
  n  = findstr(TI{2},'_');    %   position of char '_'
  PE = ffread(2,'');
  RT = ffread(2,'');
  CH = ffread(2,'');
  fprintf('%s       %s   %s  %s\n', TI{1}, PE{1}, RT{1}, CH{1});
  w = RT{2};
  w = [w repmat(' ',1,7-length(w))];
  fprintf('%s    %s  %s      %s     ', TI{2}(1:n-1), PE{2}, w, CH{2})
  while 1
      d  = ffread(2,'');      %   read one line
      if double(d{1}(1))<58   %   digit character
          fprintf('  %s',  d{1});
      else
          fprintf('\n');      %   skip line with 'END IONS'
          break
      end
  end
end

The processing of the file from the Comment 3 yielded the following output:

       File name = IONS.txt => IONS2.txt
     Processing of the file IONS2.txt

TITLE PEPMASS RTINSECONDS CHARGE 445.1185 445.1185 908.046 1 355.074005126953 223.07470703125 150.026992797852 TITLE PEPMASS RTINSECONDS CHARGE 610.1826 610.1826 -1 1 TITLE PEPMASS RTINSECONDS CHARGE 536.1563 536.1563 -1 1 TITLE PEPMASS RTINSECONDS CHARGE 519.1368 519.1368 -1 1 TITLE PEPMASS RTINSECONDS CHARGE 446.1154 446.1154 -1 1 TITLE PEPMASS RTINSECONDS CHARGE 355.0693 355.0693 933.396 1 281.057800292969 269.013793945313 TITLE PEPMASS RTINSECONDS CHARGE 429.0904 429.0904 939.756 1 361.027008056641 372.740997314453 148.073593139648 324.981506347656 327.983703613281 TITLE PEPMASS RTINSECONDS CHARGE 536.1701 536.1701 -1 1 TITLE PEPMASS RTINSECONDS CHARGE 519.1362 519.1362 -1 1 TITLE PEPMASS RTINSECONDS CHARGE 446.1246 446.1246 956.694 1 283.046813964844 416.035797119141 147.065902709961 356.092590332031 400.990814208984 TITLE PEPMASS RTINSECONDS CHARGE 372.1053 372.1053 959.136 1 283.046813964844 147.065902709961 356.092590332031 343.017700195313 325.000305175781 294.950592041016 299.058197021484 223.085906982422 359.019104003906 326.973602294922 223.974197387695 268.014495849609 TITLE PEPMASS RTINSECONDS CHARGE 504.1139 504.1139 -1 1 TITLE PEPMASS RTINSECONDS CHARGE 391.2884 391.2884 -1 1

It is necessary to mention that the lines with many long numbers are here formated in such a way that lines are broken on new line(s).

5 Comments

Miroslav Balda on 6 Feb 2013

What about to run my program you yourself? At the end of my answer, there was a compact block starting with text TITLE PERMASS ... It is a deformed output. However, never mind. I'll try to send it once more. Let's hope it is OK, now:

       File name = IONS.txt => IONS2.txt
     Processing of the file IONS2.txt
TITLE       PEPMASS   RTINSECONDS  CHARGE
445.1185    445.1185  908.046      1       355.074005126953  223.07470703125  150.026992797852
TITLE       PEPMASS   RTINSECONDS  CHARGE
610.1826    610.1826  -1           1     
TITLE       PEPMASS   RTINSECONDS  CHARGE
536.1563    536.1563  -1           1     
TITLE       PEPMASS   RTINSECONDS  CHARGE
519.1368    519.1368  -1           1     
TITLE       PEPMASS   RTINSECONDS  CHARGE
446.1154    446.1154  -1           1     
TITLE       PEPMASS   RTINSECONDS  CHARGE
355.0693    355.0693  933.396      1       281.057800292969  269.013793945313
TITLE       PEPMASS   RTINSECONDS  CHARGE
429.0904    429.0904  939.756      1       361.027008056641  372.740997314453  148.073593139648  324.981506347656  327.983703613281
TITLE       PEPMASS   RTINSECONDS  CHARGE
536.1701    536.1701  -1           1     
TITLE       PEPMASS   RTINSECONDS  CHARGE
519.1362    519.1362  -1           1     
TITLE       PEPMASS   RTINSECONDS  CHARGE
446.1246    446.1246  956.694      1       283.046813964844  416.035797119141  147.065902709961  356.092590332031  400.990814208984
TITLE       PEPMASS   RTINSECONDS  CHARGE
372.1053    372.1053  959.136      1       283.046813964844  147.065902709961  356.092590332031  343.017700195313  325.000305175781  294.950592041016  299.058197021484  223.085906982422  359.019104003906  326.973602294922  223.974197387695  268.014495849609
TITLE       PEPMASS   RTINSECONDS  CHARGE
504.1139    504.1139  -1           1     
TITLE       PEPMASS   RTINSECONDS  CHARGE
391.2884    391.2884  -1           1     

The output displayed here is a copy of the screen. The first line of the output came from the function inp.m that offered to read the file IONS.txt. I changed this offer putting the new neme of the file from the keyboard IONS2.txt. This file was identical with yours. The second line of the outpt serves as a title of the task identifying the processed data.

Should you want to have the output in a file, you had to modify a bit my program.

Miroslav Balda on 7 Feb 2013

The output of the program IONS.m should be on the screen provided your data are stored in the file named IONS2.txt stored in the same directory as the program IONS. You can't find results somewhere else. If you like to put them into a file, you need to modify all fprintf statements in IONS.m into fprintf(fid,...), where fid has been assigned by you calling fid=fopen('name of output file','w'), and dots correspond to the original text in the command. The program should be appended by the statement fclose(fid);

If the data file IONS2.txt does not exist in the current directory, a warning should appear on the screen. If the output from your last Comment be true, your file IONS2.txt were empty. It had the following form in my tests:

% IONS2.txt
%%%%%%%%%%%     5.2.2013
    BEGIN IONS
    TITLE=445.1185_908.046
    PEPMASS=445.1185
    RTINSECONDS=908.046
    CHARGE=1
    355.074005126953 543
    :
    : etc
    :
    BEGIN IONS
    TITLE=391.2884_-1
    PEPMASS=391.2884
    RTINSECONDS=-1
    CHARGE=1
    END IONS
Miroslav Balda on 10 Feb 2013

You have to name your data by any name (or use the names the files already have). Then run the file IONS.m and instead of the name IONS.txt offered by the program, you enter from a keyboard the name of the file you wish to process.

Have you the data in the named file? Use the full name of the file as an answer to the offer

 File name = IONS.txt =>  % here insert the full name of your data file

It is all. I am unable to help you more. If you don't get any result, ask somebody in the vicinity to help you to enter the name of your file. Good luck!

Miroslav Balda

Contact us