在MATLAB中怎样读取TXT混合文件中的数据

我用ENVI将一幅遥感图像存成了TXT文件,在MATLAB中怎样读取它的数据啊?而且图像很大,它的数据又没分行。
;
; ENVI ASCII Output of file: [Memory1] (1368x896x3) [Wed Aug 05 11:04:25 2009]
; File Dimensions: 1368 samples x 896 lines x 3 bands
; Line Format : (1368i4)
;
46 52 57 58 54 49 46 45 42 44 45 46 45 46 48 50 58 64 71 74 71 66 63 62 58 58 59 61 64 68 70 72 81 83 77 62 52 53 60 66 78 78 76 73 69 66 62 60 56 57 61 64 63 63 70 79 82 83 84 85 86 85 84 84 78 75 77 79 70 58 62 76 74 74 73 73 72 71 71 71 74 74 74 75 76 77 79 80 81 78 73 71 72 74 74 75 78 77 76 77 79 82 84 85 88 82 77 76 74 72 75 81 77 83 85 81 75 72 68 64 56 62 69 71 70 71 75 80 79 83 87 89 89 89 91 94 96 88 83 86 91 89 83 79 84 88 92 91 87 83 80 81 76 77 80 83 86 89 92 93 94 91 87 87 90 91 89 86 86 86 85 85 85 86 86 87 84 82 80 79 80 83 86 88 89 89
不行啊,用load还是会出错,读不出来啊

下面这个函数是取filein中的第line行写入fileout中的程序,如果想实现取特定几行,只要稍微修改一下就可以。
function dataout=dataread(filein,fileout,line)
fidin=fopen(filein,'r');
fidout=fopen(fileout,'w');
nline=0;
while ~feof(fidin) % 判断是否为文件末尾
tline=fgetl(fidin); % 从文件读行
nline=nline+1;
if nline==line
fprintf(fidout,'%s\n',tline);
dataout=tline;
end
end
fclose(fidin);
fclose(fidout);
%%%%%%%%%%%%%%%%%%%%%%%%%%
调用格式:dataout=dataread(filein,fileout,line)
如果你的txt文件数据是矩阵形式的,而没有其它的文字,用下面的程序就可以读任意行任意列的数据
a=textread('ll.txt');
t=a(1:43,4:10);
1:43是1到43行,4:10是4到10列的数据,当然也可以只读一个数据,如果你的matlab没有textread函数,直接从mathworks网站下载就行。
根据txt文档不同种类介绍不同的读取数据方法
一、纯数据文件(没有字母和中文,纯数字)
对于这种txt文档,从matalb中读取就简单多了
例如test.txt文件,内容为“17.901 -1.1111 33.045
17.891 -1.1286 33.045
17.884 -1.1345 33.045”
可以在command window中输入load test.txt ,然后就会产生一个test的数据文件,内容跟test.txt中的数据一样;另一种方法是在file/import data....../next/finish 也可产生一个叫test的数据文件。
二、中英文和数据如test1.txt
vib.hit.edu.cn
1 11 111 1111
2 22 222 2222
3 33 333 3333
4 44 444 4444
5 55 555 5555”
这样的文件怎么读入数据呢?
方法有多种,现举两个比较简单实用的。

方法一:
file/import data....../next/finish
>> whos
Name Size Bytes Class
data 5x4 160 double array
textdata 4x1 300 cell array
Grand total is 54 elements using 460 bytes
>> data
data =
1 11 111 1111
2 22 222 2222
3 33 333 3333
4 44 444 4444
5 55 555 5555
>> textdata
textdata =

方法二:
[a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)
说明:%s可以是其他形式,跟读入的数据类型有关,比如这里也可以用%n,%f等。
这里%s的个数和[a1,a2,a3,a4]对应。
>> [a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)
a1 =
'1'
'2'
'3'
'4'
'5'

a2 =
'11'
'22'
'33'
'44'
'55'

a3 =
'111'
'222'
'333'
'444'
'555'

a4 =
'1111'
'2222'
'3333'
'4444'
'5555'
因以字符串的形式读入,所以有''。
————————————————————————————————
三、中文 数据 英文混乱如test.txt
说明:这种内容格式的文件用上面的方法是不行的。
以下是由chinamaker编写的一种方法:

fidin=fopen('test.txt'); % 打开test2.txt文件
fidout=fopen('mkmatlab.txt','w'); % 创建MKMATLAB.txt文件
while ~feof(fidin) % 判断是否为文件末尾
tline=fgetl(fidin); % 从文件读行
if double(tline(1))>=48&&double(tline(1))<=57 % 判断首字符是否是数值
fprintf(fidout,'%s\n\n',tline); % 如果是数字行,把此行数据写入文件MKMATLAB.txt
continue % 如果是非数字继续下一次循环
end
end
fclose(fidout);
MK=importdata('MKMATLAB.txt'); % 将生成的MKMATLAB.txt文件导入工作空间,变量名为MK,实际上它不显示出来
>> MK
MK =
1 11 111 1111
2 22 222 2222
3 33 333 3333
4 44 444 4444
5 55 555 5555
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-08-13
ENVI转换数据不会是没有规律的,通常都是按列优先或行优先的方式存储
因此,先用load命令载入,观察一下数据就知道具体是哪种方式,再按那个方式把原始数据修改成所需的矩阵形式就OK
注意:load不是能把txt中的任何数据都可以载入的,需要先将非数据(即文字描述之类的)删掉本回答被提问者采纳
第2个回答  2019-10-25
下面这个函数是取filein中的第line行写入fileout中的程序,如果想实现取特定几行,只要稍微修改一下就可以。
function
dataout=dataread(filein,fileout,line)
fidin=fopen(filein,'r');
fidout=fopen(fileout,'w');
nline=0;
while
~feof(fidin)
%
判断是否为文件末尾
tline=fgetl(fidin);
%
从文件读行
nline=nline+1;
if
nline==line
fprintf(fidout,'%s\n',tline);
dataout=tline;
end
end
fclose(fidin);
fclose(fidout);
%%%%%%%%%%%%%%%%%%%%%%%%%%
调用格式:dataout=dataread(filein,fileout,line)
如果你的txt文件数据是矩阵形式的,而没有其它的文字,用下面的程序就可以读任意行任意列的数据
a=textread('ll.txt');
t=a(1:43,4:10);
1:43是1到43行,4:10是4到10列的数据,当然也可以只读一个数据,如果你的matlab没有textread函数,直接从mathworks网站下载就行。
根据txt文档不同种类介绍不同的读取数据方法
一、纯数据文件(没有字母和中文,纯数字)
对于这种txt文档,从matalb中读取就简单多了
例如test.txt文件,内容为“17.901
-1.1111
33.045
17.891
-1.1286
33.045
17.884
-1.1345
33.045”
可以在command
window中输入load
test.txt
,然后就会产生一个test的数据文件,内容跟test.txt中的数据一样;另一种方法是在file/import
data....../next/finish
也可产生一个叫test的数据文件。
二、中英文和数据如test1.txt
vib.hit.edu.cn
1
11
111
1111
2
22
222
2222
3
33
333
3333
4
44
444
4444
5
55
555
5555”
这样的文件怎么读入数据呢?
方法有多种,现举两个比较简单实用的。
方法一:
file/import
data....../next/finish
>>
whos
Name
Size
Bytes
Class
data
5x4
160
double
array
textdata
4x1
300
cell
array
Grand
total
is
54
elements
using
460
bytes
>>
data
data
=
1
11
111
1111
2
22
222
2222
3
33
333
3333
4
44
444
4444
5
55
555
5555
>>
textdata
textdata
=
方法二:
[a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)
说明:%s可以是其他形式,跟读入的数据类型有关,比如这里也可以用%n,%f等。
这里%s的个数和[a1,a2,a3,a4]对应。
>>
[a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)
a1
=
'1'
'2'
'3'
'4'
'5'
a2
=
'11'
'22'
'33'
'44'
'55'
a3
=
'111'
'222'
'333'
'444'
'555'
a4
=
'1111'
'2222'
'3333'
'4444'
'5555'
因以字符串的形式读入,所以有''。
————————————————————————————————
三、中文
数据
英文混乱如test.txt
说明:这种内容格式的文件用上面的方法是不行的。
以下是由chinamaker编写的一种方法:
fidin=fopen('test.txt');
%
打开test2.txt文件
fidout=fopen('mkmatlab.txt','w');
%
创建MKMATLAB.txt文件
while
~feof(fidin)
%
判断是否为文件末尾
tline=fgetl(fidin);
%
从文件读行
if
double(tline(1))>=48&&double(tline(1))<=57
%
判断首字符是否是数值
fprintf(fidout,'%s\n\n',tline);
%
如果是数字行,把此行数据写入文件MKMATLAB.txt
continue
%
如果是非数字继续下一次循环
end
end
fclose(fidout);
MK=importdata('MKMATLAB.txt');
%
将生成的MKMATLAB.txt文件导入工作空间,变量名为MK,实际上它不显示出来
>>
MK
MK
=
1
11
111
1111
2
22
222
2222
3
33
333
3333
4
44
444
4444
5
55
555
5555
第3个回答  2009-08-11
用laod语句就行

MATLAB读取txt文件数据,
在MATLAB中,要读取txt文件的数据,首先打开软件,点击左上角的"文件"选项,然后选择"导入数据"。在弹出的对话框中,找到并选择你需要的txt文件,注意可以设置换行方式,如逗号分隔、空格分隔或是自定义格式,按照你的需求进行选择。点击"下一步"后,文件内容就会被转化为数据组,文件名即为数据组的名称。

在MATLAB中怎样读取TXT混合文件中的数据
fclose(fidout);调用格式:dataout=dataread(filein,fileout,line)如果你的txt文件数据是矩阵形式的,而没有其它的文字,用下面的程序就可以读任意行任意列的数据 a=textread('ll.txt');t=a(1:43,4:10);1:43是1到43行,4:10是4到10列的数据,当然也可以只读一个数据,如果你的matlab没...

MATlAB 读取.txt 或者 .dat 等文件里的参数
在处理数据文件时,遇到文本格式如.txt或.dat等文件中存储参数的情况是很常见的。要读取这些文件中的各个参数,我们可以使用MATLAB编程语言提供的一种简便方法。运行以下代码片段,数据将直接存入名为'value'的变量中。为了适应不同的数据存储方式,可以使用'elseif'语句进行判断,从而根据具体的分隔符(例如...

matlab 如何读取txt 数据
对于有字符和数字混合的文件,如果你直接提取数据,可以使用以下2个函数 fgetl sscanf 比如说你的这一行:r1=3.2 y1=145487.57182125 fget返回的是string,A=fgetl(fid)sscanf可以进行搜寻你想要的string或者是数字 当然,你也可以靠判断等号的位置,然后把等号后面的数字截取,需要用到 strcmp函数 ...

matlab中如何读取多个txt文件中的某一行的数据
1. 逐一以文本形式打开文件 file(n).txt ;2. 逐行读出数据,并判断前9个字符是否 Timestamp ;3. 如是,在下一行接收数据存入结果并退出此文件;4. 如不是,继续往下读数据。pt = 'd:\\data\\'; % 数据路径 ff = 'file'; % 数据文件前缀 ext = '.txt'; % 数据文件扩展名 s...

matlab 读取数字字母混合 txt文件
比较新的版本有一个很人性化的功能:importData GUI 在你matlab左侧文件列表中,右键txt文件 ->import Data 在弹出的GUI界面中,上方可以设置列分隔符,你这里应该是空格或者tab,在内容区域,可以向excel一样选择你需要的数据区域。界面右上角的绿色对号即为导出按钮。此外还可生成读取脚本文件 ...

如何用matlab读取txt文件中的数据,并画图
load data.txtplot(1:length(data),data,'*-')由于没有横坐标的值,横坐标利用 1:length(data) 代替。如果data.txt 文件不在MATLAB的默认路径里面,那么文件还应包含此文件的路径。例如data.txt文件的路径为 C:\\practice ,那么 load 函数应该改为 load C:\\practice\\data.txt 实现二维绘图功能...

用matlab读取txt 文件里的数据 txt
textread('文件名')或者用fopen a=fopen('文件名','读写属性参数')比如说一个为tt.text的文件,想既可读又可写,a=fopen('tt.text','rt');参数如下:'r'Open file for reading (default).'w'Open or create new file for writing. Discard existing contents, if any.'a'Open or ...

Matlab要这样批量读取txt数据!科研效率UpUp第10期
首先,通过简单的'dir'命令,你可以列出指定路径下所有.txt文件,这是批量操作的第一步:matlab files = dir('path_to_your_files\/*.txt');接下来,利用readtable函数逐一读取这些txt文件,设置必要的参数以准备数据处理:matlab data = cell(1, length(files));for i = 1:length(files)data{i} ...

在matlab中怎样读入.txt文件中的数据
fid=fopen('a.txt');A=fscanf(fid,'%s');这样A就把所有文本内容读入了

相似回答