[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理怎样以指定字符分割提取文本的第一段?

我有一个text.txt文件 内容如下:
  人之初,性本善,性相近,习相远。苟不教,性乃迁,教之道,贵以专。
  昔孟母,择邻处,子不学,断机杼。窦燕山,有义方,教五子,名俱扬。
  养不教,父之过,教不严,师之惰。子不学,非所宜,幼不学,老何为?
  玉不琢,不成器,人不学,不知义。为人子,方少时,亲师友,习礼仪。
  香九龄,能温席,孝于亲,所当执。融四岁,能让梨,弟于长,宜先知。
  首孝悌,次见闻,知某数,识某文。一而十,十而百,百而千,千而万。
  三才者,天地人,三光者,日月星。三纲者,君臣义,父子亲,夫妇顺。
  曰春夏,曰秋冬,此四时,运不穷。曰南北,曰西东,此四方,应乎中。
  曰水火,木金土,此五行,本乎数。十干者,甲至癸。十二支,子至亥。
  曰黄道,日所躔。曰赤道,当中权。赤道下,温暖极。我中华,在东北。
  曰江河,曰淮济。此四渎,水之纪。曰岱华,嵩恒衡。此五岳,山之名。
  曰士农,曰工商。此四民,国之良。曰仁义,礼智信,此五常,不容紊。
  地所生,有草木。此植物,遍水陆。有虫鱼,有鸟兽。此动物,能飞走。
  稻粱菽,麦黍稷。此六谷,人所食。马牛羊,鸡犬豕。此六畜,人所饲。
  曰喜怒,曰哀惧,爱恶欲,七情具。青赤黄,及白黑,此五色,目所识。
  酸苦甘,及辛咸,此五味,口所含。膻焦香,及腥朽,此五臭,鼻所嗅。
  匏土革,木石金,丝与竹,乃八音。曰平上,曰去入,此四声,宜调协。
  高曾祖,父而身,身而子,子而孙。自子孙,至玄曾,乃九族,人之伦。
  父子恩,夫妇从,兄则友,弟则恭;长幼序,友与朋,君则敬,臣则忠。
  此十义,人所同,当顺叙,勿违背。斩齐衰,大小幼。至缌麻,五服终。
  礼乐射,御书数,古六艺,今不具。唯书学,人共遵,既识字,讲说文。
  有古文,大小篆,隶草继,不可乱?
   若广学,惧其繁,但略说,能知源。凡训蒙,须讲究,详训诂,明句读。
  为学者,必有初,小学终,至四书。论语者,二十篇,群弟子,记善言。
  孟子者,七篇止,讲道德,说仁义。作中庸,子思笔,中不偏,庸不易。
  作大学,乃曾子,自修齐,至平治。孝经通,四书熟,如六经,始可读。
  诗书易,礼春秋,号六经,当讲究。有连山,有归藏,有周易,三易详。
  有典谟,有训诰,有誓命,书之奥。我周公,作周礼,著六官,存治体。
  大小戴,注礼记,述圣言,礼乐备。曰国风,曰雅颂,号四诗,当讽咏。
  诗既亡,春秋作,寓褒贬,别善恶。三传者,有公羊,有左氏,有谷梁。
  经既明,方读子,撮其要,记其事。五子者,有荀扬,文中子,及老庄。
  经子通,读诸史,考世系,知终始。自羲农,至黄帝,号三皇,居上世。
  唐有虞,号二帝,相揖逊,称盛世。夏有禹,商有汤,周文武,称三王。
  夏传子,家天下,四百载,迁夏社。汤伐夏,国号商,六百载,至纣亡。
  周武王,始诛纣,八百载,最长久。周辙东,王纲坠,逞干戈,尚游说。
  始春秋,终战国,五霸强,七雄出。蠃秦氏,始兼并,传二世,楚汉争。
  高祖兴,汉业建,至孝平,王莽篡。光武兴,为东汉,四百年,终于献。
  魏蜀吴,争汉鼎,号三国,迄两晋。宋齐继,梁陈承,为南朝,都金陵。
  北元魏,分东西,宇文周,与高齐。迨至隋,一土宇,不再传,失统绪。
  唐高祖,起义师,除隋乱,创国基。二十传,三百载,梁灭之,国乃改。
  梁唐晋,及汉周,称五代,皆有由。炎宋兴,受周禅。十八传,南北混。
  辽与金,皆称帝,元灭金,绝宋世。舆图广,超前代,九十载,国祚废。
  太祖兴,国大明,号洪武,都金陵。迨成祖,迁燕京,十六世,至崇祯。
  权阉肆,寇如林,李闯出,神器焚。清世祖,膺景命,靖四方,克大定。
  由康雍,历乾嘉。民安富,治绩夸。道咸间,变乱起。始英法,扰都鄙。
  同光后,宣统弱。传九帝,满清殁。革命兴,废帝制。立宪法,建民国。
  古今史,全在兹。载治乱,知兴衰。史虽繁,读有次。史记一,汉书二。
  后汉三,国志四。兼证经,参通鉴。读史者,考实录,通古今,若亲目。
  口而诵,心而惟,朝于斯,夕于斯。昔仲尼,师项橐,古圣贤,尚勤学。
  赵中令,读鲁论,彼既仕,学且勤。彼蒲编,削竹简,彼无书,且知勉。
  头悬梁,锥刺股,彼不教,自勤苦。如囊萤,如映雪,家虽贫,学不辍。
  如负薪,如挂角,身虽劳,犹苦卓。苏老泉,二十七,始发愤,读书籍。
  彼既老,犹悔迟,尔小生,宜早思。若梁灏,八十二,对大廷,魁多士。
  彼既成,众称异,尔小生,宜立志。莹八岁,能咏诗,泌七岁,能赋棋。
  彼颖悟,人称奇,尔幼学,当效之。蔡文姬,能辨琴,谢道韫,能咏吟。
  彼女子,且聪敏,尔男子,当自警。唐刘晏,方七岁,举神童,作正字。
  彼虽幼,身已仕,尔幼学,勉而致。有为者,亦若是?
  犬守夜,鸡司晨,苟不学,曷为人?蚕吐丝,蜂酿蜜,人不学,不如物。
  幼而学,壮而行,上致君,下泽民。扬名声,显父母,光于前,裕于后。
  人遗子,金满籯,我教子,惟一经。勤有功,戏无益,戒之哉,宜勉力?
我想以?为分隔,?都是英文状态下的小写,取第一段的内容(从人之初到不可乱),代码如下:
  1. @echo off
  2. for /f "delims=? tokens=1 " %%a in (text.txt) do echo %%a >>9.txt
  3. pause
复制代码
但是每次取出来的都是最后一句话,大家帮我看下,应该如何改!
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 ivor 于 2012-2-9 10:53 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (text.txt) do (
  3.         echo %%a >>9.txt
  4. set /a a+=1
  5. if !a! equ 22 exit
  6.         
  7. )
  8. pause
复制代码

TOP

结果还是不对,,,

TOP

回复 3# sbjatje


    指定提取22行内文字

TOP

高手,如果我不知道,有几行,应该如何写呢?

TOP

本帖最后由 apang 于 2012-2-9 16:40 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set n=0
  3. (for /f "delims=" %%a in (text.txt) do (
  4.         set aa=%%a&echo !aa!
  5.         if "!aa:~-1!"=="?" set/a n+=1
  6.         if "!n!"=="2" goto :eof
  7. ))>9.txt
复制代码
试试看
不知道1楼文档中的?是英文字符还是中文字符。

TOP

楼上的运行可以,但是出来的是前面二个?问的内容,
我只想取从人之初到不可乱
麻烦高手指点下,,,

TOP

本帖最后由 apang 于 2012-2-9 16:51 编辑

看看你的第一个?是不是英文字符,如果不是,代码 if "!n!"=="2" 中的2改成1
即:老何为?

TOP

  1. @echo off
  2. (for /f "delims=" %%i in (test.txt) do (
  3.     echo %%i
  4.     echo %%i|findstr "?">nul&&goto :out
  5. ))>9.txt      
  6. :out
复制代码

TOP

复制下来,运行,一闪而过,,,

TOP

我想以为分隔,取第一段的内容(从人之初到不可乱),代码如下:
@echo off
for /f "delims=? tokens=1 " %%a in (text.txt) do echo %%a >>9.txt
pause

楼主你自己看看给出的两个“?”是一样吗,叫人咋写代码。。。

TOP

本帖最后由 sbjatje 于 2012-2-10 20:26 编辑

?号都是英文状态小的小写

TOP

回复 10# sbjatje
虽然一闪而过,但9.txt已经创建了。你可以打开9.txt看看结果。

TOP

本帖最后由 sbjatje 于 2012-2-11 16:02 编辑

apang  六楼的代码ok了,看来还是我大小写,全角和半角没搞清楚,,,

只要把"!n!"="2"   中的2改为一就行了,,

那如果想这里的文本,以三个?分隔,把每一段,分别放到001.txt 002.txt 003.txt中呢?

6楼的代码,有二句话没看懂  001:  "!aa:~-1!"   
              002:    goto :eof  (这里的goto有什么用,如果说转到:eof下执行,但是没有ecf这标记呀 ),请apang解释一下,谢谢!

TOP

本帖最后由 apang 于 2012-2-11 17:53 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set name=1&set n=0
  3. for /f "delims=" %%a in (text.txt) do (
  4.         set aa=%%a&echo !aa!>>00!name!.txt
  5.         if "!aa:~-1!"=="?" set/a n+=1
  6.         if "!n!"=="!name!" set/a name+=1
  7. )
复制代码
试试看
!aa:~-1!是取最后一个字符
goto :eof是跳到文件结尾,即退出。
现在文档中有5个问号,其中2个是中文大写的,你就保持原状,不要改了。
1

评分人数

TOP

返回列表