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

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

[复制链接]
发表于 2021-11-4 15:57:27 | 显示全部楼层 |阅读模式
[问题描述]

1.txt文本内容排列和格式都是不一样的,都是乱的,希望按照姓名、电话、地址的顺序整理到Excel里面。
  1. 刘一,13111111111,广东广州白云区白云机场

  2. 黄二
  3. 13222222222
  4. 四川成都武侯祠

  5. 13333333333李三 北京市怀柔区益田影人花园酒店

  6. 张四 厦门市江头新景天湖广场一期 13444444444
复制代码
 楼主| 发表于 2021-11-4 15:59:56 | 显示全部楼层
[解决方案]

命令行工具 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
 楼主| 发表于 2021-11-4 16:49:32 | 显示全部楼层
问题_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"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 02:49 , Processed in 0.013467 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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