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

来源:互联网 发布:管家婆导入数据失败 编辑:程序博客网 时间:2024/06/04 19:47

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做不到的东西,只有我太菜不知道能做


原创粉丝点击