Board logo

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

作者: Batcher    时间: 2021-11-4 15:57     标题: [分享]批处理从杂乱的文本内容中按照顺序整理姓名、电话、地址

[问题描述]

1.txt文本内容排列和格式都是不一样的,都是乱的,希望按照姓名、电话、地址的顺序整理到Excel里面。
  1. 刘一,13111111111,广东广州白云区白云机场
  2. 黄二
  3. 13222222222
  4. 四川成都武侯祠
  5. 13333333333李三 北京市怀柔区益田影人花园酒店
  6. 张四 厦门市江头新景天湖广场一期 13444444444
复制代码

作者: Batcher    时间: 2021-11-4 15:59

[解决方案]

命令行工具 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
作者: Batcher    时间: 2021-11-4 16:49

问题_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"
复制代码





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