标题: [文本处理] [已解决]bat把字符替换为换行时为何丢失内容 [打印本页]
作者: lyc309 时间: 2011-12-9 15:48 标题: [已解决]bat把字符替换为换行时为何丢失内容
本帖最后由 lyc309 于 2011-12-10 12:01 编辑
$a 2011年11月30日晚,中国人民银行决定,自12月5日起下调金融机构存款准备金率0.5个百分点,这是央行自2008年12月25日以来首次下调存款准备金率,调整时间点略早于我们之前的预期。在此之前,央行已连续12次上调存款准备金率,大型金融机构存款准备金率达到21.5%的历史高位。那么,本次下调存款准备金的原因何在?对未来的钢材市场有何影响?本文将结合当前宏观经济形势对此进行简要分析。$a$a一、本次下调存款准备金的原因分析$a$a1.欧洲主权债务危机加剧,新兴经济体资本流出压力加大。近期欧洲主权债务风险进一步加剧,意大利和西班牙国债收益率相继突破7%,导致全球资金出于避险需要回流美元和美元资产的趋势进一步加强,这对于各国家尤其是新兴经济体的市场将会产生重要影响。自9月份以来,为应对欧美经济下滑带来的影响,主要新兴经济体开始了新一轮的宽松货币政策。本月初,澳大利亚进行了金融危机以来的首次降息;此外,巴西、印尼、新加坡和泰国近期不约而同的采取降息措施。
条件:想把$a替换为换行,在翻找以前的帖子的时候找到hanyeguxing大的:- @echo off
- (for /F "delims=" %%a in (1.txt) do ( set a=%%a
- setlocal enabledelayedexpansion
- set "a=!a:<a=&echo.!"&call:a "!a!"
- Endlocal))>2.txt
- exit
- :a
- echo.%~1
复制代码
把之改为:- @echo off
- (for /F "delims=" %%a in (1.txt) do ( set a=%%a
- setlocal enabledelayedexpansion
- set "a=!a:$a=&echo.!"&call:a "!a!"
- Endlocal))>2.txt
- exit
- :a
- echo.%~1
复制代码
但是得出来的却是删减版的,中间一小段文字给删除了
2011年11月30日晚,中国人民银行决定,自12月5日起下调金融机构存款准备金率0.5个百分点,这是央行自2008年12月25日以来首次下调存款准备金率,调整时间点略早于我们之前的预期。在此之前,央行已连续12次上调存款准备金率,大型金融机构存款准备金率达到21.5,导致全球资金出于避险需要回流美元和美元资产的趋势进一步加强,这对于各国家尤其是新兴经济体的市场将会产生重要影响。自9月份以来,为应对欧美经济下滑带来的影响,主要新兴经济体开始了新一轮的宽松货币政策。本月初,澳大利亚进行了金融危机以来的首次降息;此外,巴西、印尼、新加坡和泰国近期不约而同的采取降息措施。
超级新手,不知道怎么回事,还有很奇怪的把文中的百分号给删了。其他文本处理倒没什么问题。
说下要处理文字的环境,$a的符号可以替换其他的符号,需要的是把$a替换为换行,形式如:
2011年11月30日晚,中国人民银行决定,自12月5日起下调金融机构存款准备金率0.5个百分点,这是央行自2008年12月25日以来首次下调存款准备金率,调整时间点略早于我们之前的预期。在此之前,央行已连续12次上调存款准备金率,大型金融机构存款准备金率达到21.5%的历史高位。那么,本次下调存款准备金的原因何在?对未来的钢材市场有何影响?本文将结合当前宏观经济形势对此进行简要分析。
一、本次下调存款准备金的原因分析
1.欧洲主权债务危机加剧,新兴经济体资本流出压力加大。近期欧洲主权债务风险进一步加剧,意大利和西班牙国债收益率相继突破7%,导致全球资金出于避险需要回流美元和美元资产的趋势进一步加强,这对于各国家尤其是新兴经济体的市场将会产生重要影响。自9月份以来,为应对欧美经济下滑带来的影响,主要新兴经济体开始了新一轮的宽松货币政策。本月初,澳大利亚进行了金融危机以来的首次降息;此外,巴西、印尼、新加坡和泰国近期不约而同的采取降息措施。
_____________________________________________________分割线_______________________________
论坛的问答对于新手来说是个大障碍呀,都把代码复制到bat里面运行了,得出来的结果都不对。- set a=home.cmd&call echo %a:*o=%
复制代码
答案是什么,运行后得到的*o=居然不对(还在看for命令,见笑了)
在这里感谢C版,运行后暂时没什么问题,不知道用的时候有什么缺点呢,awk大大的就不测试了,与第三方软件相比,bat真坑爹呀,不过bat比较易普及!虽然用不着,但是依然感谢awk大大。
最后,能解释下为什么会出现内容会丢失吗?
作者: CrLf 时间: 2011-12-9 15:56
本帖最后由 CrLf 于 2011-12-10 15:32 编辑
- @echo off&setlocal enabledelayedexpansion
- set hh=^
-
-
- (for %%A in ("!hh!") do (
- endlocal
- for /f "delims=" %%a in (1.txt) do (
- set str=%%a
- setlocal enabledelayedexpansion
- for /f "delims=" %%b in ("!str:$a=%%~A!") do (
- if defined str endlocal
- echo;%%b
- )
- if defined str endlocal
- )
- ))>2.txt
复制代码
作者: awk 时间: 2011-12-9 16:00
- sed "s/$a/\n/g" a.txt >b.txt
复制代码
作者: Demon 时间: 2011-12-9 16:19
- @echo off&mshta "javascript:(new ActiveXObject('scripting.filesystemobject')).OpenTextFile('2.txt',2,true).Write((new ActiveXObject('scripting.filesystemobject')).OpenTextFile('1.txt').ReadAll().replace(/\$a/gi,'\r\n'));window.close();"&pause
复制代码
作者: CrLf 时间: 2011-12-9 16:30
回复 3# awk
回复 4# Demon
发现论坛果然越来越百花齐放了哈哈,各种有办法...
作者: lyc309 时间: 2011-12-9 16:39
本帖最后由 lyc309 于 2011-12-9 16:42 编辑
Demon 发表于 2011-12-9 16:19
awk 发表于 2011-12-9 16:00
CrLf 发表于 2011-12-9 15:56
回复一次,居然要百度一下。验证答案真不好搞呀,放入.bat运行居然结果还是错的。
set a=home.cmd&call echo %a:*o=%答案居然不是"*o=".
c版的运行没问题,awk大大的是sed吧,这个不容易普及。不过方法好简单呀。Demon大大的好像只能处理同一个目录下的文件吧,放在其他路径会出错。
最后,能解释下为什么会出现内容会丢失吗?
最后谢谢大家帮助!
作者: lyc309 时间: 2011-12-9 16:43
第一个原来是cmd里面运行的结果,怪不得。
作者: asnahu 时间: 2011-12-9 20:02
js在文本处理的优势还是比较明显的
作者: awk 时间: 2011-12-9 21:06
回复 6# lyc309
你用,我用,大家用,慢慢就普及了。
作者: CrLf 时间: 2011-12-10 15:29
至于楼主问为何会丢失字符的问题,是因为 call 有二次扩展的特性,会将一对 % 之间的内容当作变量名解析,如果不存在该变量名则解释为空
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |