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

[文本处理] [分享]批处理从杂乱的文本内容中按照顺序整理姓名、电话、地址

[问题描述]

1.txt文本内容排列和格式都是不一样的,都是乱的,希望按照姓名、电话、地址的顺序整理到Excel里面。
  1. 刘一,13111111111,广东广州白云区白云机场
  2. 黄二
  3. 13222222222
  4. 四川成都武侯祠
  5. 13333333333李三 北京市怀柔区益田影人花园酒店
  6. 张四 厦门市江头新景天湖广场一期 13444444444
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

问题_2
无法处理这种情况,行首包含姓名:电话:地址:,详细地址里面包含空格

姓名:黄二
电话:18888888888
地址:广东省佛山市 顺德区南方医科大学

[代码 test_2.bat]
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. sed -r "s/[ ,]/\n/g; s/[0-9]{11}/&\n;/; s/姓名|电话|地址|[::]//g" "1.txt" > "2.txt"
  5. >"2.csv" echo 姓名,手机号,地址
  6. set "Output=0"
  7. (for /f "tokens=1* delims=:" %%h in ('type "2.txt" ^| findstr /v "^;$" ^| findstr /n .*') do (
  8.     set "str=%%i"
  9.     if "!str:~0,1!" equ "1" (
  10.         set "Mobile=%%i"
  11.     ) else if "x!str:~4,1!" equ "x" (
  12.         set "Name=%%i"
  13.     ) else (
  14.         if "x!Addr1!" equ "x" (
  15.             set "Address=%%i"
  16.             set "Addr1=1"
  17.         ) else (
  18.             set "Address=!Address!%%i"
  19.         )
  20.     )
  21.     if "x%%i" equ "x" (
  22.         if !Output! equ 0 (
  23.             echo,!Name!,!Mobile!,!Address!
  24.             set "Addr1="
  25.             set "Output=1"
  26.         )
  27.     ) else (
  28.         set "Output=0"
  29.     )
  30. ))>>"2.csv"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

[解决方案]

命令行工具 sed.exe 和下面的 test.bat 以及待处理的 1.txt 放在同一个目录下
http://bcn.bathome.net/s/tool/index.html?key=sed
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. sed -r "s/[ ,]/\n/g; s/[0-9]{11}/&\n;/" "1.txt" > "2.txt"
  5. >"2.csv" echo 姓名,手机号,地址
  6. set "n=0"
  7. (for /f "delims=" %%i in ('type "2.txt"') do (
  8.     set "str=%%i"
  9.     if "!str:~0,1!" equ "1" (
  10.         set "Mobile=%%i"
  11.         set /a n+=1
  12.     ) else if "x!str:~4,1!" equ "x" (
  13.         set "Name=%%i"
  14.         set /a n+=1
  15.     ) else (
  16.         set "Address=%%i"
  17.         set /a n+=1
  18.     )
  19.     if !n! equ 3 (
  20.         echo,!Name!,!Mobile!,!Address!
  21.         set "n=0"
  22.     )
  23. ))>>"2.csv"
复制代码
请参考Q-04和Q-05把bat文件和txt文件都保存为ANSI编码:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表