How can I import a file that contains text and numerical values?

4 次查看(过去 30 天)
Hi Everyone,
I need your help. I'm writing a program that must pull data from a very large file that is formatted like this:
  • 1 1 10230435 3 red no no 1 5 yes
  • 3 4 23423423 4 blue no yes 2 3 no
  • 4 2 23433554 5 red no no 4 2 yes
  • 2 5 23434234 7 green no yes 4 5 no
This is just a sample. The real data actually has 15 columns and has thousands of rows. I have tried the following ways to read the data.
if true
% s = load('Mfile.m')
% fid = fopen('Mfile.m','r')
% s = fscanf(fid,'%s')
% fid = fopen('Mfile.m','r')
% s = fscanf(fid,'%f')
% s = xlsread('Mfile.xls')
end
The load and fscanf commands give me errors. The xlsread assigns all of the text NaN values. I'm running out of ideas, so any help is greatly appreciated.
Thanks!
  1 个评论
Ryan
Ryan 2013-8-6
Also I have tried textscan like this,
  • fid = fopen('Mfile.m','r')
  • a = textscan(fid,'%d %d %d %d %s %s %s %d %d %s')
But I receive a matrix with no values.

请先登录,再进行评论。

采纳的回答

dpb
dpb 2013-8-6
Lose the blanks in the format string--that's causing grief in trying to match them in the parsing...
>> fid=fopen('ryan.txt','r');
>> a=textscan(fid,'%d%d%d%d%s%s%s%d%d%s')
a =
Columns 1 through 7
[4x1 int32] [4x1 int32] [4x1 int32] [4x1 int32] {4x1 cell} {4x1 cell} {4x1 cell}
Columns 8 through 10
[4x1 int32] [4x1 int32] {4x1 cell}
>> a{1}
ans =
1
3
4
2
>> frewind(fid)
>> b=textscan(fid,'%d%d%d%d%s%s%s%d%d%s','collectoutput',1)
b =
[4x4 int32] {4x3 cell} [4x2 int32] {4x1 cell}
>> b{1}
ans =
1 1 10230435 3
3 4 23423423 4
4 2 23433554 5
2 5 23434234 7
>> fid=fclose(fid);
BTW, why on earth would you name a text file with an ".m" extension???

更多回答(1 个)

Azzi Abdelmalek
Azzi Abdelmalek 2013-8-6
fid=fopen('fic.txt')
out=textscan(fid,'%f %f %f %f %s %s %s %f %f %s')
fclose(fid)

类别

Help CenterFile Exchange 中查找有关 Number Theory 的更多信息

标签

产品

Community Treasure Hunt

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

Start Hunting!

Translated by