[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 14# CrLf
不管大家处于什么目的和情绪,在此都要感谢大家的关心和关注!!!拜谢!!!希望大家合家欢乐,幸福平和!
两个文件的Volume是不一样
变通的方法就是:
去掉源文件每一行最后一个分号后面的数字就可以了

TOP

本帖最后由 CrLf 于 2014-6-26 21:17 编辑

回复 16# 观心


如果格式有误,请自行修改 printf(\"%%s;%%s;%%f;%%f;%%f;%%f;%%.2f\n\",name,$1,$2,$3,$4,$5,$6) 这个地方,用法和 c 语言的 printf 是一样的,网上相关介绍很多
  1. @echo off
  2. gawk -F";" "match(FILENAME,\"(.*)(......)\\.\",a)&&/^[0-9]/{gsub(/\//,\"-\",$1);printf(\"%%s;%%s;%%s;%%s;%%s;%%s;%%s\n\",a[2] \".\" a[1],$1,$2,$3,$4,$5,$6)>a[2] \".tmp\"}" *.txt >nul
  3. for %%a in (*.tmp) do (
  4.         echo $FORMAT Ticker, Date_YMD, Open, High, Low, Close, Volume
  5.         type "%%a"
  6.         echo $SKIPLINES 1
  7.         echo $SEPARATOR ,
  8.         echo $DEBUG 1
  9.         echo $BREAKONERR 1
  10.         echo $AUTOADD 1
  11. )>%%~na.txt
  12. del *.tmp
复制代码

TOP

回复 11# terse


    将前辈的代码存为aa.bat 执行后出现如下错误

TOP

本帖最后由 观心 于 2014-6-26 02:29 编辑

回复 17# CrLf

可能我表达不清楚。就是将源文件SH600099.txt 改成600099.txt(类似的还有SZ000099.txt改成000099.txt)
里面的数值相似即可,主要是要600099.txt里面的格式,600099.txt中Volume栏可以取SH600099.txt中最后两个分号中间的数值。
前辈的代码运行后每个文件内容都是
$FORMAT Ticker, Date_YMD, Open, High, Low, Close, Volume
$SKIPLINES 1
$SEPARATOR ,
$DEBUG 1
$BREAKONERR 1
$AUTOADD 1

里面缺少了每日的价格和成交量,需要这个样子的
$FORMAT Ticker, Date_YMD, Open, High, Low, Close, Volume
600099.SS,2003-08-01,5.86,5.94,5.85,5.91,757319
600099.SS,2003-08-04,5.95,6.14,5.91,6.03,1491738
600099.SS,2003-08-05,6.03,6.12,5.93,5.98,1783220
600099.SS,2003-08-06,5.94,6.06,5.93,5.94,608200
600099.SS,2003-08-07,5.94,6.01,5.92,5.93,490916
600099.SS,2003-08-08,5.95,5.99,5.79,5.83,893227
600099.SS,2003-08-11,5.8,5.85,5.8,5.8,215771
600099.SS,2003-08-12,5.8,5.86,5.8,5.85,298740
600099.SS,2003-08-13,5.85,5.88,5.79,5.82,177700
600099.SS,2003-08-14,5.87,5.92,5.79,5.79,114259
600099.SS,2003-08-15,5.88,5.88,5.78,5.85,546519
600099.SS,2003-08-18,5.79,5.8,5.79,5.79,45000
600099.SS,2003-08-19,5.85,5.85,5.79,5.8,101390
600099.SS,2003-08-20,5.8,5.84,5.75,5.8,69170
600099.SS,2003-08-21,5.85,5.85,5.75,5.8,53620
600099.SS,2003-08-22,5.8,5.85,5.75,5.8,76800
600099.SS,2003-08-25,5.8,5.82,5.74,5.77,91848
600099.SS,2003-08-26,5.8,5.8,5.74,5.77,108367
600099.SS,2003-08-27,5.78,5.78,5.73,5.74,58160
600099.SS,2003-08-28,5.71,5.87,5.68,5.82,315739
600099.SS,2003-08-29,5.85,5.85,5.68,5.7,231281
$SKIPLINES 1
$SEPARATOR ,
$DEBUG 1
$BREAKONERR 1
$AUTOADD 1

  600099.txt中Volume栏可以取SH600099.txt中最后两个分号中间的数值,如下
2003/08/01;5.86;5.94;5.84;5.91;757319;6021637.000
2003/08/04;5.95;6.14;5.91;6.03;1491738;12023611.000
2003/08/05;6.03;6.12;5.93;5.98;1783220;14456444.000
2003/08/06;5.93;6.06;5.93;5.93;608200;4914825.000
2003/08/07;5.94;6.01;5.92;5.93;490916;3944958.000
2003/08/08;5.95;5.99;5.78;5.83;893227;7121715.000
2003/08/11;5.80;5.84;5.79;5.80;215771;1688739.000
2003/08/12;5.79;5.86;5.79;5.85;298740;2343791.000
2003/08/13;5.84;5.87;5.78;5.81;177700;1396385.000
2003/08/14;5.86;5.92;5.78;5.78;114259;895077.000
2003/08/15;5.87;5.87;5.77;5.84;546519;4263697.000
2003/08/18;5.78;5.80;5.78;5.78;45000;351128.000
2003/08/19;5.84;5.84;5.78;5.79;101390;792405.000
2003/08/20;5.79;5.83;5.74;5.80;69170;539040.000
2003/08/21;5.84;5.84;5.74;5.79;53620;417572.000
2003/08/22;5.79;5.84;5.74;5.79;76800;599503.000
2003/08/25;5.80;5.82;5.74;5.77;91848;715345.000
2003/08/26;5.79;5.79;5.73;5.77;108367;841339.000
2003/08/27;5.77;5.77;5.72;5.74;58160;450937.000
2003/08/28;5.71;5.86;5.67;5.81;315739;2458913.000
2003/08/29;5.84;5.84;5.67;5.69;231281;1794956.000
附上源文件地址http://pan.baidu.com/s/1ntG5HC9

TOP

回复 19# 观心


    笔误已修改,测试无误

TOP

回复 18# 观心
我win7 系统测试正常的哦
这个什么情况 文件多大

TOP

回复 18# 观心
脚本中处理路径自己更改下 可放在桌面或其他目录运行
如和TXT文件同一目录 可不用传递参数
  1. @if(0)==(0) echo off
  2. rem 目录路径自己更改
  3. set ph=f:\export
  4. cscript //nologo //E:JScript "%~f0" "%ph%"
  5. pause&exit
  6. @end;
  7. var fso = new ActiveXObject("Scripting.FileSystemObject");
  8. var re = /^(.*);[^\;]+$/gm;
  9. var str = '$FORMAT Ticker, Date_YMD, Open, High, Low, Close, Volume' + '\r\n';
  10. var arr = ['$SKIPLINES 1' , '$SEPARATOR ,' , '$DEBUG 1' , '$BREAKONERR 1', '$AUTOADD 1'];
  11. var Folder=fso.GetFolder(WScript.Arguments.Count()?WScript.Arguments.Item(0):".");
  12. if (!fso.FolderExists(Folder+'/test/')) { fso.CreateFolder(Folder+'/test/')};
  13. for(var fc=new Enumerator(Folder.Files);!fc.atEnd();fc.moveNext()){
  14.       var file =fc.item();
  15.       var ext=/\.[^\.]+$/.exec(file);
  16.       if (ext == '.txt') {
  17.           var f = file.name.match(/\d+/);
  18.           var newfile = Folder + '/test/'+ f + ext;
  19.           var fs = file.OpenAsTextStream(1, -2);
  20.           var text = str + f2s(fs.ReadAll(),f) + arr.join('\r\n');
  21.           fs.Close();
  22.           var fs = fso.createtextfile(newfile,true);
  23.           fs.Write(text);
  24.           fs.Close();
  25.       }
  26. }
  27. function f2s(s,f) {
  28.     return s.replace(re ,
  29.            function(a,b) {
  30.               return f  + '.SS,' + b.replace(/;/g,',') + '\r\n';
  31.            });
  32. }
复制代码

TOP

回复 22# terse

源文件地址在19楼
大神,还是这个问题啊!

TOP

13楼:
言不成句,词不达意,还拽文言,胡说八道,还咒人劫难,诊人症状,  ---关你屁事?别写脚本了,回蒙古坐堂开方吧。
然心胸狭隘---我看装人大爷的不但心胸狭隘,还口脏乱充大辈,这真是论坛之福。你却视而不见,我诊你有眼无珠如何?或者心眼长偏了。
此山本有n山头,或曰n峰,峰岭神秀。又有台,登台献艺,你方唱罢我登场,天生瑜亮,舌计(呵呵)战群儒,有何不可?为何要按你狭隘头中所想,人人都龟缩在自己的山头中?
--------------------------------------
15楼:
本派全称为,【microsoft神教】。【powershell派】。【powershell交流宗】
本教创世之神为世界首富,比尔盖茨。本派创世人为微软架构师 Jeffrey Snover
详见  http://www.bathome.net/thread-25208-1-1.html
内有照片,他们都没死。
看完帖后,我希望你收回这句话 【你祖师爷埋哪里,我找人把它刨开,看它是否真的三头六臂】
玩bat的不尊盖茨等大神,才是论坛和众长老之辱!其他小事,跟此比,算个毛?
纵然你写过10年bat代码,也有比你写的更久的长老,或者隐士在论坛。他们对你说【小子你太狂了】你会觉得过分么?
-------------------------------
楼主:
有些要求你没说清楚,比如文件名后面那个ss,
你运行我的脚本如何?
1

评分人数

    • CrLf: 看小说看得人都傻了PB -2
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复 24# PowerShell


    没注意兄台练的竟然是葵花宝典,怪不得和正常人不太一样。
    为追求理想勇于牺牲的人点个赞

TOP

回复 20# CrLf

感谢前辈在这个帖子上花了这么多时间!可是还差最后一步,好像日期前的字母代码漏掉了,也怪我没有表达清楚,让前辈费心了,就是600099后面的SS如何加上去?19楼的源文件里面有两种文本,一种SH600099.txt,一种SZ000099.txt.

SH开头的文本SH600099.txt 变换后
$FORMAT Ticker, Date_YMD, Open, High, Low, Close, Volume
600099.SS,2003-08-01,5.86,5.94,5.85,5.91,757319
600099.SS,2003-08-04,5.95,6.14,5.91,6.03,1491738
600099.SS,2003-08-05,6.03,6.12,5.93,5.98,1783220
600099.SS,2003-08-06,5.94,6.06,5.93,5.94,608200
或者SH不变也可以
600099.SH,2003-08-01,5.86,5.94,5.85,5.91,757319
600099.SH,2003-08-04,5.95,6.14,5.91,6.03,1491738
600099.SH,2003-08-05,6.03,6.12,5.93,5.98,1783220
600099.SH,2003-08-06,5.94,6.06,5.93,5.94,608200

SZ开头的文本SZ000099.txt变换后
$FORMAT Ticker, Date_YMD, Open, High, Low, Close, Volume
000099.SZ,2003-08-01,5.86,5.94,5.85,5.91,757319
000099.SZ,2003-08-04,5.95,6.14,5.91,6.03,1491738
000099.SZ,2003-08-05,6.03,6.12,5.93,5.98,1783220
000099.SZ,2003-08-06,5.94,6.06,5.93,5.94,608200

TOP

回复 26# 观心


这个要求之前好像没提到吧
只要把
  1. printf(\"%%s;%%s;%%s;%%s;%%s;%%s;%%s\n\",name,$1,$2,$3,$4,$5,$6)
复制代码
改成
  1. printf(\"%%s;%%s;%%s;%%s;%%s;%%s;%%s\n\",name \".SS\",$1,$2,$3,$4,$5,$6)
复制代码
即可

TOP

回复 27# CrLf


    不是固定的SS   是文件名开头两位字符 。比如SH开头的文件名,就用SH;SZ开头的文件名就用SZ.
对把文件名的内容写入文本中比较感兴趣,要好好学习下。

TOP

回复 28# 观心


    你给的例子不是这个意思,不想回复了,为什么你给的例子老是有错

TOP

本帖最后由 观心 于 2014-6-26 22:40 编辑

回复 27# CrLf


恼扰了!不好意思!已经够我学习一阵子了!

TOP

返回列表