matlab文件读写、文字处理、命令行总结

Matlab之文件读写操作【CSV/Excel/JSON/XML/TXT】 阅读详情

table of content

1.文件读写

2.正则表达式

3.字符串处理

4.调用命令行


这篇纯当个人笔记,matlab函数大而全,就是有的时候想不起来搜不到就死翘翘。今天真是被字符串处理坑死了,以前还真是太轻视文件读写这个东西了,但混合编程的时候我这种菜鸟还真是只能用txt文件传数据,绷着哪里跌倒哪里爬起的原则,写篇日志,以此纪念一次坑爹之旅。多五个小时真的能编完啊!

再次感慨下matlab除了不能生儿子什么都会的伟大。正则表达式基本覆盖了perl常用的功能,吊命令行提供了无限可能,我的生命之光,我的欲念之火!

还有就是感觉写书的人就是不想让人家看明白他写的东西,故意搞些很复杂的千百年用不到的例子来忽悠,搜博客又搜出一大堆乱七八糟的,以后还是翻自己日志比较好。


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

1.文件读写

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%读文件

fidin=fopen('文字.txt'); % 打开test2.txt文件 

fidout = fopen('write.txt','w');

while ~feof(fidin) % 判断是否为文件末尾 

tline=fgetl(fidin); % 从文件读行 

fprintf(fidout,'%s\n',tline([34:106]));

end

fclose(fidin);

fclose(fidout);

人人不能对齐,有点不爽将就看吧,知道这个就足够了。

以上实现了从'文字.txt'文件一行行读入,取了当中的34:106维,然后写到write.txt里面。

这个程序有很多变体,while里面可以加if判断,具体内容看情况。


读入的一般是字符串,用字符串处理可转成矩阵用。


%写矩阵

a = magic(6);
dlmwrite('a.txt',a,'delimiter','-');


效果如下,diliminater分隔符,空格也是可以的。\t,\n转义有效, 但\n没有意义

35-1-6-26-19-24
3-32-7-21-23-25
31-9-2-22-27-20
8-28-33-17-10-15
30-5-34-12-14-16
4-36-29-13-18-11

这个在字符串处理还会再说


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

2.正则表达式

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

MATLAB 正则表达式(一)
正则表达式就是一个表达式(也是一串字符),它定义了某种字符串模式。利用正则表达式,可以对大段的文字进行复杂的查找、替换等。
matlab提供的正则表达式函数有三个:
regexp——用于对字符串进行查找;
regexpi——用于对字符串进行查找,但不区分大小写;
regexprep——用于对字符串进行查找并替换。
今天是第一部分——单个字符的匹配
我们先从简单的开始——以regexpi函数为例。假设你要搜索一个包含字符'cat'的字符串,搜索用的正则表达式就是'cat'。如果搜索对大小写不敏感,单词'catalog'、'Catherine'、'sophisticated'都可以匹配。也就是说:
正则表达式:'cat'
匹配:'cat', 'catalog', 'Catherine','sophisticated'
这个好像和我们通常在记事本里ctrl+F弄出来的东西差不多哈,呵呵。。。(btw:为了方便,下面的叙述中字符串和正则表达式的''都省略不写。)
1 句点符号 '.' ——匹配任意一个(只有一个)字符(包括空格)。
假设你在玩英文拼字游戏,想要找出三个字母的单词,而且这些单词必须以't'字母开头,以'n'字母结束。另外,假设有一本英文字典,你可以用正则表达式搜索它的全部内容。要构造出这个正则表达式,你可以使用一个通配符——句点符号'.'。这样,完整的表达式就是't.n',它匹配'tan'、'ten'、'tin'和'ton',还匹配't#n'、'tpn'甚至't n',还有其他许多无意义的组合。这是因为句点符号匹配所有字符,包括空格:
正则表达式:t.n
匹配:ten, tin, ton, t n, tpn, t#n, t@n
Matlab例子程序:
clear;clc
str='ten,&8yn2tin6ui>&ton, t n,-356tpn,$$$$t#n,4@).,t@nT&nY';
pat='t.n';
o1=regexpi(str,pat,'start')%用'start'参数指定输出o1为匹配正则表达式的子串的起始位置
o2=regexpi(str,pat,'end')%用'start'参数指定输出o1为匹配正则表达式的子串的结束位置
o3=regexpi(str,pat,'match')%用'match'参数指定输出o2为匹配正则表达式的子串 
[o11,o22,o33]=regexpi(str,pat,'start','end','match') %同时输出起始位置和子串
输出为:
o22 =
3 8 13 18 23 28 33 36
o33 =
'ten' 'tin' 'ton' 't n' 'tpn' 't#n' 't@n' 'T&n'
o1 =
1 10 18 23 31 39 48 51
o2 =
3 12 20 25 33 41 50 53
o3 =
'ten' 'tin' 'ton' 't n' 'tpn' 't#n' 't@n' 'T&n'
o11 =
1 10 18 23 31 39 48 51
o22 =
3 12 20 25 33 41 50 53
o33 =
'ten' 'tin' 'ton' 't n' 'tpn' 't#n' 't@n' 'T&n'
2 方括号符号 '[oum]' ——找到方括号中的任意一个即是匹配
为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号('[]')里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配。也就是说,正则表达式't[aeio]n'只匹配'tan','Ten','tin'和'ton'。但'Toon','taen'不匹配,因为在方括号之内你只能匹配单个字符:
正则表达式:t[aeio]n
匹配:tan, ten, tin, ton
matlab 例子程序:
clear;clc
str='ten,&8yn2tin6ui>&ton, t n,-356tpn,$$$$t#n,4@).,t@nT&nY';
pat='t[aeiou]n';
o1=regexpi(str,pat,'start')%用'start'参数指定输出o1为匹配正则表达式的子串的起始位置
o2=regexpi(str,pat,'end')%用'start'参数指定输出o1为匹配正则表达式的子串的结束位置
o3=regexpi(str,pat,'match')%用'match'参数指定输出o2为匹配正则表达式的子串 
[o11,o22,o33]=regexpi(str,pat,'start','end','match') %同时输出起始位置和子串
输出结果为
o1 =
1 10 18
o2 =
3 12 20
o3 =
'ten' 'tin' 'ton'
o11 =
1 10 18
o22 =
3 12 20
o33 =
'ten' 'tin' 'ton'
3 方括号中的连接符 '[c1-c2]' ——匹配从字符c1开始到字符c2结束的字母序列(按字母表中的顺序)中的任意一个。
为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号('[]')里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配。也就是说,正则表达式't[aeio]n'只匹配'tan'、'Ten'、'tin'和'ton'。但'Toon'不匹配,因为在方括号之内你只能匹配单个字符:
正则表达式:t[a-z]n
匹配:tan, tbn,tcn,tdn,ten,…, txn, tyn,tzn
matlab 例子程序:
clear;clc
str='ten,&8yn2tin6ui>&ton, t n,-356tpn,$$$$t#n,4@).,t@nT&nY';
pat='t[a-z]n';
o1=regexpi(str,pat,'start')%用'start'参数指定输出o1为匹配正则表达式的子串的起始位置
o2=regexpi(str,pat,'end')%用'start'参数指定输出o1为匹配正则表达式的子串的结束位置
o3=regexpi(str,pat,'match')%用'match'参数指定输出o2为匹配正则表达式的子串 
[o11,o22,o33]=regexpi(str,pat,'start','end','match') %同时输出起始位置和子串
4 \n ——特殊字符
就是由'\'引导的,代表有特殊意义或不能直接输入的单个字符。在使用printf函数输出时我们常用'\n'来代替回车符,这里也是同样的道理,用\n在正则表达式中表示回车符。类似的还有\t横向制表符,'\*'表示'*'等。后一种情况用在查询在正则表达式中有语法作用的字符。详见下表。
下面是一些匹配单个字符的转义字符正则表达式及所匹配的值。
\xN或\x{N} 匹配八进制数值为N的字符
\oN或\o{N} 匹配十六进制数值为N的字符
\a Alarm(beep)
\b Backspace
\t 水平Tab
\n New line
\v 垂直Tab
\f 换页符
\r 回车符
\e Escape
\c 某些在正则表达式中有语法功能或特殊意义的字符c,要用\c来匹配,而不能直接用c匹配
matlab程序例子
clear;clc
str='l.[a-c]i.$.a';
pat1='.';pat2='\.';
o=regexpi(str,pat1,'match')
o1=regexpi(str,pat2,'match')
输出为:
o =
'l' '.' '[' 'a' '-' 'c' ']' 'i' '.' '$' '.' 'a'
o1 =
'.' '.' '.'
5 \w,\s和\d——范围表达式
和上面的\n等表中的转义字符有所不同,\w,\s,\d等匹配的不是某个特定的字符,而是某一类字符。具体说明如下:
\w匹配任意的单个文字字符,相当于[a-zA-Z0-9_];
\s匹配任意的单个空白字符,相当于[\t\f\n\r];
\d匹配任意单个数字,相当于[0-9];
\S匹配除空白符以外的任意单个字符,相当于[^\t\f\n\r]——方括号中的^表示取反;
\W匹配任意单个字符,相当于[^a-zA-Z0-9_];
\D匹配除数字字符外的任意单个字符,相当于[^0-9]。
matlab程序例子,这里引用的是matlab帮助中的例子:
str='easy as 1,2,3';%这个字符串可真有点意思,呵呵
pat='\d';
[o1,o2]=regexpi(str,pat,'start','match')
输出结果为:
o1 =
9 11 13
o2 =
'1' '2' '3'
好了,今天就这些吧。goodluck~~
第二部分串的匹配
1. 多次匹配
比如,我们要匹配'ppp',那么就可以用正则表达式'ppp',还有一种更简单一点的记法'p{3}'。正则表达式中的'{}'用来表示匹配前面的表达式的出现次数。就是说,'p{2,3}',匹配'pp'和'ppp'。除了'{}',还有几个字符,用在表示单个字符的正则表达式后面表示次数,详见下表,表中的expr表示第一部分我们讲过的所有表达式。
expr? 与expr匹配的元素出现0或1次,相当于{0,1}
expr* 与expr匹配的元素出现1次或更多,相当于{0,}
expr+ 与expr匹配的元素出现1次或更多,相当于{1,}
expr{n} 与expr匹配的元素出现n次,相当于{n,n}
expr{n,} 与expr匹配的元素至少出现n次
expr{n,m} 与expr匹配的元素出现n次但不多于m次
假设我们要在文本文件中搜索美国的社会安全号码。这个号码的格式是999-99-9999。用来匹配它的正则表达式如图所示。在正则表达式中,连字符(“-”)有着特殊的意义,它表示一个范围,比如从0到9。因此,匹配社会安全号码中的连字符号时,它的前面要加上一个转义字符“\”。完整的正则表达式为[0-9]{3}\-[0-9]{2}\-[0-9]{4}
假设进行搜索的时候,你希望连字符号可以出现,也可以不出现——即,999-99-9999和999999999都属于正确的格式。这时,你可以在连字符号后面加上“?”数量限定符号。完整的正则表达式为[0-9]{3}\-?[0-9]{2}\-?[0-9]{4} 
下面我们再来看另外一个例子。美国汽车牌照的一种格式是四个数字加上二个字母。它的正则表达式前面是数字部分“[0-9]{4}”,再加上字母部分“[A-Z]{2}”。完整的正则表达式为[0-9]{4}[A-Z]{2} 
另外,当我们使用expr*时,matlab将尽可能的匹配最长的字符子串。如:
str = '<tr valign=top><td><aname="19184"></a>xyz';
regexp(hstr, '<.*>', 'match')
ans =
'<tr valign=top><td><aname="19184"></a>'
如果我们希望匹配尽可能短的字符子串时,可以在上面我们使用的字符串后使用'?',也就是expr*?,如:
str = '<tr valign=top><td><aname="19184"></a>xyz';
regexp(hstr, '<.*?>', 'match')
ans =
'<tr valign=top>' '<td>' '<a name="19184">' '</a>'
还有一种是expr*+ ,这种表达式的用法很诡异,没弄懂在什么地方有用。如果哪位大侠有高见,望不吝赐教!
这个表达式的执行过程是这样的,先执行expr*,“游标”(如果有的话)就指到了与expr*匹配的字符子串的最末端,然后从那里开始再检查下一个字符与后面的表达式是否匹配,如果匹配就继续向前(如果一直成功则返回最长的字符串),如果不匹配则直接返回空。例如:
str = '<tr valign=top><td><aname="19184"></a>xyz';
regexp(hstr, '<.*+>', 'match')
ans =
{}
regexp(hstr, '<.*+', 'match')
ans =
'<tr valign=top><td><aname="19184"></a>xyz'
2. 逻辑运算符
简单的例子比如'exp|exp2',表示或者满足exp或者满足exp2。还有其他一些正则表达式之间的关系如下:
(expr) 将expr标记为一组、匹配expr,并将匹配的字符子串标记起来以供后面使用。——关于这部分内容后面还会有详细介绍
(?:expr) 说明expr为一组,相当于数学表达式中的()
例如:>>lstr='A body or collection of such stories';
>>regexp(lstr,'(?:[^aeiou][aeiou]){2,}','match')
ans =
'tori'
上面的表达式中{2,}对[^aeiou][aeiou]起作用,如果去掉分组,则只对[aeiou]起作用,如下所示:
>>regexp(lstr,'[^aeiou][aeiou]{2,}','match')
ans =
'tio' 'rie'
(?>expr) expr中的每个元素是一个分组
(?#expr) 这个比较容易理解啦,就是expr放在(?#和)之间是就是注释。如:
>>regexp(lstr, '(?# Match words in caps)[A-Z]\w*', 'match')
ans =
'A'
expr1|expr2 匹配两者之一即可,expr1或者expr2
>>regexp(hstr, '[^aeiou\s]o|[^aeiou\s]i', 'match')
ans =
'bo' 'co' 'ti' 'to' 'ri'
^expr 匹配expr,并且出现在原字符串最前端的子串
expr$ 匹配expr,并且出现在原字符串最末端的子串
>>regexpi(lstr, '^a\w*|\w*s$', 'match')
ans =
'A' 'stories'
\<expr 匹配expr,并且出现在一个单词最前端的子串
>>regexpi(hstr, '\<s\w*', 'match')
ans =
'such' 'stories'
expr\> 匹配expr,并且出现在一个单词最末端的子串
>>regexpi(hstr, '\w*tion\>', 'match')
ans =
'collection'
\<expr\> 更严格的单词匹配,如:以s开头,并且以h结尾的单词
>>regexpi(hstr, '\<s\w*h\>', 'match')
ans =
'such'
3. 左顾右盼
这个也比较容易理解。
expr1(?=expr2) 找到匹配expr1的子串,如果其后的字符串也匹配expr2
如,下面的例子查找所有在','之前的单词。
>> pstr = ['While I nodded, nearly napping, ' ...
'suddenly there came atapping,'];
>>regexpi(pstr, '\w*(?=,)', 'match')
ans =
'nodded' 'napping' 'tapping'
expr1(?!expr2) 找到匹配expr1的子串如果其后的字符串不匹配expr2
下面的例子匹配所有不在','之前的单词
>>regexpi(pstr, '\w*(?!=,)', 'match')
ans =
Columns 1 through 6
'While' 'I' 'nodded' 'nearly' 'napping' 'suddenly'
Columns 7 through 10
'there' 'came' 'a' 'tapping'
(?<=expr1)expr2 找到匹配expr2的子串,如果其前面的字符串也匹配expr1
下面的例子查找所有在','之后的单词,注意:','之后可能有空格
>>regexpi(pstr,'(?<=,\s*)\w*','match')
ans =
'nearly' 'suddenly'
(?<!expr1)expr2 找到匹配expr2的子串,如果其后的字符串不匹配expr1
下面的例子查找所有不在','之后的单词,
>>regexpi(pstr,'(?<!,\s*)\w*','match')
ans =
Columns 1 through 6
'While' 'I' 'nodded' 'early' 'napping' 'uddenly'
Columns 7 through 10
'there' 'came' 'a' 'tapping'
第三部分标记(tokens)
1. 什么是标记(token)?
任何的正则表达式都可以用圆括号括起来作为一个标记。例如,创建一个记录钱数的标记,就可以用($\d+)。这样与之匹配的字符串就会被记录下来,根据这个标记出现的顺序,可以使用\n来引用匹配这个标记的字符串。如\3来引用与标记相匹配的第三个字符串。(如果在替换函数regexprep中,需要用$3来引用。)
下面是一个例子,\S查找任意的非空白字符,\1的用法比较精髓啦——它用来说明要立即再次查找刚刚匹配到的同一个字符,并且要紧挨着第一个。'tokens'选项用来向tok输出所有匹配到的标记;而'tokenExtents'则用来表示匹配标记的起始位置。
>>poestr = ['While I nodded,nearly napping, suddenly there came a tapping,'];
>>[mat tok ext] = regexp(poestr, '(\S)\1', 'match', 'tokens','tokenExtents');
>>mat
mat =
'dd' 'pp' 'dd' 'pp'
>>tok{:}
ans =
'd'
ans =
'p'
ans =
'd'
ans =
'p'
>>ext{:}
ans =
11 11
ans =
26 26
ans =
35 35
ans =
57 57
2. 如何使用标记?
(expr) 记录所有匹配表达式的字符,并做为一个标记,以备后面使用
这个例子说明了标记的生成过程:
>>pstr='andy ted bob jim andrew andy ted mark';
>> [t,m]=regexp(pstr,pat,'tokens','match')
t =
{1x1 cell} {1x2cell} {1x1 cell} {1x1cell} {1x2 cell}
m =
'andy' 'ted' 'andrew' 'andy' 'ted'
>> t{:}
ans =
'y'
ans =
't' 'd'
ans =
'rew'
ans =
'y'
ans =
't' 'd'
\N 匹配同一条正则表达式里的第N个标记中的字符串。如\1匹配第一个标记;
一个例子,用来查找html语句中类似<a>abc</a>的部分:
>>hstr = '<!comment><trnam="7507"></tr><table>Default</table><br>';
>>expr = '<(\w+).*?>.*?</\1>';
>> [mat tok] = regexp(hstr, expr, 'match', 'tokens');
>> mat{:}
ans =
<tr nam="7507"></tr>
ans =
<table>Default</table>
>> tok{:}
ans =
'tr'
ans =
'table'
$N 在一个替换字符串中插入与第N个标记相匹配的字符串(只用于regexprep函数)
一个例子,将匹配到的第一个token和第二个token的位置互换:
>> regexprep('Norma JeanBaker', '(\w+\s\w+)\s(\w+)', '$2, $1')
ans =
Baker,Norma Jean
(?<name>expr) 记录所有匹配表达式expr的字符,做为一个标记,并设定一个名字name
\k<name> 与名为name的标记相匹配
这个例子和这部分第一个例子是一样的,只不过使用了命名的标记。
>>poestr = ['While I nodded, nearly napping, ' ...
'suddenlythere came a tapping,'];
>>regexp(poestr, '(?<nonwhitechar>\S)\k<nonwhitechar>','match')
ans =
'dd' 'pp' 'dd' 'pp'
(?(tok)expr) 如果标记tok已经产生,则匹配表达式expr。if-then结构。其中的标记可以是数字标记,也可以是命名标记
(?(tok)expr1|expr2) 如果标记tok已经产生,则匹配表达式expr1,否则匹配表达式expr2。if-then-else结构
这个例子有点意思,是用来检查一个句子中的性别用词是否匹配,表达式的意思就是,如果前面用的是'Mrs'那么后面就匹配 'her',如果前面用的是'Mr'(也就是没有匹配到'Mr'后面的's',则后面匹配'his')。
>>expr = 'Mr(s?)\..*?(?(1)her|his) son';
>>[mat tok] = regexp('Mr. Clark went to see his son', expr, 'match','tokens')
mat =
'Mr. Clark went to see his son'
tok =
{1x2 cell}
>>tok{:}
ans =
'' 'his'
如果把句子中的his改成her,则结果如下:
>>[mat tok] = regexp('Mr. Clark went to see her son', expr, 'match','tokens')
mat =
{}
tok =
{}
没有与之匹配的结果,呵呵。。。
第四部分多行字符串与多正则表达式
这是最后一部分,也是最容易的一部分了。
1. 多字符串与单个正则表达式匹配
多个字符串存在一个元胞数组里之后,每一个字符串与正则表达式匹配,返回值的维数与元胞数组相同。
>>cstr ={ ...
'Whose woods these are I think I know.' ; ...
'His house is in the village though;' ; ...
'He will not see me stopping here' ; ...
'To watch his woods fill up with snow.'};
>>idx = regexp(cstr, '(.)\1');
>>idx{:}
ans= % 'Whose woods these are I think I know.'
8 % |8
ans= % 'His house is in the village though;'
23 % |23
ans= % 'He will not see me stopping here'
6 14 23 % |6 |14 |23
ans= % 'To watch his woods fill up with snow.'
15 22 % |15 |22
2. 多个字符串与多个正则表达式匹配
这种情况下,应该满足字符串元胞数组中字符串的个数和正则表达式的个数相等——但维数不一定要相等——如可以用4*1的元胞数组与1*4的正则表达式相匹配。
expr = {'i\s', 'hou', '(.)\1', '\<w[aeiou]'};
idx = regexpi(cstr, expr);
idx{:}
ans= % 'Whose woods these are I think I know.'
23 31 % |23 |31
ans= % 'His house is in the village though;'
5 30 % |5 |30
ans= % 'He will not see me stopping here'
6 14 23 % |6 |14 |23
ans= % 'To watch his woods fill up with snow.'
4 14 28 % |4 |14 |28
3. 多字符串的替换
这个呢就没啥难的了,就是在匹配的基础上,在正则表达式后面加入要替换的字符串就ok啦。
这个是matlab中的例子,很容易理解。
>>s = regexprep(cstr, '(.)\1', '--', 'ignorecase')
s =
'Whose w--ds these are I think I know.'
'His house is in the vi--age though;'
'He wi--not s-- me sto--ing here'
'To watch his w--ds fi-- up with snow.


有个奇葩的用法,变量命名如果够规范,可以直接清掉内循环的大变量节省空间

clear -regexp ^inner_


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

3.字符串

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

合并 strcat

%字符串处理

a='  a';b='b  b';c='cccc';m=''
%获取字符串长度
length(a)    
%连接两个字符串,每个字符串最右边的空格被裁切
d=strcat(a,c) 


多行合并strvcat

 %连接多行字符串,每行长度可不等,自动把非最长字符串最右边补空格
%使与最长字符串相等,会忽略空字符串
e=strvcat(a,b,m)


格式化输出 sprintf

数字转字符num2str

字符转数字str2num


%strcmp    比较两个字符串是否完全相等,是,返回真,否则,返回假
%strncmp    比较两个字符串前n个字符是否相等,是,返回真,否则,返回假
%strcmpi    比较两个字符串是否完全相等,忽略字母大小写
%strncmpi   比较两个字符串前n个字符是否相等,忽略字母大小写


%mat2str          将数组转换成字符串,单行,所输即所得

%例子

a = magic(5);

mat2str(a)

%[17 24 1 8 15;23 5 7 14 16;4 6 13 20 22;10 12 19 21 3;11 18 25 2 9]


这个很有用↓↓↓↓

%int2str          把数值数组转换为整数数字组成的字符数组,所见即所得,会多出空格,写文件要后处理

a = magic(5);

mat2str(a)

>> int2str(a)

ans =

17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9

>> mat2str(a)

ans =

[17 24 1 8 15;23 5 7 14 16;4 6 13 20 22;10 12 19 21 3;11 18 25 2 9]


写着写着想注释一下直接ctrl R一下,直接刷新有木有,烦死了!


空格处理

% blanks(n)            创建有n个空格组成的字符串
% deblank(str)          裁切字符串的尾部空格
% strtrim(str)          裁切字符串的开头和尾部的空格,制表,回车符


特殊格式读取函数

csvread :读取逗号分隔格式的数据文件到矩阵
csvwrite:写矩阵到逗号分隔格式的数据文件



dlmread :把一个ASCII限定文件(数据文件)读入矩阵

这个函数非常有意思↑↑↑↑↑

M = dlmread(filename)
M = dlmread(filename, delimiter)
M = dlmread(filename, delimiter, R,C)

R,C 是从零开始的,matlab自己做了个大脸的事情。

M = dlmread(filename, delimiter, range)

range和excel的标记一样,用A3...C9这样的标记


dlmwrite:把矩阵写入到ASCII限定文件(数据文件)
imfinfo :返回图形图象文件的信息
imread :读取图象(到矩阵)
imwrite :写入图象
textread:从文本文件读取格式化数据(important)
wk1read :把Lotus123电子表格读入矩阵
wk1write:把矩阵写入Lotus123wk1电子表格
xlsread :读取excel表格


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

4.命令行

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

这里还不是很熟,先马,回来再看。

如果,上面的东西要记那么多函数真的烦死了。

不熟matlab的还不如直接调用命令行呢,反正脚本语言都应该支持从命令行传值,

export aa=`/bin/echo ${filename1}|/bin/awk '{print $2}'`;

export aa=`perl  -l  -e '$ENV{aa} =~ s#/website/#/#;print $ENV{aa}'`;

[root@bogon ~]# cat aaa.pl

 #!/usr/bin/perl -sprint "$m\n";

print "$n\n";

print "$x\n";

[root@bogon ~]# chmod 755 aaa.pl

[root@bogon ~]# ./aaa.pl -m=5 -n -x=125112

直接#perl -s aaa.pl  -m=5 -n -x=12也可以


#cat change_file.pl

#!/usr/bin/perl -s -i.bak -wpls/$old/$new/g;
#change_file.pl -old='\bHEMP\b' -new='TUFF FIBER' items


有的时候要在一段代码里写个批处理调用JAVA的程序或者调用perl的脚本,直接用dos命令就好了,command就是command window里的东西了,该怎么写怎么写。

所以学下命令行还是很必须的。

[status,results] = dos('command');

results就是cmd窗口打印出来的结果。字符串格式,转义的dilimiter都变成了单个空格。省的文件读入了,速度又快一举两得。


下面的是一些装逼利器,别人日志上扒下来的,基本不会用,除非你常年开着matlab当桌面。

dos('taskmgr.exe') %调用任务管理器

dos('control.exe') %打开控制面板

dos('cleanmgr.exe') %磁盘清理

dos('cmd.exe') %命令提示符

dos('shutdown.exe -s -f -t 0') %立即关机

dos('shutdown.exe -r -f -t 0') %立即重启

dos('ping www.baidu.com') %ping命令

dos('calc.exe') %打开计算机

dos('notepad.exe') %打开记事本

dos('winword.exe') %打开word

dos('powerpnt.exe') %打开power point

dos('regedit32.exe') %打开注册表编辑器



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

5总结

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

没有matlab做不到的东西,只有我太菜不知道能做


Matlab数字图像处理的基础 Matlab商业数学软件,主要包括MATLAB和Simulink两大部分 三大数学软件:MATLAB、Mathematica、Maple Matlab拥有数百个内部函数和三十几种工具包(Toolbox) 工具包: @功能工具包  用来扩充matlab的符号计算,可视化建模仿真、文字处理以及实时控制等功能 @学科工具包  专业性比较强,控制工具包、信号处理工具包、通信工具包等   阅读详情

相关推荐

Python与R 语言,各自的应用场景是什么,数据分析与挖掘该选哪一个?

什么是R语言? R语言,一种自由软件编程语言与操作环境,主要用于统计分析、绘图、数据挖掘。R本来是由来自新西兰奥克兰大学的罗斯·伊哈卡和罗伯特·杰特曼开发(也因此称为R),现在由“R开发核心团队”负责开发。R基于S语言的一个GNU计划项目,所以也可以当作S语言的一种实现,通常用S语言编写的代码都可以不作修改的在R环境下运行。R的语法是来自Scheme。 R的源代码可自由下载使用,亦有已编译的可执行...

数智集的博客 2126

matlab printf格式化输出,Shell printf格式化输出命令

printf 是 awk 的重要格式化输出命令,本节我们先介绍一下 printf 命令如何使用。需要注意,在 awk 中可以识别 print 输出动作和 printf 输出动作(区别是:print 会在每个输出之后自动加入一个换行符;而 printf 是标准格式输出命令,并不会自动加入换行符,如果需要换行,则需要手工加入换行符),但是在 Bash 中只能识别标准格式化输出命令 printf。所以我...

weixin_29913191的博客 1523

详解Linux中的awk命令

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。这篇文章主要介绍了Linux中的awk命令的相关知识,需要的朋友可以参考下

MATLAB修改字体大小,加粗,字体样式,字体颜色,线形,希腊字母,特殊符号,图片文本位置及字体设置等

MATLAB修改字体大小,加粗,字体样式,字体颜色,线形颜色格式,添加标签,修改标签格式,希腊字母表,图片文本位置等

weixin_48033204的博客 3万+

保姆级教程:用海思PQTool搞定ISP图像调试,从参数读取到固件烧录全流程

本文提供海思PQTool的ISP图像调试全流程指南,从参数读取、实时调试到固件烧录,涵盖环境配置、核心功能解析、参数固化及生产部署。通过实战案例和避坑指南,帮助开发者高效提升图像质量,适用于海思开发板的ISP调试与优化。

weixin_30872337的博客 279

PPO(Proximal Policy Optimization)算法原理及实现,详解近端策略优化

接着上面的讲,PG方法一个很大的缺点就是参数更新慢,因为我们每更新一次参数都需要进行重新的采样,这其实是中on-policy的策略,即我们想要训练的agent和与环境进行交互的agent是同一个agent;与之对应的就是off-policy的策略,即想要训练的agent和与环境进行交互的agent不是同一个agent,简单来说,就是拿别人的经验来训练自己。举个下棋的例子,如果你是通过自己下棋来不断提升自己的棋艺,那么就是on-policy的,如果是通过看别人下棋来提升自己,那么就是off-policy的。

weixin_41106546的博客 9万+

MATLAB读取中文txt

matlab进阶知识

Kiek17的博客 2233

Honeywell EPKS 核心功能块组态与执行调度实战解析

本文深入解析Honeywell EPKS系统的核心功能块组态与执行调度技术,涵盖控制模块(CM)、顺序控制模块(SCM)和输入输出模块(IOM)的配置方法。通过实战案例分享执行顺序(ORDERINCM)和CEE执行周期的优化策略,帮助工程师提升工业自动化系统的控制精度和运行效率。

weixin_28724319的博客 410

MATLAB快速入门(二)

MATLAB快速入门(二)

qq_34970775的博客 3434

人工智能的未来:从弱 AI 到通用人工智能(AGI)

从最初的简单自动化程序,到如今的深度学习大模型(如 ChatGPT、DeepSeek、Grok),AI 逐步从弱人工智能(Weak AI)向更智能、更自主的方向发展。AI 的发展将影响就业市场,取代重复性、低技能的工作,同时创造新的高技能岗位。尽管深度学习带来了巨大的进步,但它仍然依赖大量标注数据进行训练,对新环境的泛化能力有限,这也是当前 AI 迈向 AGI 的关键障碍之一。本文将探讨 AI 从弱 AI 进化到 AGI 的可能性,分析目前 AI 技术的局限性,并展望未来 AI 在各个行业的影响。

qq_20245171的博客 1万+

软件设计师---UML

软件设计师---UML

我从不打没有准备的仗! 1万+

matlab中spdiag_Matlab中的各种文件.doc

Matlab中的各种文件MATLAB中保存的各种文件??2010-07-03 16:43:00|??分类: 默认分类 |??标签: |字号大中小?订阅MATLAB是一个多功能集成软件,不同的功能需要使用不同的文件格式去表现,所以MATLAB的文件也有多种格式。最基本的是M文件、数据文件和图形文件,除此之外,还有MEX文件、模型文件和仿真文件等。下面分别予以说明。(1) M文件,以.m为扩展名,所以...

weixin_42363303的博客 308

WblockCloneObjects克隆一个图纸内的实体包括块参照,同名块参照的处理

public static void HeBingTu2(double lieJu, List<string> filePaths) { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; using (DocumentLock docLock = doc.Lock...

1108

网络仿真软件之MATLAB

MATLAB软件是由美国Mathworks公司推出的用于数值计算和图形处理的科学计算系统环境。MATLAB是英文MATrix LABoratory(短阵实验室)的缩写。在MATLAB环境下,用户可以集成地进行程序设计、数值计算、图形绘制、输入输出、文件管理等各项操作。 MATLAB提供了一个人机交互的数学系统环境,该系统的基本数据结构是矩阵,在生成矩陈对象时,不要求作明确的维...

weixin_34185560的博客 2024

31、工程中不确定性量化与优化的全面解析

本文全面解析了工程中不确定性量化与优化的关键方法。针对数据充足与不足两种情况,分别介绍了概率理论和非概率方法在不确定性建模中的应用;系统阐述了采样方法、FORM/SORM、泰勒级数近似等不确定性传播技术;深入比较了RBDO与RDO两种主流优化框架的原理、步骤及适用场景,并通过两杆桁架案例展示了具体实现过程。文章旨在为工程师提供一套完整的从不确定性分析到优化设计的方法论,提升工程系统的可靠性与稳健性。

php55的博客 121

Android一个APP里面最少有几个线程

Android应用启动时,默认会创建一个进程,该进程中最少包含负责处理用户交互、UI更新等核心操作,所有与界面相关的逻辑必须在此线程执行。若在此线程执行耗时操作(如网络请求),会导致界面卡顿甚至触发ANR(应用无响应)。当对象重写了finalize()方法时,该线程负责将这些对象放入队列并调用其finalize()方法,完成资源释放后再由GC回收。监控的执行效率。如果finalize()方法执行超时(默认10秒),此线程会触发虚拟机退出以防止应用长时间阻塞。

编程进化论 613

ubuntu安装matlab_我换掉windows和matlab的原因

2019年8月10日 YU BtoC Staff Only 1F 最早开始用的电脑是windows98的系统,工作和学习的需要又使我在matlab上花费了不少的时间。但是两个月之前我毅然决然地换掉他们,现在看,我是非常开心换掉他们的。 本人电脑硬盘是512G的固态,给系统分配了150G的空间。由于安装了visual studio, matlab, labview, 以及...

weixin_39537977的博客 306

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Markdown 标记语言指北

这是班刊约稿的一篇文章. 全文约6000字, 预计需要 60 分钟读完. Markdown 标记语言指北 TOC 什么是 Markdown? Markdown 可以用来干什么? 第一步? 一些专业一点的内容 Markdown 的简要语法 GFM? 段落 标题 文字的修饰 段落的修饰 列表 插入 超链接 图片 表格 进阶的应用 数学公式 代码 嵌入HTML 扩展的 Markdow...

weixin_33733810的博客 444

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

r语言跟python哪个适合数据分析_R语言 vs Python对比:数据分析哪家强?

什么是R语言?R语言,一种自由软件编程语言与操作环境,主要用于统计分析、绘图、数据挖掘。R本来是由来自新西兰奥克兰大学的罗斯·伊哈卡和罗伯特·杰特曼开发(也因此称为R),现在由“R开发核心团队”负责开发。R基于S语言的一个GNU计划项目,所以也可以当作S语言的一种实现,通常用S语言编写的代码都可以不作修改的在R环境下运行。R的语法是来自Scheme。R的源代码可自由下载使用,亦有已编译的可执行文件...

weixin_42106357的博客 2075

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

数据分析和python的区别_r和python数据分析的区别有哪些

展开全部什么是R语言?R语言,一种自由软件编程语言与操作环境,主要32313133353236313431303231363533e4b893e5b19e31333433646531用于统计分析、绘图、数据挖掘。R本来是由来自新西兰奥克兰大学的罗斯·伊哈卡和罗伯特·杰特曼开发(也因此称为R),现在由“R开发核心团队”负责开发。R基于S语言的一个GNU计划项目,所以也可以当作S语言的一种实现,通常用...

weixin_39992788的博客 249

r语言和python的区别-R语言 vs Python对比:数据分析哪家强?

什么是R语言?R语言,一种自由软件编程语言与操作环境,主要用于统计分析、绘图、数据挖掘。R本来是由来自新西兰奥克兰大学的罗斯?伊哈卡和罗伯特?杰特曼开发(也因此称为R),现在由"R开发核心团队”负责开发。R基于S语言的一个GNU计划项目,所以也可以当作S语言的一种实现,通常用S语言编写的代码都可以不作修改的在R环境下运行。R的语法是来自Scheme。R的源代码可自由下载使用,亦有已编译的...

weixin_37988176的博客 1663

python数据分析与挖掘实战张良军_数据分析与挖掘该选哪一个?Python 还是R 语言?...

Python和R在数据分析和数据挖掘方面都有比较专业和全面的模块,很多常用的功能,比如矩阵运算、向量运算等都有比较高级的用法。什么是R语言?R语言,一种自由软件编程语言与操作环境,主要用于统计分析、绘图、数据挖掘。R本来是由来自新西兰奥克兰大学的罗斯·伊哈卡和罗伯特·杰特曼开发(也因此称为R),现在由“R开发核心团队”负责开发。R基于S语言的一个GNU计划项目,所以也可以当作S语言的一种实现,通常...

weixin_36367702的博客 127

r与python在用户群方面的对比_数据分析与挖掘该选谁?Python 还是R 语言?

ython和R在数据分析和数据挖掘方面都有比较专业和全面的模块,很多常用的功能,比如矩阵运算、向量运算等都有比较高级的用法。什么是R语言?R语言,一种自由软件编程语言与操作环境,主要用于统计分析、绘图、数据挖掘。R本来是由来自新西兰奥克兰大学的罗斯·伊哈卡和罗伯特·杰特曼开发(也因此称为R),现在由“R开发核心团队”负责开发。R基于S语言的一个GNU计划项目,所以也可以当作S语言的一种实现,通常用...

weixin_39552874的博客 131

r语言和python-R语言 vs Python对比:数据分析哪家强?

什么是R语言?R语言,一种自由软件编程语言与操作环境,主要用于统计分析、绘图、数据挖掘。R本来是由来自新西兰奥克兰大学的罗斯・伊哈卡和罗伯特・杰特曼开发(也因此称为R),现在由“R开发核心团队”负责开发。R基于S语言的一个GNU计划项目,所以也可以当作S语言的一种实现,通常用S语言编写的代码都可以不作修改的在R环境下运行。R的语法是来自Scheme。R的源代码可自由下载使用,亦有已编译的可执行文件...

weixin_37988176的博客 870

python和r语言哪个入门容易-R语言 vs Python对比:数据分析哪家强?

什么是R语言?R语言,一种自由软件编程语言与操作环境,主要用于统计分析、绘图、数据挖掘。R本来是由来自新西兰奥克兰大学的罗斯·伊哈卡和罗伯特·杰特曼开发(也因此称为R),现在由“R开发核心团队”负责开发。R基于S语言的一个GNU计划项目,所以也可以当作S语言的一种实现,通常用S语言编写的代码都可以不作修改的在R环境下运行。R的语法是来自Scheme。R的源代码可自由下载使用,亦有已编译的可执行文件...

weixin_39860636的博客 851

数据分析与挖掘该选哪一个?Python 还是R 语言?

Python和R在数据分析和数据挖掘方面都有比较专业和全面的模块,很多常用的功能,比如矩阵运算、向量运算等都有比较高级的用法。 什么是R语言? R语言,一种自由软件编程语言与操作环境,主要用于统计分析、绘图、数据挖掘。R本来是由来自新西兰奥克兰大学的罗斯·伊哈卡和罗伯特·杰特曼开发(也因此称为R),现在由“R开发核心团队”负责开发。R基于S语言的一个GNU计划项目,所以也可以当作S语言的一种实...

程序之道的博客 1358
下一篇: perl 命令行总结
redreamality
博客等级 码龄15年 1粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值