找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 71442|回复: 15

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

[复制链接]
发表于 2011-4-25 14:54:20 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2017-3-28 10:06 编辑

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

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-4-25 15:07:27 | 显示全部楼层
给你个VBS简单的思路  判断第3个字符是否是“,” 不是就从第6个字符开始截取
发表于 2011-4-25 15:22:50 | 显示全部楼层
具体问题要具体分析,楼主可不可以给出示例文本?
 楼主| 发表于 2011-4-25 15:43:42 | 显示全部楼层
可能是我没有表达清楚,我的意思是说:批处理提取txt文本内容的每行含有例如“,”或“男性”这个字符左边的内容,第二种效果是提取每行含有特定的字符的第几个这个字符的右边的内容,并输出到另外一个文本里。
每行含有这个特定的字符不只是一个,所以要求是这个字符的第几个开始提取该字符的左边或右边的内容,
要2个批处理:一个是提取字符左边的内容,另外一个是提取字符右边的内容

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

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

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

要2个批处理,分别是提取字符左边内容的和右边内容的代码
发表于 2011-4-25 16:04:23 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2011-4-25 18:10:18 | 显示全部楼层
4# wh1234567


请把问题描述更新到顶楼
 楼主| 发表于 2011-4-25 19:16:33 | 显示全部楼层
5# batman


不错,能不能解释一下代码,以便参考修改,另外要求输出到另外文本里。
发表于 2011-4-25 19:49:34 | 显示全部楼层
  1. sed "s/,.*//" a.txt | more >left.txt
复制代码
  1. sed "s/[^,]*,//" a.txt | more >right.txt
复制代码
 楼主| 发表于 2011-4-25 20:10:10 | 显示全部楼层
8# Batcher
没有反应,是不是代码不全?
发表于 2011-4-25 20:21:28 | 显示全部楼层
9# wh1234567


是不是你没有sed?
http://bbs.bathome.net/thread-3981-1-1.html
发表于 2011-4-25 22:11:38 | 显示全部楼层
就是把“,”做分隔符。
但他讲到的第二种可能就无法用分隔符的方法做了“男性”是两个字要怎么办?
是不是把“男”做分隔符,但如果后面跟的不是“性”字就麻烦了!
发表于 2011-4-25 22:34:56 | 显示全部楼层
本帖最后由 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
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2011-4-25 22:37:46 | 显示全部楼层
但是用变量替换进行正反选的方法有个缺陷是分隔符后的文本中不能含有*或者=,否则会出错
发表于 2011-4-25 22:48:42 | 显示全部楼层
12#给的代码中
第5行代码的男性前缺了个*吧?
发表于 2011-4-25 22:58:29 | 显示全部楼层
本帖最后由 zm900612 于 2011-4-25 23:04 编辑

笔误,多写指出,已修正。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 12:48 , Processed in 0.023976 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表