求助。利用matlab选着行读取大文本数据

有一个很大的文本源数据,无法直接导入matlab中,我用vim打开数据的情况如图,

我要读取中间那些比较长的闪电定位结果的行,一共有5万多行,在matlab里我应该怎么编写程序?

% 1. 打开文本文件;

% 2. 按行读入文本数据;

% 3. 排除没有等号(=)的行;

% 4. 在有等号的行中按空格和等号分离数据;

% 5. 取出有用数据;

% 6. 循环到文件末尾,关闭文件。

% 取出数据:纬度 经度 强度 陡度 误差

fn = 'flash_locate2006_08_25_18_20_19.txt';  % 注意文件路径
fid = fopen(fn,'r');
data = [];
idx = 1;
while ~feof(fid)
    tl = fgetl(fid);
    id = findstr(tl,'=');
    if ~isempty(id)
        temp = {};
        id = 1;
        remain = tl;
        while true
            [str, remain] = strtok(remain, ' =');
            if isempty(str),  break;  end
            temp{id} = str;
            id = id+1;
        end;
        use = 5:2:13;
        tp = [];
        for k = use
            tp = [tp str2num(temp{k})];
        end;
        data(idx,:) = tp;
        idx = idx+1;
    end;
end;

     

追问

第五个语句while后面的那个波浪形符号是怎么打出来的?怎么我放进去就成了上标的了··然后运行的时候说下标分配尺寸不匹配

追答

% 键盘左上角 Shift + ~

追问

这个我知道,可是我输进去的是上标的形式,对程序的执行有影响吗?

追答

% 直接从上面选中拷贝就行了

追问

粘贴后也是上标,中英文切换都是上标

追答fn = 'flash_locate2006_08_25_18_20_19.txt';  % 注意文件路径
fid = fopen(fn,'r');
data = [];
idx = 1;
tl = 'start';
%while ~feof(fid)
while length(tl)>1          % 换种方式,文件结束时,tl = -1
    tl = fgetl(fid);
    id = findstr(tl,'=');
    if ~isempty(id)
        temp = {};
        id = 1;
        remain = tl;
        while true
            [str, remain] = strtok(remain, ' =');
            if isempty(str),  break;  end
            temp{id} = str;
            id = id+1;
        end;
        use = 5:2:13;
        tp = [];
        for k = use
            tp = [tp str2num(temp{k})];
        end;
        data(idx,:) = tp;
        idx = idx+1;
    end;
end;
fclose(fid);         % 忘了关闭文件,补上

追问

提示错误 Subscripted assignment dimension mismatch.

然后只读出295个数据,整个文件的闪电数据是好几万个的

追答

% 能否把文件按附件传上来

追问

http://pan.baidu.com/s/1gdvHO6B
文件比较大,2G多,还要求不可外传,我截取的其中百分之一的量,放在网盘里了

追答

% 文本数据中,部分陡度数据错误,含有“$”符号

% 可在分离数据时排除 [str, remain] = strtok(remain, ' =$');

fn = '闪电数据.txt';  % 注意文件名和路径
fid = fopen(fn,'r');
data = [];
idx = 1;
tl = 'start';
%while ~feof(fid)
while length(tl)>1          % 换种方式,文件结束时,tl = -1
    tl = fgetl(fid);
    id = findstr(tl,'=');
    if ~isempty(id)
        temp = {};
        id = 1;
        remain = tl;
        while true
            [str, remain] = strtok(remain, ' =$');   % 添加了分离符号 $
            if isempty(str),  break;  end
            temp{id} = str;
            id = id+1;
        end;
        use = 5:2:13;
        tp = [];
        for k = use
            tp = [tp str2num(temp{k})];
        end;
        data(idx,:) = tp;
        idx = idx+1;
    end;
end;
fclose(fid);

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网