wrx 发表于 2007-4-18 01:11

文件读取数据的问题

刚开始用Matlab处理数据,碰到这样的问题:有一个dat文件,是由以string的形式存储的数字组成的.这个文件有4列,但前6行是文字说明,4列数字是从第8行开始的.现在我想把这个文件的前2列和文字说明提出来组成一个新的dat文件,我编了以下的程序,但出错了.
程序如下:
fidein=fopen('c:\Matlab_Auswertung_3D_1D\3.dat', 'rt')
inputtext=fscanf(fidein,'%s %s', )
inputext=inputtext'
disp(inputtext)
fclose(fidein)
fidaus=fopen('c:\Matlab_Auswertung_3D_1D\6.dat', 'wt')
fprintf(fidaus, ''%s %s\n', inputtext)
fclose(fidaus)

运行的结果报出以下的错误:
Error using:fscanf
out of memory   Type Help Memory
for your options


我不明白问题出在哪里,因为我想把文字和前2列都提出来,是不是还要用到命令fgetl, 应该怎么用啊?需要循环吗?

不好意思,刚开始用Matlab好多不明白,问了这么多,请高手帮忙解答一下,万分感谢

[ 本帖最后由 eight 于 2007-4-19 16:30 编辑 ]

eight 发表于 2007-4-18 10:16

原帖由 wrx 于 2007-4-18 01:11 发表
刚开始用Matlab处理数据,碰到这样的问题:有一个dat文件,是由以string的形式存储的数字组成的.这个文件有4列,但前6行是文字说明,4列数字是从第8行开始的.现在我想把这个文件的前2列和文字说明提出来组成一个新的 ...


文件太大?或者你的电脑内存太少?

应该不需要fgetl

wrx 发表于 2007-4-18 13:18

谢谢楼上的回答,我的文件是不小,数据有699990行.
但我现在还是不太明白,我想同时提取文字说明和前2行,用fscanf提取矩阵就可以了吗?能同时把文字说明提出来吗?能帮我看看具体程序有什么毛病吗?
非常感谢,我现在还是一头雾水.请高手指导

eight 发表于 2007-4-18 14:47

原帖由 wrx 于 2007-4-18 13:18 发表
谢谢楼上的回答,我的文件是不小,数据有699990行.
但我现在还是不太明白,我想同时提取文字说明和前2行,用fscanf提取矩阵就可以了吗?能同时把文字说明提出来吗?能帮我看看具体程序有什么毛病吗?
非常感谢,我现在 ...

应该可以吧,其实你自己做个小测试就可以了:先把数据文件行数减少(即删除大部分数据,留下前面的文字说明和几个有用的数据),然后用你的程序做做

wrx 发表于 2007-4-19 04:31

谢谢指导,我已经减少了数据文件行试过了,现在是不报错了,也能在新的文件中写入数据了.
但是结果不对.我的文件内容大概是这个形式:
Group 212.02.2006   Limei
Samples of datas: 50000

CH0CH1CH2CH3
0.0001230.000325   0.000378   0.000598
0.0009860.000256   0.000245   0.000698

我在减少了数据行,在原来的程序的基础上用了如下的命令:
inputtext=fscanf(fidein,'%c%c', ),也就是把%s换成了%c, 把inf换成了20
得到的结果是:

Gr
ou
p2
12
02
20
06
Li
me
is
依次类推

而我想要的结果是.
Group 212.02.2006   Limei
Samples of datas: 50000

CH0          CH1            
0.0001230.000325   
0.0009860.000256   


我是不是还是无法用fscanf实现上述的结果,我应该怎么样才能实现上述的结果呢,请高手帮忙!

wrx 发表于 2007-4-19 16:20

呵呵,在线等,谢谢了:handshake

eight 发表于 2007-4-19 16:31

原帖由 wrx 于 2007-4-19 16:20 发表
呵呵,在线等,谢谢了:handshake


本版关于文件读取的帖子有n多,你自己看看,然后参考一下,特别是精华贴

feifeifool 发表于 2007-4-19 16:56

回复 #5 wrx 的帖子

clc;clear;
fid = fopen('exp.txt', 'r');
fid_n=fopen('ex.dat','w');
while ~feof(fid)
    tline=fgetl(fid);
    if ~isempty(tline)
      if double(tline(1))>=48 && double(tline(1))<=57
            a=strread(tline);
            a(3:4)=[];
            fprintf(fid_n,'%f %f\n',a);
            clear a;
      elseif double(tline(1))==67
         =strread(tline,'%s %s %s %s');
         b=;
            fprintf(fid_n,'%s\n',b);
            clear b b1 b2 b3 b4;
      else
            fprintf(fid_n,'%s\n',tline);
      end
    else
      fprintf(fid_n,'%s\n',tline);
    end
end
fclose(fid);
fclose(fid_n);
有一点麻烦,没时间捉摸更好的,请大虾指教。
就当是一个参考吧
exp.txt取得内容是
Group 212.02.2006   Limei
Samples of datas: 50000

CH0CH1CH2CH3
0.0001230.000325   0.000378   0.000598
0.0009860.000256   0.000245   0.000698

wrx 发表于 2007-4-20 13:41

感谢楼上,我已经试过你的程序了,但是出现了问题,得到的结果是ans=3,而且也无法生成新的文件,即ex.dat,不知道是什么原因,还望继续指教.:handshake谢谢

feifeifool 发表于 2007-4-20 15:11

你用的是什么版本啊,我用的是matlab2006b,我试过了没有问题啊
是不是你的文件还有其他格式

[ 本帖最后由 feifeifool 于 2007-4-20 15:17 编辑 ]

wrx 发表于 2007-4-20 15:44

我用的MATLAB 7.0,我的原文件是dat,生成的文件也是dat.还有一些地方不大明白,                iif double(tline(1))>=48 && double(tline(1))<=57 是表示首字母有数值么?                        elseif double(tline(1))==67 表示什么意思呢?
a(3:4)=[]; 表示把3,4列都去了么?
b=; 表示的什么意思呢?

不好意思,这么多问题,谢谢了

feifeifool 发表于 2007-4-20 16:33

iif double(tline(1))>=48 && double(tline(1))<=57 是表示首字母有数值么?   
          是表示有数值                   
elseif double(tline(1))==67 表示什么意思呢?
         表示首字母有C
a(3:4)=[]; 表示把3,4列都去了么?
             是
b=; 表示的什么意思呢?
          把元胞数组的字符值取出来,中间夹一个空格

wrx 发表于 2007-4-20 19:27

谢谢你的解答,现在我基本明白了,但是我用MATLAB2006B也试了,得到的结果是ans=2,而且也无法生成新的文件,即ex.dat,请能指点一下是什么原因么?谢谢了

feifeifool 发表于 2007-4-22 08:54

回复 #13 wrx 的帖子

是不是文件的形式还包含其他的东西啊

wrx 发表于 2007-4-22 15:18

不好意思,我以前写的是文件的一个大体形式,因为之前我在家里,没有具体的数据,所以只是写了了一个文件的大体形式,这会影响程序的执行吗?还有执行以后并没有报错,只是ans=2,是不是表示程序本身没有问题呀?
下面是原文件的具体形式,这是一个dat文件:
Datenlogger V1.0 (08.11.2006) by limei
Samplerate: 20000.000000
Points: 3000000
Date of record: 02.12.2006

CH0 CH1 CH2 CH3
0.03272 0.05012 -0.05201 -0.08967
0.03076 0.05693 -0.05316 -0.08041
依次类推,数据行大概有5万行.

还请高手继续指导,万分感谢!
页: [1] 2
查看完整版本: 文件读取数据的问题