Board logo

标题: [文本处理] [已解决]批处理怎样提取每行第几个字符左边或右边的内容并输出? [打印本页]

作者: wh1234567    时间: 2011-4-25 14:54     标题: [已解决]批处理怎样提取每行第几个字符左边或右边的内容并输出?

本帖最后由 pcl_test 于 2017-3-28 10:06 编辑

要求2种效果的代码:即例如每行第三个“,”字符或“男性”这个字符左边的内容,第二种效果是提取字符的右边的内容,并输出到另外一个文本里。
作者: mchudie    时间: 2011-4-25 15:07

给你个VBS简单的思路  判断第3个字符是否是“,” 不是就从第6个字符开始截取
作者: batman    时间: 2011-4-25 15:22

具体问题要具体分析,楼主可不可以给出示例文本?
作者: wh1234567    时间: 2011-4-25 15:43

可能是我没有表达清楚,我的意思是说:批处理提取txt文本内容的每行含有例如“,”或“男性”这个字符左边的内容,第二种效果是提取每行含有特定的字符的第几个这个字符的右边的内容,并输出到另外一个文本里。
每行含有这个特定的字符不只是一个,所以要求是这个字符的第几个开始提取该字符的左边或右边的内容,
要2个批处理:一个是提取字符左边的内容,另外一个是提取字符右边的内容

例如文本内容:
2.32.43434,555,1v飞
不方便.23323是不是,嗯23,4343asuf.nn65
提取结果:

例如提取每行含有第1个,字符左边的内容为:
2.32.43434
不方便.23323是不是

例如提取每行含有第2个,字符右边的内容为:
1v飞
4343asuf.nn65

要2个批处理,分别是提取字符左边内容的和右边内容的代码
作者: batman    时间: 2011-4-25 16:04

本帖最后由 batman 于 2011-4-25 16:06 编辑
  1. @echo off
  2. for /f "tokens=1,2* delims=," %%a in (a.txt) do (
  3.      echo 要提取的左边内容:%%a
  4.      echo 要提取的右边内容:%%c
  5. )
  6. pause>nul
复制代码

作者: Batcher    时间: 2011-4-25 18:10

4# wh1234567


请把问题描述更新到顶楼
作者: wh1234567    时间: 2011-4-25 19:16

5# batman


不错,能不能解释一下代码,以便参考修改,另外要求输出到另外文本里。
作者: Batcher    时间: 2011-4-25 19:49

  1. sed "s/,.*//" a.txt | more >left.txt
复制代码
  1. sed "s/[^,]*,//" a.txt | more >right.txt
复制代码

作者: wh1234567    时间: 2011-4-25 20:10

8# Batcher
没有反应,是不是代码不全?
作者: Batcher    时间: 2011-4-25 20:21

9# wh1234567


是不是你没有sed?
http://bbs.bathome.net/thread-3981-1-1.html
作者: mxxcgzxxx    时间: 2011-4-25 22:11

就是把“,”做分隔符。
但他讲到的第二种可能就无法用分隔符的方法做了“男性”是两个字要怎么办?
是不是把“男”做分隔符,但如果后面跟的不是“性”字就麻烦了!
作者: CrLf    时间: 2011-4-25 22:34

本帖最后由 zm900612 于 2011-4-25 23:02 编辑

以字符串为分割符也没那么难,有两个方案,一个是替换字符串为单个字符进行截取,另一个方案是变量替换进行正反选,尚未见过先例。早就想用了,只是没碰上合适的环境
只提取第一个作为分割符的字符串的内容:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do (
  3. set str=%%a
  4. for /f "delims=" %%b in ("!str:*男性=男性!") do echo 左边的内容:!str:%%~b=!
  5. echo 右边的内容:!str:*男性=!
  6. )
  7. pause
复制代码

作者: CrLf    时间: 2011-4-25 22:37

但是用变量替换进行正反选的方法有个缺陷是分隔符后的文本中不能含有*或者=,否则会出错
作者: 0428_hai    时间: 2011-4-25 22:48

12#给的代码中
第5行代码的男性前缺了个*吧?
作者: CrLf    时间: 2011-4-25 22:58

本帖最后由 zm900612 于 2011-4-25 23:04 编辑

笔误,多写指出,已修正。
作者: 0428_hai    时间: 2011-4-25 23:16

#12代码中
第4行最后的%%~b是否有必要呢?
是不是%%b就可以解决问题呢?





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2