matlab的sscanf函数用法(MATLAB中如何将导入数据中的字母转化为数字)

本文目录
- MATLAB中如何将导入数据中的字母转化为数字
- matlab怎样实现数字和字符的转换
- matlab sscanf的用法
- 请教如何用matlab去读取内容不规则的文本文件的数据
- matlab中,如何将字符串转换为命令控制字
- matlab 如何读取txt 数据
- matlab中如何读取有表头和前几列为不规则的数据
- matlab 怎么读取下一行
MATLAB中如何将导入数据中的字母转化为数字
可以使用fscanf或者sscanf的方式读取,
思路为:定义cell矩阵,先全部以字符的方式读入,再将其中的数字转换为数据格式。
代码如下:
m=8;n=3;
data=cell(m,n);%定义cell矩阵,存储文件内容
fid=fopen(’test.txt’,’r’);%以只读方式打开文件
for i=1:m
for j=1:n
data{i,j}=fscanf(fid,’%s’,);%以字符方式读取每个值,遇空格完成每个值的读取
end
end
fclose (fid);
for i=1:m
for j=2:n
data{i,j}=str2double(data{i,j});%将文本格式转为数字格式
end
end
str=cell(m,1);用于存储data的第一列
for i=1:m
str{i}=data{i,1};
end
matlab怎样实现数字和字符的转换
数字转字符串:
template 《typename T》
static std::string num2str(T v)
{
std::ostringstream oss;
oss 《《 v;
return oss.str();
}
字符向字符转换:
a=str2num(’3’),得到a=3
扩展资料:
字符串和数字之间的相互转换总结
可以使用的函数stoi(),stod(),stoll()等举例:
string str = "3.1415926";
cout《《str《《endl;
double d = stod(str);
cout《《d《《endl;
符串转数字:使用sscanf()函数,举例如下:
char str="1234321";
int a;
sscanf(str,"%d",&a);
/////////////////////////////
char str="123.321";
double a;
sscanf(str,"%lf",&a);
////////////////////////////
char str="AF";
int a;
sscanf(str,"%x",&a); //16进制转换成10进制
使用stringstream,举例如下:
string s = "17";
stringstream ss;
ss《《s;
int i;
ss》》i;
cout《《i《《endl; // 17
matlab sscanf的用法
请明确一下您的问题:
1.
如果你是在纯matlab环境下实现某种功能,那么:matlab跟c没有直接的关系,不可能在matlab里“重载”c函数,matlab本身更没有什么流的概念。如果不清楚matlab里sscanf的用法,请输入命令help
sscanf。
2.
如果你是说在用mex方法写一段可以被matlab调用的c程序,那么:我不知道您为什么在纠结“matlab里没有地址符”的问题。这种mex式的c程序里本来也没有matlab的语法写任何东西。
3.
如果你是在c环境下调用matlab的库,那么:我完全不知道您在说什么。不过看您的问题也不像是这种情况。
请教如何用matlab去读取内容不规则的文本文件的数据
%%方法比较笨
fid=fopen(’d:\data.txt’,’r’);
NumLine=0;
datax=;
datay=;
dataz=;
while(~feof(fid))
lineinfo=fgetl(fid);%读一行数据
NumLine=NumLine+1;
if (NumLine《=14) %去掉文件头,因为文件头中含有XYZ会对下面编程造成很大干扰,你这个要修改文件头的行数
continue;
end
if (isempty(lineinfo))
continue; %空行,重新读下一行
end
flag=0;
xlocal=findstr(lineinfo,’X’); %假定一行最多只能有一个关键字符X,另外这里是区分大小写的
if (~isempty(xlocal))
xx=sscanf(lineinfo(xlocal:end),’X%f’);
flag=1;
else
xx=0;
end
ylocal=findstr(lineinfo,’Y’); %假定一行最多只能有一个关键字符X,另外这里是区分大小写的
if (~isempty(ylocal))
yy=sscanf(lineinfo(ylocal:end),’Y%f’);
flag=1;
else
yy=0;
end
zlocal=findstr(lineinfo,’Z’); %假定一行最多只能有一个关键字符X,另外这里是区分大小写的
if (~isempty(zlocal))
zz=sscanf(lineinfo(zlocal:end),’Z%f’);
flag=1;
else
zz=0;
end
if (flag==1) %表明至少找到一个XYZ
datax=;
datay=;
dataz=;
end
end
fclose(fid);
fid=fopen(’d:\dataxyz.txt’,’w’);
for i=1:length(datax)
fprintf(fid,’%f\t%f\t%f\r\n’,datax(i),datay(i),dataz(i)); %这里用\r\n是方便计算本查看。事实上\n就可以了
end
fclose(fid);
=====================修改版=================
%%逻辑判断比较复杂
fid=fopen(’d:\data.txt’,’r’);
NumLine=0;
datax=;
datay=;
dataz=;
while(~feof(fid))
lineinfo=fgetl(fid);%读一行数据
NumLine=NumLine+1;
if (isempty(lineinfo))
continue; %空行,重新读下一行
end
flag=0;
xlocal=findstr(lineinfo,’X’); %假定一行最多只能有一个关键字符X,另外这里是区分大小写的
if (~isempty(xlocal) && ( (lineinfo(xlocal+1)》=’0’ && lineinfo(xlocal+1)《=’9’) || lineinfo(xlocal+1)==’-’))
xx=sscanf(lineinfo(xlocal:end),’X%f’);
flag=1;
else
xx=0;
end
ylocal=findstr(lineinfo,’Y’);%假定一行最多只能有一个关键字符X,另外这里是区分大小写的
if (~isempty(ylocal) && ((lineinfo(ylocal+1)》=’0’ && lineinfo(ylocal+1)《=’9’) || lineinfo(ylocal+1)==’-’))
yy=sscanf(lineinfo(ylocal:end),’Y%f’);
flag=1;
else
yy=0;
end
zlocal=findstr(lineinfo,’Z’);%假定一行最多只能有一个关键字符X,另外这里是区分大小写的
if (~isempty(zlocal) && ((lineinfo(zlocal+1)》=’0’ && lineinfo(zlocal+1)《=’9’) || lineinfo(zlocal+1)==’-’))
zz=sscanf(lineinfo(zlocal:end),’Z%f’);
flag=1;
else
zz=0;
end
if (flag==1) %表明至少找到一个XYZ
datax=;
datay=;
dataz=;
end
end
fclose(fid);
fid=fopen(’d:\dataxyz.txt’,’w’);
for i=1:length(datax)
fprintf(fid,’%f\t%f\t%f\r\n’,datax(i),datay(i),dataz(i)); %这里用\r\n是方便计算本查看。事实上\n就可以了
end
fclose(fid);
matlab中,如何将字符串转换为命令控制字
字 符 串 转 换
abs
字符串到ASCII转换
dec2hex
十进制数到十六进制字符串转换
fprintf
把格式化的文本写到文件中或显示屏上
hex2dec
十六进制字符串转换成十进制数
hex2num
十六进制字符串转换成IEEE浮点数
int2str
整数转换成字符串
lower
字符串转换成小写
num2str
数字转换成字符串
setstr
ASCII转换成字符串
sprintf
用格式控制,数字转换成字符串
sscanf
用格式控制,字符串转换成数字
str2mat
字符串转换成一个文本矩阵
str2num
字符串转换成数字
upper
字符串转换成大写
在许多情况下,希望把一个数值嵌入到字符串中。几个字符串转换可完成这个任务。
» rad=2.5; area=pi*rad^2;
» t= ;
» disp(t)
A circle of radius 2.5 has an area of 19.63.
这里函数num2str用来把数值转换成字符串,字符串连接用来把所转换的数嵌人到一个字符串句子中。按类似方式,int2str把整数转换成字符串。无论是num2str还是int2str都调用函数sprintf,它用类似C语言语法把数值转换成字符串。
函数fprintf经常是函数disp的一个有用替换,由于它提供了对结果更多的控制。当准备把格式化的数据写到一个文件中去时,按缺省它在命令窗口显示结果。例如,
» fprintf(’ See what this does ’)
See what this does»
» fprintf(’ See what this does\n ’)
See what this does
在上面第一个例子里,fprintf显示字符串,然后立即给出MATLAB提示符。相反,在第二个例子里,\n 插入一个新行字符,在MATLAB提示符出现之前创建一个新行。
无论fprintf还是sprintf以同样方式处理输入参量,但fprintf把输出送到显示屏或文件中,而sprintf把输出返回到一个字符串中。例如,上面的例子用num2str可重写为
» t=sprintf(’ A circle of radius %.4g has an area of %.4g. ’, rad, area);
» disp(t)
A circle of radius 2.5 has an area of 19.63.
» fprintf(’ A circle of radius %.4g has an area of %.4g.\n ’ , rad, area)
A circle of radius 2.5 has an area of 19.63.
这里%.4g是用在函数num2str中的数据格式。%.4g就是用指数或定点标记,不管哪一种更短些,只显示至4位数字。除了g格式,还可用e (指数)和f (定点)转换。表6.2表明在各种不同转换下,如何显示pi结果。
表6.2
数 值 格 式 转 换 例 子
命令
结果
fprintf(’ %.0e\n ’,pi)
3e+00
fprintf(’ %.1e\n ’,pi)
3.1e+00
fprintf(’ %.3e\n ’,pi)
3.142e+00
fprintf(’ %.5e\n ’,pi)
3.14159e+00
fprintf(’ %.10e\n ’,pi)
3.1415926536e+00
fprintf(’ %.0f\n ’,pi)
3
fprintf(’ %.1f\n ’,pi)
3.1
fprintf(’ %.3f\n ’,pi)
3.142
fprintf(’ %.5f\n ’,pi)
3.14159
fprintf(’ %.10f\n ’,pi)
3.1415926536
fprintf(’ %.0g\n ’,pi)
3
fprintf(’ %.1g\n ’,pi)
3
fprintf(’ %.3g\n ’,pi)
3.14
fprintf(’ %.5g\n ’,pi)
3.1416
fprintf(’ %.10g\n ’,pi)
3.141592654
fprintf(’ %.8.0g\n ’,pi)
3
fprintf(’ %.8.1g\n ’,pi)
3
fprintf(’ %.8.3g\n ’,pi)
3.14
fprintf(’ %.8.5g\n ’,pi)
3.1416
fprintf(’ %.8.10g\n ’,pi)
3.141592654
注意,对e 和f 格式,小数点右边的十进制数就是小数点右边要显示的多少位数字。相反,在g 的格式里,小数点右边的十进制数指定了显示数字的总位数。另外,注意最后的五行,其结果指定为8个字符长度,且是右对齐。在最后一行,8被忽略,因为指定超过了8位。
概括起来,当需要比缺省函数disp,num2str和int2str所提供的更多的控制时,fprintf和sprintf是有用的。
函数str2mat把一列的几个字符串转换成一个字符串矩阵。例如,
» a=’ one ’ ; b= ’ two ’ ; c= ’ three ’ ;
» disp(str2mat(a, b, c, ’ four ’))
one
two
three
four
从上面看不明显,上面的每行有同样数目的元素。较短行用空格补齐,使结果形成一个有效的矩阵
在逆方向转换中,有时是很方便的。
» s= ’ ’ % a string of a MATLAB matrix
s =
» str2num(s)
ans =
1.0000 2.0000
3.1416 4.0000
» s=’ 123e+5 ’ % a string containing a simple number
s =
123e+5
» str2num(s)
ans =
12300000
函数str2num不能接受用户定义的变量,也不能执行转换过程的算术运算。
pcolor(X,Y,C)函数的用法: X,Y是用来定位的,C是用来填充颜色的。
当X,Y是向量时,X与C的列对应,Y与C的行对应,因此向量X和Y的维数必须要求与C的列与行统一。所以使用时注意检查X,Y,C的大小和维数。
其后面最好用上函数:shading interp;
matlab 如何读取txt 数据
对于有字符和数字混合的文件,如果你直接提取数据,可以使用以下2个函数
fgetl
sscanf
比如说你的这一行:
r1=3.2 y1=145487.57182125
fget返回的是string,
A=fgetl(fid)
sscanf可以进行搜寻你想要的string或者是数字
当然,你也可以靠判断等号的位置,然后把等号后面的数字截取,需要用到
strcmp函数
matlab中如何读取有表头和前几列为不规则的数据
fn = ’1.txt’;
fid = fopen(fn,’r’);
R = ;
r = 1;
while ~feof(fid)
ss = fgetl(fid);
if ismember(’:’,ss)
dt = sscanf(ss,’%*s%*s%f%f%f%f%f%f’);
R(r,:) = dt;
r = r+1;
end;
end;
R
R =
0.3900 46.5000 28.5700 5.1300 2.5600 4.2000
0.2900 32.1000 28.5700 4.9000 2.4300 4.2000
0.3600 31.9000 28.5600 4.8500 2.4000 4.2000
0.3700 32.3000 28.5500 4.8200 2.3900 4.2000
0.3900 31.8000 28.5500 4.8200 2.3900 4.2000
0.3900 32.5000 28.5500 4.8500 2.4000 4.2000
matlab 怎么读取下一行
文件如下,行数是自己标的,%在txt里是顶格写的
1
2
%A
3
11.2
222.5
3000
4
5
%B
6
100
200
300
7
8
9
%C
10
4800000
500000
60000000
format
long
%让matlab显示出很大的数比如
6000000000011.8,不会忽略掉11.2
fidin=fopen(’123.txt’);
%打开文件
while
~feof(fidin)
%判断是不是文件末尾
tline=fgetl(fidin);
%读取一行,注意,读文一行后,光标就会自动到下一行
if
isempty(tline)
%判断是不是空行
continue
end
switch
tline(2)
%对不是空行的判断这一行的第二个字符
case
’A’
%如果是A的情况
tline=fgetl(fidin);
%读取下一行的数据
str=tline;
%先把这一行变为字符串
sline=sscanf(str,’%f’,3);
%读取字符串中的数据,最多读3个,三个字符自动转为数字类型
M=sline;
%赋值给M
case
’B’
%一下类似
tline=fgetl(fidin);
str=tline;
sline=sscanf(str,’%f’,3);
M1=sline;
otherwise
tline=fgetl(fidin);
str=tline;
sline=sscanf(str,’%f’,3);
M2=sline;
end
end
fclose(fidin);
a=M(1)+M2(3);
disp(a);
这里让11.2+60000000
结果是60000011.2
成功

更多文章:
怎么交java文件作业(关于java中的类和对象等,急!要交作业!)
2026年4月28日 21:45
安卓手机配置文件在哪(android中应用需要的配置应该存放在哪呢)
2026年9月25日 21:00
longestlasting是什么意思(lasting是什么意思啊)
2026年3月25日 22:00
下载的.net源码怎么运行?如何反编译C#等net软件类库源代码
2025年7月14日 17:30
dividend属于equity吗(在Cash Flow Statement中,什么是 Equity dividend paid)
2026年5月13日 08:30
手机版c语言编译器ide的使用方法(如何用手机进行编程有哪些值得推荐的软件)
2025年9月25日 08:00
achievement英语怎么说(achievement是什么意思 英语achievement是什么意思)
2026年4月27日 14:45
all函数python作用(python中的bif是什么意思)
2025年7月1日 16:15
openssl是一个类相关软件(openssl-devel和openssl 是什么具体关系)
2025年6月19日 10:00
cite翻译成中文(法语专家请进,Ile de la Cite 是什么地点中文译名是什么)
2026年1月5日 02:00
replace with和replace to(replace with什么意思)
2025年6月30日 23:45
dblclick(Ext.grid.GridPanel的dblclick属性用法)
2025年5月31日 06:00










