如何判断一个字符串为数字,多谢

handj 2002-03-05 05:15:16
有否一个函数
...全文
30 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
huaxiaotao 2002-03-05
  • 打赏
  • 举报
回复
一个字符一个字符的判断
huaxiaotao 2002-03-05
  • 打赏
  • 举报
回复
isdigit()
欢迎使用时间计算小工具0.2.6.fr1: 版本说明:该版本仅进行了信息性说明更新,保证系统当前计算的有效性,所以仅更新了wi ndows 64位版本的软件,如果需要更多功能请付费并告知作者,作者会为你定制其软件功能 (例如:各进位点修改功能,或更专业的跨所有时间进位点计算等功能,或图形界面支持, 编程语言互译支持,等等)!多谢支持! 功能说明: 这个软件可以计算《时间起点,时间段,时间结点》,通过给出其中的任意两个可计算 时间内容,得出另一个被计算内容。 (各时间点进位点:世纪:100年,年:12月,日:24时,时:60分钟,分:60秒) 进位说明:由于当前进位点根据公元后天体物理学现象所制定的进位标准,仅对现世既以24 小时为地球自转一周的标准进行计算,由于天体运动的不规率受宇宙中人类目前无法精确模 拟计算会(正在)受其影响的因素的存在,所以无法精确确认并计算公元以前或地球自转非 24小时时间或之后的时间进位标准,所以该程序依然支持以当前各时间进位点的计算,但现 实其非24小时计算标准的结果仅供参考,内容意义自定义。 例:公元 2015年1月1日0时0分0秒 在经过 1秒种后 时间结点为:公元 2015年1月1日0时0 分1秒。 通用命令格式:<指定修改的项><指定修改的内容><指定被计算项> 指定修改的项、指定被计算项: s:时间起点;d:指定时间段;e:时间结点 指定修改的项 还包括: -d:指定负时间段; 以上内容不可自己指明计算自己,被计算内容需要的信息不全时不可以被计算。 指定修改的内容: 凡是除去关键位置上的关键标志以外内容,全部被认定为指定修改内容字符串;时间段 字符串:截取后7位有效数字,非数字位为分隔符,分别从左到右赋值给《世纪,年,月, 日,时,分,秒》,可以左省略;时间起点/结点字符串:截取后6位,从年到秒,非数字位 为分隔符,不可省略并且会检查字符串内容有效性,错误会有提示。 独立命令: cl:清除时间起点、时间终点字符串,并使时间段字符串格式化到天。 系统外命令: q:退出程序 旧指令兼容: <指定内容>:对时间段进行累加计算,如果字符串首是负号,那么就是系统时间段减去 指定内容的时间段,在时间起点不为0时,更新时间结点; s<指定内容>:对时间起点进行更新,并更新时间结点; m<天数>:输入指定月进位天数,来获得一个临时格式化字符串 例:d1.2.3.4.5.6.7e 那么就是修改时间段为《1世纪,2年,3月,4日,5时,6分,7秒》 ,并根据原保存的时间起点,在结合现在的时间段,更新计算时间结点。 祝您使用愉快!:) 如果对程序有任何建议或意见,(还)请发送邮件告知:lizhenqian@si na.com!谢谢! 您的当前程序运行日志文件名:running.log.txt (日志文件内会保存您当前所有操作内容,但不包括当前以上内容,关于默认主目录:在起 始运行的目录中) 请输入时间:
一、强大的排版功能: 1 、可以选择对文本处理时是否删除空格,包括全角和半角空格,还可以选择 是否删除源文本一行内部的空格。 2 、可以选择哪些行不进行排版。 3 、是否删除连续的重复行。 4 、是否忽略以某些特定字符串开始的行。 5 、你可以选择是否进行全角- 〉半角字符的转换。 6 、是否将连续两个以上某个字符替换为其他字符串,比如将连续两个以上的 ‘。’替换为‘……’。 7 、是否对某些特定字符串进行替换,比如将‘[’替换为‘“’。 8 、你可以选择按照什么原则对源文本进行分段,就是说,源文本中怎么确定 哪些行是同一段的。是按照源文本中的空行,还是按照设定的一些行末字符,例如 ‘。’、‘!’等等,或者两者同时使用。 9 、是否矫正段内的双引号和单引号的匹配。 10 、段间是否插入空行。 11 、段首空几格。 12 、是否一段就是一行。 13 、如果一段不是一行的话,每行长度是多少,每行前面是否需要空出固定 的宽度,这里还可以设定避头尾字符,以便更符合中文的编排方式。 14 、文本的第一行是否需要居中。 15 、排版时是否忽略全部为英文的行。如果你的文章中有程序片断,而且都 是英文。那么,这个功能就有用了。一个秘诀:如果你的注释都是用'//'开头的话, 把它加到“忽略行首为以下字符串的行”中,这样,可以保证排版的时候不会把程 序和注释也一起排版。 二、强大的编辑功能: 1、可以删除半个中文字符,破除乱码。 2、进行快速全局替换。支持多文件操作。 3、可以对所选择行进行整行左移或者整行右移。 4、可以对选定行按设定行宽进行左对齐、居中、右对齐。 5、删除所有空行、删除开头几行、删除末尾几行。支持多文件操作。 6、Shift+Ctrl+数字可以定义书签,Ctrl+数字可以跳到该书签所在位置。 7、Ctrl+Z可以撤销操作,Shift+Ctrl+Z可以重复操作。次数可以自定义。 8、打开文本大小没有限制。 三、强大的转换功能: 1、GBBig5。加强了对GBK的兼容性,对于绝大多数常用字转换没问题。还可以 自行设定对冷僻字的转换,按词汇进行转换。同时可以设置读入文本或者粘贴文本时 自动把Big5码文本转换为GB码。支持多文件操作。 2、HTML->TEXT。可以设置读入文本或者粘贴文本时自动把HTML转换为TEXT。支 持多文件操作。 3、可以进行英文大小写、数字全半角转换。 四、贴心的剪贴文本功能: 设置常用的剪贴文本,编辑文件时省去很多重复劳动。本功能参考EditPlus2 制 作,并兼容EditPlus2 的剪贴文本文件,将这些文件拷入DreamEdit 目录下ClipText 子目录,重起DreamEdit 即可。您也可以自己参照这些文件创建自己的剪贴文本文件。 如果您觉得您的文件比较通用的话,别忘了寄给我一份,我可以整合到下一版的DreamEdit 中去哦!这个功能多谢网友smplayer的推荐。 五、剪贴板监视功能: 可以设置剪贴板监视,对于其他程序剪贴到剪贴板中的文本,可以选择粘贴到同 一个文档中还是粘贴到新文档中。 六、独特的导出功能: 对于排版后的文本可以按照用户给定的模板进行导出,用正文替换模板中的[TEXT]。 如果你有大量格式相同只有正文不同的文件需要处理,这个功能恰到好处。 七、支持插件(PlugIn): 用户可以开发自己的插件,对文本进行特殊处理。比如我的插件可以通过WWW 方式把文本发到BBS 上。可以进行Base64解码。可以进行英文拼写检查。甚至可以 根据空格或者制表符,对所选择的文本进行行列转换。如果你想自己控制打印的话, 那就开发一个专门用于打印的插件。 八、简单的Email功能: 可以批量的通过Email 向支持Email Post的BBS发文章。也可以把它当成一个简 单的信件群发工具。 九、整合到IE中的排版功能: 选择设置菜单的“注册DreamEdit 的IE插件”,DreamEdit 会在IE中自动添加排 版按钮和菜单。使用条件:DreamEdit(2.3.5以上版)已经启动,并且该页面必须有 一个名为content 的TextArea。DreamEdit 会对该文本输入框中的文本进行排版。如 果您想删除DreamEdit 而不留垃圾在注册表的话,在删除整个目录前,请选择设置菜 单中“删除DreamEdit 的IE插件的注册信息”。 十、其他功能: 1、字符统计:对中文、数字、空格、英文字符、英文标点、不可见字符分开统 计。 2、统一改变标题:对打开文件按照一定规则改变标题。 3、替换三个以上空格为回车:可用于对从网络上拷贝的文本进行分段处理。   4、文件拆分:按照文章的卷、章、回等等特定标记进行文件拆分。 5、文件合并:对于在窗口列表中所选择的文本依次合并到所选择的第一个文件, 同时关闭其他文件。 6、保存最近打开文件列表。 7、可以设定常用目录,在文件列表中用右键快速切换。 8、可以直接打开Zip文件,读取其中文本,但不能保存到Zip文件中。
使用Matlab下载googlefinance上面的option数据版本2012a-getoption.m 本帖最后由 1989111 于 2014-3-31 12:00 编辑 之前一直潜水,但是后来写了点程序回馈大家,献丑了!大家都知道下载yahoo 或者google的的股票数据API,但是option他们没有提供API。 所以,一般的entry level的数据拿daily的就好了. 所以今天鄙人讲讲怎么在google finance 拿option的数据. 一下方法,也是鄙人自创的,用的是matlab,code也很原始,但是用来抛砖引玉,也是极好的. 大家在matlab里面自创一个function,复制粘贴一下就好了,用法很简单, ticker用string的名字输入就好,例如[call,put]=getoption;,就可以得到当天option,call 和put的数据了. 下面是程序源代码: function [calls,puts]=getoption QQ截图20140330224814.png 请注意源代码里面没有这一句。因为我木有权限发url! sourcefile=urlread;目的有三:1. 我不读取网页数据,以上的修改过的link是以下下载链接, output是JSON 文件,属于google API的范畴. 显得高端大气上档次一些. 用正则表达式读网页拖慢网络速度,于是改用,这个人家网站自己提供的下载链接,或者用code:  A=urlwrite; B=importdata; 然后对B做后面的正则表达式处理,这样可以减少对网站的资源占用.2. 读取网页不可靠,网页上很多冗余信息,对扒数据没啥用处, JSON由于有API提供的接口,写作方式比较固定,几乎没有冗余信息,读取工作顺利,出错概率小.3. JSON 文件在java里面可以直接读取,如果用matlab在java里面写得话会很方便,但是哥还是坚持用低调而奢华的用正则表达式读取JSON文件, 大家可以用word打开JSON文件,看看里面的格式,写得挺整齐的.                                 下面的code照旧,写得不好不要见怪,多谢各种给我的代码提供意见的热心码农,另外在一位热心网友的留言下我找到了如何下载全部option的办法, 感谢那位网友提供的帮助,他给我的指点实质上告诉了我:其实google整个网页的数据呈现就是以JSON文件的读取做基础的! 这也是我作此修改的最大原因,以期达到更大可靠性.但是人家是做有偿服务的,所以我不能贴出来抢别人生意,请大家见谅 callstart=regexpi; [locations,datefile]= regexp; strike= regexp; bid= regexp; ask= regexp; volume=regexp; price=regexp; OpenInterest=regexp; Expiration=regexp; for i=1:length     strike{i}= regexp;     bid{i}= regexp;     ask{i}= regexp;     volume{i}= regexp;     price{i}= regexp;     OpenInterest{i}= regexp;     Expiration{i}= regexp\w.*', 'match'); end index1=find ; index2=find ; A={price{index1};strike{index1};bid{index1};ask{index1};volume{index1};OpenInterest{index1};Expiration{index1}}; B={price{index2};strike{index2};bid{index2};ask{index2};volume{index2};OpenInterest{index2};Expiration{index2}}; A=A'; B=B'; for i=1:length     calldata.price{i}= str2double;     calldata.strike{i}=str2double;     calldata.bid{i}=str2double;     calldata.ask{i}=str2double;     calldata.Volume{i}=str2double;     calldata.OpenInterest{i}=str2double;     calldata.Expiration{i}= cell2mat; end for i=1:length putdata.price{i}=str2double; putdata.strike{i}=str2double; putdata.bid{i}=str2double; putdata.ask{i}=str2double; putdata.Volume{i}=str2double; putdata.OpenInterest{i}=str2double; putdata.Expiration{i}= cell2mat; end   calls=dataset({calldata.strike','Strike'},{calldata.price','Price'},{calldata.bid','Bid'},{calldata.ask','ask'},...       {calldata.Volume','Volume'},{calldata.OpenInterest','Open Interest'},{calldata.Expiration','Expiration'});   puts=dataset({putdata.strike','Strike'},{putdata.price','Price'},{putdata.bid','Bid'},{putdata.ask','ask'},...       {putdata.Volume','Volume'},{putdata.OpenInterest','Open Interest'},{putdata.Expiration','Expiration'}); end 下面鄙人就来讲解一下里面的代码是干啥的. 第一行当然是输入一个ticker,输入的形式必须是string的,用matlab的话说就是'XXXX', XXXX代表ticker; 第二行,是吧一个网址和ticker串起来,因为google finance上的网址都有规律,所以如果你要搜索google的option今天的报价, 有图为证:                                 所以在执行当中,已经有了一个string 变量url,它指向goog finance网址: 然后我们看看是不是:                                 仔细一看,真的是, 然后第二句就是读取这个网页的源文件, 简单说来就是我们打开了这个网页,然后read source file就会出来各种字母的那个页面 然后再看看后面的code callstart=regexpi; [locations,datefile]= regexp; 这个东西是叫做matlab正则表达式的应用,想系统学的同学可以上网搜,比我讲的要好, 我只是要用的时候拿出来看, 上图:                                 大家看到strike的规律没有? 都是strike 后面跟着一个价格, 所以,下面这个code就是讲得是匹配含有{xxx strike.xxx}的最小长度的字符.*? 的意思就是尽可能短的字符 [locations,datefile]= regexp; 然后大家可以打开datefile去看看 找到的匹配字符 大概是这个模样: {cid:"216439834517106",name:"",s:"GOOG130830P00710000",e:"OPRA",p:"-",c:"-",b:"-",a:"0.45",oi:"0",vol:"-",strike:"710.00",expiry:"Aug 30, 2013"} 这个算是一个元素,datefile里面有好多个这样的元素.... 再看下面的语句,明白了上面的,下面的也就不难理解了 strike= regexp; bid= regexp; ask= regexp; volume=regexp; price=regexp; OpenInterest=regexp; Expiration=regexp; 这几个就是在{cid:"216439834517106",name:"",s:"GOOG130830P00710000",e:"OPRA",p:"-",c:"-",b:"-",a:"0.45",oi:"0",vol:"-",strike:"710.00",expiry:"Aug 30, 2013"}里面找含有strike:".*?",b:".*?"等等的字符,于是乎我们又进了一步,把响应的字符都找出来了. 得到了price大概像这个东西 ',p:"-"'        ',p:"-"'        ',p:"-"'        ',p:"-"'        ',p:"-"'        ',p:"-"'        ',p:"-"'        ',p:"0.40"'        ',p:"0.45"'        ',p:"0.10"'        ',p:"0.10"' 其他的例如expiration啥的大概都差不多. 到这里为止,我们要的数据都已经扒下来了,但是这样的数据存在的形式是在让人蛋疼,于是乎我们做一下的工作 for i=1:length     strike{i}= regexp;     bid{i}= regexp;     ask{i}= regexp;     volume{i}= regexp;     price{i}= regexp;     OpenInterest{i}= regexp;     Expiration{i}= regexp\w.*', 'match'); end 这个讲的是既然我们找到了那些数据,数据总是跟着p:"0.10",这样子多难看啊, 拿price的例子来说,price{i}= regexp; 想要做的意思就是,遍历price这个向量里面每一个元素, 只留下xxx.xxx的数据,[0-9]{1,}表示至少出现一次,[0-9]{1,}.[0-9]{1,}则表示把一个含有小数的数字读取出来, 于是p:"0.10"就会变成0.10啦,同理跟其他的也是一样的. 然后就是 index1=find ; index2=find ; A={price{index1};strike{index1};bid{index1};ask{index1};volume{index1};OpenInterest{index1};Expiration{index1}}; B={price{index2};strike{index2};bid{index2};ask{index2};volume{index2};OpenInterest{index2};Expiration{index2}}; 当时我留了call start这个变量没讲,是因为这个相当于一个路标,表示着call 和put的分界线, find这个函数只不过是找到大于call start和小于它的相对位置而已. index1 和index2都含有了put 和 call的相对位置. 后面的没啥好说了,就是data转换输出的东西,A是call,B是put的数据 这里没啥好说的,就是为了输出方便,好看, 需要说明的是这里用了matlab的dataset和cell函数,因此,获得的数据不能够直接拿来做向量运算,如果要用到,要需要做一下转换,dataset2cell,然后cell2double的转换,这样的话就可以变成一般的double型的变量来运算啦. 有图为证:                                 然后再说一下这个函数的缺点,第一,变成dataset和cell要转换,这是一个缺点.第二, 不能拿历史数据,这个我知道啊,option 的历史数据都是要钱的,屌丝只能能够每天跑这个程序一次,自己建立一个自己需要的option pricec的数据库了. 需要指出的是google finance有15min的延迟,因此,intraday的数据只要你跑程序多,是可以拿到的.   这是程序代码[/align][align=left][align=left]function [calls,puts]=getoption[/align] [align=left]sourcefile=urlread;[/align] [align=left]callstart=regexpi;[/align][align=left][locations,datefile]= regexp;[/align][align=left]strike= regexp;[/align][align=left]bid= regexp;[/align][align=left]ask= regexp;[/align][align=left]volume=regexp;[/align] [align=left]price=regexp;[/align][align=left]OpenInterest=regexp;[/align][align=left]Expiration=regexp;[/align][align=left]for i=1:length[/align][align=left]    strike{i}= regexp;[/align][align=left]    bid{i}= regexp;[/align][align=left]    ask{i}= regexp;[/align][align=left]    volume{i}= regexp;[/align][align=left]    price{i}= regexp;[/align][align=left]    OpenInterest{i}= regexp;[/align][align=left]    Expiration{i}= regexp;[/align][align=left]end[/align] [align=left]index1=find ;[/align][align=left]index2=find ;[/align][align=left]A={price{index1};strike{index1};bid{index1};ask{index1};volume{index1};OpenInterest{index1};Expiration{index1}};[/align][align=left]B={price{index2};strike{index2};bid{index2};ask{index2};volume{index2};OpenInterest{index2};Expiration{index2}};[/align][align=left]A=A';[/align][align=left]B=B';[/align] [align=left]for i=1:length[/align] [align=left]    calldata.price{i}= str2double;[/align][align=left]    calldata.strike{i}=str2double;[/align][align=left]    calldata.bid{i}=str2double;[/align][align=left]    calldata.ask{i}=str2double;[/align][align=left]    calldata.Volume{i}=str2double;[/align][align=left]    calldata.OpenInterest{i}=str2double;[/align][align=left]    calldata.Expiration{i}= cell2mat;[/align][align=left]end[/align][align=left]for i=1:length[/align][align=left]putdata.price{i}=str2double;[/align][align=left]putdata.strike{i}=str2double;[/align][align=left]putdata.bid{i}=str2double;[/align][align=left]putdata.ask{i}=str2double;[/align][align=left]putdata.Volume{i}=str2double;[/align][align=left]putdata.OpenInterest{i}=str2double;[/align][align=left]putdata.Expiration{i}= cell2mat;[/align][align=left]end[/align] [align=left]  calls=dataset;[/align][align=left]  puts=dataset;[/align][align=left]end[/align] [/align] [align=left]复制代码 复制代码

1,659

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧