matlab中的match_str,Matlab的网络采集程序

偶尔看到这段代码,有点意思,勇哥记录下来把玩一下。

作者管它叫网络爬虫,其实是嘘头,因为它只不过是批量采集网页,然后用正则表达式写入excel中罢了。

netMarketing类库中的httpClass类可比这个强大多了。

勇哥试了一下,下面的代码由于目标页面已经改版,所以现有正则表达式采集规则已经失效,采集不到东西了。

所以代码只能是仅供参考。clear;clc;

warning off;

for year = 2010:2011 %年份

for season = 1:4 %季度

fprintf('%d年%d季度的数据...', year, season)

[sourcefile, status] = urlread(sprintf('http://vip.stock.finance.sina.com.cn/corp/go.php/vMS_MarketHistory/stockid/000001/type/S.phtml?year=%d&season=%d', year));

if ~status

error('读取出错!\n')

end

expr1 = '\s+(\d\d\d\d-\d\d-\d\d)\s*';%获取日期('s'空格字符间的日期数据)

[datefile, date_tokens]= regexp(sourcefile, expr1, 'match', 'tokens');%返回正则表达式的两个关键字 'match'和 'tokens'

date = cell(size(date_tokens));

for idx = 1:length(date_tokens)

date{idx} = date_tokens{idx}{1};%length(date_tokens)行 1列

end

expr2 = '

(\d*\.?\d*)
'; %从源文件中获取目标数据

[datafile, data_tokens] = regexp(sourcefile, expr2, 'match', 'tokens');

data = zeros(size(data_tokens));

for idx = 1:length(data_tokens)

data(idx) = str2double(data_tokens{idx}{1}); %length(data_tokens)行 1列

end

data = reshape(data, 6, length(data)/6 )'; %重排 数据表格形式为6列,(length(data)/6)行)

filename = sprintf('%d年',year); %文件名

pathname = [pwd '\data']; %路径名

if ~exist(pathname,'dir')

mkdir(pathname);

end

fullfilepath = [pwd '\data\' filename];

% 保存数据到Excel

sheet = sprintf('第%d季度', season); %工作表名称

xlswrite(fullfilepath, date' , sheet);

range = sprintf('B1:%s%d',char(double('B')+size(data,2)-1), size(data,1)); %从源文件中获取的目标数据的放置范围

xlswrite(fullfilepath, data, sheet, range);

fprintf('OK!\n')

end

end

fprintf('全部完成!\n')

---------------------

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!

#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。如果需要本贴图片源码等资源,请向勇哥索取。

收藏 | 0点赞 | 0打赏作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
随着信息技术的不断发展,数字图像处理技术越来越多地被应用在航空航天、生物医学工程、工业检测、机器人视觉、军事制导和文化艺术等各个领域。图像处理日益成为一门引人注目、前景远大的学科,而MATLAB语言以强大的科学运算、灵活程序设计流程、高质量的图形可视化与界面设计、与其他程序和语言便捷的接口功能,成为当今国际上科学界最具影响力、最有活力的软件。MATLAB又称矩阵实验室,其强大的矩阵运算能力是其它语言无法比拟的,而矩阵运算正是图像处理的根本所在。因此,本文以MATLAB提供的图形用户界面(GUI)为平台对图像处理系统进行设计。依据软件开发的设计原则,确定了设计的一般步骤,具体如下: (1)明确系统所要实现的主要功能,应该具有哪些模块。 (2)绘出基本的用户界面草图,并对其进行修改,最终确定一个方案。 (3)根据最终确定的方案,利用MATLAB GUI制作用户操作界面以及其他菜单项目。 (4)编写界面及其菜单里的每个功能的回调程序,并且逐项进行功能检测。根据以上的步骤,首先利用MATLAB图形用户界面设计了该系统的静态界面。当静态界面设计完成之后,GUI将自动生成.FIG和.M文件。其.FIG文件保存了关于静态窗口界面的所有对象的属性值,.M文件包括GUI设计、控制函数以及为子函数的用户控件回调函数,主要用于控制GUI展开时的各种特征。这个.M文件可以分为GUI初始化和回调函数两个部分,用户控件的回调函数根据用户与GUI的具体交互方式分别调用。回调函数就是在调用对象时,该对象所要回应的动作。 因此,如何编写对象的回调函数是该系统的一大难点。在为编写回调函数时,获得该函数的句柄是实现对象动作功能的关键所在。句柄实际上就是分配给每个对象的数字标识,每次创建对象时,MATLAB就会自动为它创建一个唯一的句柄,这样只要我们能找到该句柄,就能对该对象进行操作。本文首先简单的介绍了MATLAB GUI的基本知识,为系统的界面的设计提供了理论基础;接着系统的介绍了数字图像的一些基础,主要包括图像文件格式,图像的类型以及颜色空间模型,在系统这些都有所体现;然后详细的介绍了数字图像处理的一些常用技术,这些技术和方法在系统大都很好的实现了。 本系统实现了图像处理技术比较实用的若干功能,而且操作简单,容易上手。该系统支持索引图像、灰度图像、二值图像、RGB图像等图像类型;支持BMP、GIF、JPEG、TIFF、PNG等图像文件格式的读,写和显示。并具有很多图像处理功能,例如图像类型转换功能实现了色彩图像、索引图像和二值图像之间的相互转换;编辑功能实现了对图像的旋转和添加噪声操作;图像滤波部分包括值滤波、巴特沃斯滤波器、邻域平均滤波;图像变换模块主要是傅里叶变换、离散余弦变换、Hough变换和Radon变换;在边缘检测功能,主要用到了Roberts算子、Sobel算子、Prewitt算子、LoG算子、Canny算子和零交叉法。 其他的模块主要是颜色空间的转换和显示当前的时间和日期。以上这些功能的实现都是在MATLAB语言的基础上,编写M文件程序代码实现的。QPSK调制全称Quadrature Phase Shift Keying,http://blog.sina.com.cn/s/blog_a5b5b79e0101rwlf.html,意为正交相移键控,是一种数字调制方式。它的频带利用率高,且抗干扰性能强,已经成为现代通信技术一种十分重要的调制解调方式。之所以选择这些功能,是因为这些技术在我们日常的生活有很强的的应用价值,并且对于一些算法运算量大、算术复杂、处理速度低的技术,可以利用MATLAB简单快捷的得到数据结果,又能够得到直观的图示。 提出了基于普通PC机声卡的LabVIEW和MATLAB的虚拟式语音信号采集与分析处理的设计方案。MATLAB http://blog.sina.com.cn/s/blog_a5b5b79e0101rtqj.html具有很强大的数学计算和图形绘制功能,但它在界面开发能力、数据输入、网络通信、硬件控制方面都比较繁琐,在信号和图像处理等领域具有无可比拟的优势;而LabVIEW刚好是标准的数据采集和仪器控制软件,以其强大的数据采集、数据分析和仪器控制功能在现代测控领域得到了广泛的应用,但在数值处理分析和算法工具等方面效率低,功能简单,不能满足工程上多方面的要求。将两者结合起来,取长补短,是快速高效开发语音信号和分析系统的一种有效的方法。通过收集资料、整理、归纳出对于语音信号采集与分析的技术手段,综合成本低,便于实现,发挥软件优势的这些因素,选择了该种方案。首先,本课题从学生研究角度的实际情况出发,在分析了语音信号采集的理论知识基础上,基于PC机的集成声卡,运用LabVIEW操作声卡录制一段自己说话的语音信号。
MATLAB,没有内建的 `sort__nat` 函数。然而,你可以使用自定义的方法来实现自然排序(natural sort)。 自然排序是一种按照人类习惯进行排序的方法,即使数字嵌入在字符串,也会正确地按照数字的大小进行排序。 一个常见的方法是使用自定义的比较函数来实现自然排序。你可以编写一个函数来比较两个字符串,并在排序时使用该函数。 例如,下面是一个简单的示例函数 `natcompare`,用于进行自然排序: ```matlab function result = natcompare(str1, str2) % 将字符串分割为数字和非数字部分 tokens1 = regexp(str1, '\d+|\D+', 'match'); tokens2 = regexp(str2, '\d+|\D+', 'match'); % 逐个比较数字和非数字部分 for i = 1:min(numel(tokens1), numel(tokens2)) token1 = tokens1{i}; token2 = tokens2{i}; % 如果是数字,则将其转换为数值进行比较 if isstrprop(token1, 'digit') && isstrprop(token2, 'digit') num1 = str2double(token1); num2 = str2double(token2); if num1 < num2 result = -1; return; elseif num1 > num2 result = 1; return; end else % 否则,按照字符串的字典顺序进行比较 result = strcmp(token1, token2); if result ~= 0 return; end end end % 如果所有的部分都相同,则比较字符串的长度 result = numel(str1) - numel(str2); end ``` 然后,你可以使用 `sort` 函数并传入自定义的比较函数 `natcompare` 来进行自然排序: ```matlab strings = {'file1.txt', 'file10.txt', 'file2.txt', 'file11.txt'}; sorted_strings = sort(strings, @natcompare); disp(sorted_strings); ``` 输出结果为: ``` file1.txt file2.txt file10.txt file11.txt ``` 这样就可以实现自然排序的效果了。请注意,此示例函数 `natcompare` 只是一个简单的实现,如果你需要处理更复杂的情况,可能需要进行适当的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值