How to read from a text file after skipping few characters in the file ?

조회 수: 2 (최근 30일)
Swarnava Pramanik
Swarnava Pramanik 2015년 3월 2일
편집: Stephen23 2015년 3월 3일
Suppose I have a file like this :
ID: 100 Strength: 800e+001 Time: 4536.83736
I want to read only the numerical values. How can I do this ?
  댓글 수: 4
Swarnava Pramanik
Swarnava Pramanik 2015년 3월 2일
Hi Stephen, I'm also getting an error
Error using textscan Invalid file identifier. Use fopen to generate a valid file identifier.
Stephen23
Stephen23 2015년 3월 2일
편집: Stephen23 2015년 3월 2일
This error indicates that fopen did not manage to open the file. Probable reasons are
  • the supplied filename is not the name of an actual file.
  • the file is not located in the current directory and you have not provided the fullpath.
You don't tell us anything about how your files are arranged so it is impossible for me to say which of these are the problem. However you can fix it quite easily yourself, by providing the correct filename/filpath as the first argument to fopen:
fid = fopen(filename,'rt'); % file is in current directory
If you need to generate the fullpath from path and filename strings, then you should use fullfile to do this:
fid = fopen(fullfile(pathstr,filename),'rt');

댓글을 달려면 로그인하십시오.

답변 (1개)

Stephen23
Stephen23 2015년 3월 2일
편집: Stephen23 2015년 3월 2일
Try this:
fid = fopen('temp.txt','rt');
C = textscan(fid,'%*s%f%*s%f%*s%f');
fclose(fid);
C{1} will contain the first column of numeric values, C{2} contains the second column, and C{3} contains the third. If you also decide that you want the field names, simply remove the asterisks from the format string.
A slightly more advanced solution is to keep the fieldnames, and turn them into a structure:
fid = fopen('temp.txt','rt');
C = textscan(fid,'%s%f%s%f%s%f');
fclose(fid);
C(1:2:end) = strrep(cellfun(@unique,C(1:2:end)),':','');
D = struct(C{:});
This lets you access the values by the same names as the have in the datafile, e.g.
D.Strength
With the addition of
C(2:2:end) = cellfun(@num2cell,C(2:2:end),'UniformOutput',false);
it could also be turned into a non-scalar structure, which might make your work even easier.
  댓글 수: 2
Swarnava Pramanik
Swarnava Pramanik 2015년 3월 3일
Hi Stephen,
I have this file and I need to access the data from this text file for my function. But am not able to access the data. I'm relatively new to matlab and am not accustomed with different inbuilt function matlab has.
Stephen23
Stephen23 2015년 3월 3일
편집: Stephen23 2015년 3월 3일
Thank you for providing the complete textfile: as we can't read minds or your computer screen, we need you to help us by giving as much information as possible so that we can actually know what you need to do. There are billions of possible "textfile" formats and ways of arranging and accessing data, and as you can see, what you wrote and what you have in the file are different. Keep that in mind when you ask questions in future.
Now that we have your actual file, it was easy to create the correct code to read the data using textscan into a cell array C:
fid = fopen('current.txt','rt');
C = textscan(fid,'%s%f', 'MultipleDelimsAsOne',true,...
'HeaderLines',1, 'Delimiter',':');
fclose(fid);
You can access the variable names (strings) in C{1}, ans the numeric data are stored in C{2}. We can access these values using indexing:
>> C{1}{3}
ans =
Eccentricity
>> C{2}(3)
ans =
0.0039239
Note that to get the string we use cell array indexing with curly braces {}, whereas to get the numeric values we must use array indexing with parenthses ().

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Text Files에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by