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

【练习-069】批处理按要求提取字符串

本帖最后由 batman 于 2012-3-27 11:41 编辑

出题目的:
  加强大家对批处理实际应用的认识(大家完成后会认识到批解决这个问题居然是这么简单!)
加分原则:
  满分10分,其中思路5分,代码简洁3分,书写规范2分
解题要求:
  限批处理新手做答,其他可跟帖讨论
题目如下:
  本人在工作中经常要对数据进行区域划分,一般本人是用的以下excel函数公式
  =IF(TRIM(MID(SUBSTITUTE(A1,"-->",REPT(" ",LEN(A1))),3*LEN(A1),LEN(A1)))="株洲县区域营销中心",TRIM(MID(SUBSTITUTE(A1,"-->",REPT(" ",LEN(A1))),4*LEN(A1),LEN(A1))),TRIM(MID(SUBSTITUTE(A1,"-->",REPT(" ",LEN(A1))),5*LEN(A1),LEN(A1))))(是不是非常复杂)
  现在想要大家用批处理来完成这一步骤,a.txt中全是形如湖南电信省公司-->株洲本地网-->株州县分公司-->株洲县农村营销中心-->株洲县雷打石支局-->株洲县雷打石伞铺信息服务站-->家庭客户组-->雷打石东林村的字符串,如以-->做为分隔,如果第四列中为株洲县区域营销中心字符串,则取第五列字符串,否则取第六列数据,并输出数据到屏幕。
***共同提高***

回复 3# 冷玉公子


    tokens=1-30有必要?还有和二楼犯同样的错误delims=-->应是delims=->
***共同提高***

TOP

回复 6# qzwqzw


    我的原始数据是有n列的,然后根据这个字段来划分区域,所以老兄说的这种方法是不行的。。。
***共同提高***

TOP

本帖最后由 batman 于 2012-3-28 22:30 编辑

回复 8# 冷玉公子
另一种方法,不过有点自己绕的感觉,但终究是一种思路(适用于tokens超过32列极限的情况):
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do (
  3.   set "str=%%a"&set "str=!str:-->= !"&set /a n=0
  4.   for %%a in (!str!) do (
  5.     if defined flag echo %%a&set "flag="&set /a n+=1
  6.     set /a n+=1
  7.     if !n! equ 4 if "%%a" equ "株洲县区域营销中心" set "flag=a"
  8.     if !n! equ 5 set "flag=a"
  9.   )
  10. )
  11. pause>nul
复制代码
***共同提高***

TOP

回复 11# apang
兄弟这样处理的话要是目标列超过9列就没有办法了,因为call只能传递0-9总共10个参数(其中%0是指脚本本身)。。。
***共同提高***

TOP

返回列表