matlab定义字符数组 数值数组与字符拼接问题

字符型matlab数据读入问题_百度知道
字符型matlab数据读入问题
07.914这样的数据存在txt文件中.414
0.867 N 0:08.625 N 0,应该用什么指令.789 A
0.414 A 0:06.180 N 0:05:08,我想每个数据读出来存入4*5的数组中.625
0:07.758 N
提问者采纳
06;fclose(fid).txt&#39,得到想要处理的矩阵或向量fid = fopen(&#39.625
0;%s %s %s %s %s&#39,每列有4个cell.758
0:08:08,有如下格式0.txt文档中.766
0:07,&#39:06,然后调用cell的相应转换函数:08.734
0.1800.180
0.6250:05.4140,读出的a是5列1*5的cell.914用下面代码;a = textscan(fid如果data.789
非常感谢!可是读进来之后我发现字母比如N、A之类的不能存进新的数组里,是matlab的数组中不允许这种格式吗?还是需要一些转换的指令来读入
这样读取的是cell类型~其实是存储类型的容器~只要多用{}取下标,最后还是会得到基本类型的,那时候再赋值就没问题了。或者有cell2xx那种函数,也可以转换
提问者评价
其他类似问题
为您推荐:
matlab的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁第三方登录:转载:MATLAB字符串数组的创建与运算
MATLAB字符串数组的创建与运算&&
18:18:08|&&分类:
|&&标签: |字号大中小&订阅
字符串数组主要用于可视化编程内容,如界面设计和图形绘制。
<font COLOR="#.字符串变量的创建
字符变量的创建方法是:在指令窗口中先把待建的字符放在“单引号对”中,再按回车键。注意,该“单引号对”必须在英文状态下输入。这“单引号对”是MATLAB用来识别字符串变量所必须的。如:
&&a='This is an example.'
&&& This is an
&&msg = 'You''re right!'
%创建带单引号的字符串
&&& You're
<font COLOR="#.字符串数组的标识
字符串变量的每个字符(英文字母、空格和标点都是平等的)占据一个元素位,在数组中元素所处的位置用自然数标识。如:
&&b=a(1:4) % 提出一个子字符串
ra=a(end:-1:1) % 字符串的倒排
&&& .elpmaxe na
&&A='这是一个算例。';&
&&B=size(A) % 符号数组 A 的“大小”
&&C=A([5 6]) % 提出一个子字符串
<font COLOR="#.字符串的ASCII码
字符串的存储是用ASCII码实现的。指令abs和double都可以用来获取串数组所对应的ASCII码数值数组。指令char可把ASCII码数组变为串数组。如
&&d=double(a)&
&&& 84 104 105
115 32 105 115 32 97 110 32 101 120 97 109 112 108 101
&&char(d)&
&&& This is an
对字符串ASCII码数组的操作:使字符串中字母全部大写
&&w=find(a&='a'&a&='z');
%找出串数组a中,小写字母的元素位置。
&&d(w)=d(w)-32;
%大小写字母ASCII值差32用数值加法改变部分码值。
&&char(d) %把新的ASCII码翻成字符
THIS IS AN EXAMPLE.
<font COLOR="#.字符串数组的运算
&&Aa=[A,a]
&&& 这是一个算例。This
is an example.
&&name = strcat('Thomas',' R.','
Lee') %连接两个字符串,每个字符串最右边的空格被裁切
Thomas R. Lee
&&D=strvcat('Hello','Yes','No','Goodbye')
%利用串操作函数创建多行串数组, 连接多行字符串,每行长度可不等,自动把非最长字符串最右边补空格,
使与最长字符串相等,会忽略空字符串。
&&& Goodbye
<font COLOR="#. 字符串替换和查找
strrep—进行字符串替换,区分大小写
&&strrep(str1,str2,str3)
%它把str1中所有的str2字串用str3来替换
strfind(str,patten) %查找str中是否有pattern,返回出现位置,没有出现返回空数组
findstr(str1,str2) %查找str1和str2中,较短字符串在较长字符串中出现的位置,没有出现返回空数组
strmatch(patten,str) %检查patten是否和str最左侧部分一致
strtok(str,char) %返回str中由char指定的字符串前的部分和之后的部分,
<font COLOR="#.常用字符串操作函数
blanks(n)—创建有n个空格组成的字符串
deblank(str)—裁切字符串的尾部空格
strtrim(str)—裁切字符串的开头和尾部的空格,制表,回车符
lower(str)—将字符串中的字母转换成小写
upper(str)—将字符串中的字母转换成大写&
sort(str)—按照字符的ASCII值对字符串排序
num2str—将数字转换为数字字符串
str2num—将数字字符串转换为数字
mat2str—将数组转换成字符串
int2str—把数值数组转换为整数数字组成的字符数组
<font COLOR="#.其他字符串操作函数
strcmp—比较两个字符串是否完全相等,是,返回真,否则,返回假
strncmp—比较两个字符串前n个字符是否相等,是,返回真,否则,返回假
strcmpi—比较两个字符串是否完全相等,忽略字母大小写
strncmpi—比较两个字符串前n个字符是否相等,忽略字母大小写
isletter—检测字符串中每个字符时否属于英文字母
isspace—检测字符串中每个字符是否属于格式字符(空格,回车,制表,换行符等)
isstrprop—检测字符每一个字符是否属于指定的范围.
<font COLOR="#.字符串的显示和打印
&&g=’abcd’;
&& disp(g)
&&h=rand(2,2); %产生2*2随机阵
&&s=num2str(h) %把数值数组转换为串数组
&&& 0.95013
&&& 0.23114
&&s_s=sprintf('%.10e\n',a)
数位科学记述串,每写一个元素就换行。
&&fprintf('% .5g \\',a)
%以5位数位最短形式显示。不能赋值用。
0.14\0.98\&
&&s_sscan=sscanf(s_s,'%f',[3,2])
%浮点格式把串转换成3*2数值数组。
s_sscan =&
&&& 0.9501
&&& 0.2311
&&& 0.6068
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。&#xe621; 上传我的文档
&#xe602; 下载
&#xe60c; 收藏
该文档贡献者很忙,什么也没留下。
&#xe602; 下载此文档
正在努力加载中...
【精品】matlab 第三章 数值数组及向量化运算
下载积分:910
内容提示:【精品】matlab 第三章 数值数组及向量化运算
文档格式:PPT|
浏览次数:0|
上传日期: 03:41:27|
文档星级:&#xe60b;&#xe612;&#xe612;&#xe612;&#xe612;
该用户还上传了这些文档
【精品】matlab 第三章 数值数组及向量化运算.PPT
官方公共微信Matlab总遇到一些神奇的问题,让人摸不着头脑。昨天编写程序的时候遇到一个让我十分火大的问题,也是自己的matlab基础不好吧。
先描述一下问题,再GUI界面有个listbox,Tag属性是&listbox1&,里面是这样的数据,我的目的是要把这些数据转换成数值类型的矩阵:
list_string = get(handles.listbox1,'string') data=str2num((list_string));
使用上面两行代码进行转换却异常出错了!看后台的错误描述如下:
??? Error using ==& str2num&Requires string or character array input.
Error in ==& wsy&pushbutton24_Callback at 654&data=str2num((list_string));
Error in ==& gui_mainfcn at 75&&&&&&&& feval(varargin{:});
Error in ==& wsy at 16&&&& gui_mainfcn(gui_State, varargin{:});
??? Error while evaluating uicontrol Callback.
??? Error using ==& feval&Undefined command/function 'Untitled_1_Callback'.
Error in ==& gui_mainfcn at 75&&&&&&&& feval(varargin{:});
Error in ==& wsy at 16&&&& gui_mainfcn(gui_State, varargin{:});
??? Error while evaluating uimenu Callback.
Matlab抛出的异常说明str2num函数使用错误,参数必须是字符数组(char array)或者是字符串(string)。在后台看了下获得的listbox里面的数据如下:
list_string =
&&& ' 56&&&&& 30&&&&& 3.09&&&&&& 0'
&&& ' 32&&&&& 46&&&&& 3.83&&&&& 30'
&&& ' 19&&&&& 48&&&&& 3.91&&&&& 76'
&&& &&(省略一大堆数据)
&&& ' 31&&&& 301&&&&& 9.79&&& 6634'
&&& ' 60&&&& 429&&&& 11.69&&& 6935'
对呀!尼玛难道这个不是符合要求的数据?不信我们在交互界面里面做个试验:
str=[' 56&&&&& 30&&&&& 3.09&&&&&& 0'; ' 32&&&&& 46&&&&& 3.83&&&&& 30'; ' 60&&&& 429&&&& 11.69&&& 6935']
str2num(str)
难道不应该是这样子的吗?好吧,可能不应该是数组吧,我又做了如下的实验:
str={' 56&&&&& 30&&&&& 3.09&&&&&& 0'; ' 32&&&&& 46&&&&& 3.83&&&&& 30'; ' 60&&&& 429&&&& 11.69&&& 6935'}
str2num(str)
果然报了相同的错误!在baidu和论坛里面各种查,基本上没有什么满意的答案,后来只好求助于文档:
首先来看看str2num函数的用法:
&& help str2num
STR2NUM Convert string matrix to numeric array.
&&& X = STR2NUM(S) converts a character array representation of a matrix of
&&& numbers to a numeric matrix. For example,
&&&&&&& &&&&&&&& S = ['1 2'&&&&&&&& str2num(S) =& [1 2;3 4]
&&&&&&&&&&&&& '3 4']
& &&& The numbers in the string matrix S should be ASCII character
&&& representations of a numeric values.& Each number may contain digits,
&&& a decimal point, a leading + or - sign, an 'e' or 'd' preceding a
&&& power of 10 scale factor, and an 'i' or 'j' for a complex unit.
& &&& If the string S does not represent a valid number or matrix,
&&& STR2NUM(S) returns the empty matrix.& [X,OK]=STR2NUM(S) will
&&& return OK=0 if the conversion failed.
& &&& CAUTION: STR2NUM uses EVAL to convert the input argument, so side
&&& effects can occur if the string contains calls to functions.& Use
&&& STR2DOUBLE to avoid such side effects or when S contains a single
&&& number.
str2num的功能是将字符串矩阵转换成数值数组,字符串必须是ASCII码表中的可转化成数值的字符,如果字符串数组不是一个有效的数字或者不能过程一个矩阵,str2num函数就会返回一个空的矩阵,[X,OK]=STR2NUM(S),如果转换失败OK=0.
注意:str2num使用的是eval函数来转换输入的参数,所以如果字符串里面包含了函数的调用,就会产生副作用,推荐使用str2double来避免副作用(当待转换字符串矩阵S包含单个数字的时候)。
相信很多朋友都是看了这一段文档,从此走向一条不归之路。首先我们从这段文档描述中可以获取至少三个有用的信息
①str2num作用的对象是&string matrix&也就是我们的错误描述中的string or characher array.
②转换失败就会[X, OK] 中OK就会返回0,转换成功就会返回1(实验可得)。如下例子:
str=['1 2 3 4'; '5 6&&& ']
[X,OK]=str2num(str)
③当待转换字符数组是单个数字的时候推荐使用str2double进行转换,避免副作用,如下例子:
&& str2double('123.45e7')
&& str2double('123 + 45i')
&& str2double('3.14159')
&& str2double('2.7i - 3.14')
&& str2double({'2.71' '3.1415'})
&& str2double('1,200.34')
得到如下结果:
-3.1400 + 2.7000i
2.7100&&& 3.1415
按照文档的推荐,str2num适用与转换单个数字。所以
转换就会失败!
我们注意到上面的example中以这样一个例子:str2double({'2.71' '3.1415'}),看一下文档的描述:
&& help str2double
STR2DOUBLE Convert string to double precision value.
&&& X = STR2DOUBLE(S) converts the string S, which should be an
&&& ASCII character representation of a real or complex scalar value,
&&& to MATLAB's double representation.& The string may contain digits,
&&& a comma (thousands separator), a decimal point, a leading + or - sign,
&&& an 'e' preceding a power of 10 scale factor, and an 'i' for
&&& a complex unit.
& &&& If the string S does not represent a valid scalar value, STR2DOUBLE(S)
&&& returns NaN.(转换失败返回NaN)
& &&& X = STR2DOUBLE(C) converts the strings in the cell array of strings C
&&& to double.& The matrix X returned will be the same size as C.& NaN will
&&& be returned for any cell which is not a string representing a valid
&&& scalar value. NaN will be returned for individual cells in C which are
&&& cell arrays.
注意到我标出的红色部分,&the strings in the cell array &也就是说str2double还可以转换cell 类型的数据。
但是使用str2double转换我们需要转换的数据还是不行呀:
好吧是我读文档不认真,人家都说了是转换单个数字,改成这样就可以了:
但是现在的问题是我要转换一行里面由于多个数字的数据怎么办呢?
回到本文开头的位置:你会发现str2num的转换str只是一个&[]&和一个&{}&的区别就能转换了,由此可以推测他们的数据类型是不一样的,再结合str2double里面的描述可以推测&{}&代表的就是&cell&数据类型。
为了验证他们的数据类型我们做如下实验:
果然,他们的数据类型是不一样的!并且cell array所占的空间要大得多几乎是两倍char array的大小。
那好了,现在的任务明确了,只需要将&cell&类型的数据转换成数组类型就行了。
我们看一下文档:
Create cell array Syntax
c = cell(n)
c = cell(m,n) or c = cell([m n])
c = cell(m,n,p,...) or c = cell([m n p ...])
c = cell(size(A))
c = cell(javaobj)
Description
c = cell(n) creates an n-by-n cell array of empty matrices. An error message appears if n is not a scalar.
c = cell(m,n) or c = cell([m,n]) creates an m-by-n cell array of empty matrices. Arguments m and n must be scalars.
c = cell(m,n,p,...) or c = cell([m n p ...]) creates an m-by-n-by-p-... cell array of empty matrices. Arguments m, n, p,... must be scalars.
c = cell(size(A)) creates a cell array the same size as A containing all empty matrices.
c = cell(javaobj) converts a Java array or Java object javaobj into a MATLAB cell array. Elements of the resulting cell array will be of the MATLAB type (if any) closest to the Java array elements or Java object.
文档中描述了Cell类型的创建方式,但是我要的是转换方式呀。继续搜索文档:
貌似发现了目标:
重点来了,使用cellstr()函数可以使用character array(字符数组)创建一个cell array,使用char()可以转换回来!
终于看到了光明,实验一下:
现在可以成功转换了!
使用char()函数将cell array 转换成 char array.
阅读(...) 评论()

我要回帖

更多关于 matlab定义字符数组 的文章

 

随机推荐