标题: [文本处理] 把很多文本中的指定内容输出到另一文本 [打印本页]
作者: lzwudi 时间: 2008-12-13 23:38 标题: 把很多文本中的指定内容输出到另一文本
我用手机的电话本备份工具备份了电话本,共有100多个.备份后的文件格式是VCF.用记事本打开后内容如下:
- BEGIN:VCARD
- VERSION:2.1
- N;CHARSET=UTF-8:张三
- TEL;CELL:13888888888
- END:VCARD
复制代码
其中
N;CHARSET=UTF-8:张三
冒号后面的是人名
TEL;CELL:13888888888
冒号后面的是电话号码
问题如下:
利用批处理将每个VCF文件中的人名和电话号码以下面的格式输出到TXT文件
- 人名:电话号码
- 人名:电话号码
- 人名:电话号码
- ......
复制代码
请指教!!!
作者: itrui 时间: 2008-12-14 01:31
-
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%t in ('dir /a-d /b *.vcf') do (
- set txt=%%t
- for /f "tokens=2 delims=:" %%i in ('type !txt!^|find /i "CHARSET"') do (set name=%%i)
- for /f "tokens=2 delims=:" %%j in ('type !txt!^|find /i "TEL"') do (set tel=%%j)
- echo 正在保存 !name! 的电话...
- >>telbook.ini echo !name!: !tel!
- )
- pause
复制代码
作者: rat 时间: 2008-12-14 01:39
- @echo off & setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir/b *.vcf') do (
- set "f="
- call :w "%%~a"
- echo !name!:!tel!>>Result.txt
- )
- goto:eof
-
- :w
- for /f "usebackq skip=2 tokens=2 delims=:" %%z in ("%~1") do (
- if not defined f (set "name=%%z"&set f=1) else (set "tel=%%z"&goto :eof)
- )
复制代码
作者: itrui 时间: 2008-12-14 08:12
哎,一个FOR就能把人名和电话提取出来,我怎么就想不到呢。
作者: batman 时间: 2008-12-14 09:50 标题: 还可以简单点:
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /s /a-d /b *.vcf') do (
- for /f "usebackq delims=" %%i in ("%%a") do (
- set /a n+=1
- if !n! gtr 2 if !n! lss 5 set "str=%%i"&set "str=!str:*:=!&set "var=!var!:!str!"
- )
- echo !var:~,-1!>>telbook.txt&set /a n=0&set "var="
- )
- start telbook.txt
复制代码
[ 本帖最后由 batman 于 2008-12-14 10:19 编辑 ]
作者: tireless 时间: 2008-12-14 10:39
- @echo off
- for %%A in (*.VCF) do (
- for /f "usebackq skip=2 eol=E delims=: tokens=2" %%a in ("%%A") do (
- if %%a geq a (set /p=%%a:<nul>>Tel.txt) else echo %%a>>Tel.txt
- )
- )
复制代码
[ 本帖最后由 tireless 于 2008-12-14 13:22 编辑 ]
作者: Batcher 时间: 2008-12-15 19:20 标题: 回复 7楼 的帖子
说不定这群人在CSDN的各个开发版块都是大牛人呢,只是在这里用了另一个ID而已,嘿嘿。
作者: lzwudi 时间: 2008-12-25 22:24
谢谢各位的帮助.我因为这几天有点事情,所以才回帖!抱歉!!
回复大家:
出现了一个错误:
通过运行上面各位的代码后,提取的人名都是乱码,好象是因为格式的问题!!!!!
其中:
itrui 的代码运行较慢!!!
rat 的代码能达到目的
batman 的代码有点问题,输出的文件里每一行都是~,-1
tireless 的代码能达到目的,也正如各位评分时所说的!!
但是现在唯一的问题就是输出的姓名都是乱码,号码正常...各位师傅能不能再帮忙研究一下..
怎么才能输出正常的汉字呢?
下面有附件...我认为能用记事本打开....读取正常...但是和记事本的编码不同
作者: Batcher 时间: 2008-12-25 22:32 标题: 回复 9楼 的帖子
那些是UTF-8编码格式
你应该在顶楼把这一点说清楚
作者: zcy85611 时间: 2008-12-29 13:44
原帖由 tireless 于 2008-12-14 10:39 发表
@echo off
for %%A in (*.VCF) do (
for /f "usebackq skip=2 eol=E delims=: tokens=2" %%a in ("%%A") do (
if %%a geq a (set /p=%%a:>Tel.txt) else echo %%a>>Tel.txt
)
)
我想请教一下 if %%a geq a (set /p=%%a:>Tel.txt) else echo %%a>>Tel.txt 这一段的应该怎么理解。
tokens=2取的是第二段的内容,也就是包括了姓名跟电话号码,为什么只用一个参数就能把这两个内容以 姓名:电话 的形式表现出来呢?希望版主能帮我详细分析一下这段代码的意思~谢谢
作者: beck1321 时间: 2008-12-29 13:50
饿 学习中。。看不懂哦 惨
作者: Batcher 时间: 2008-12-29 15:56 标题: 回复 11楼 的帖子
你把@echo off删除,看看那个if ... else ...是怎样执行的,就明白了。
作者: tireless 时间: 2008-12-29 22:08 标题: 回复 9楼 的帖子
先用 ConCmd.exe 转换文件编码:复制代码
可以生成到新文件:- ConCmd.exe /o:gbk *.vcf *.txt
复制代码
作者: zcy85611 时间: 2008-12-30 11:20
原帖由 Batcher 于 2008-12-29 15:56 发表
你把@echo off删除,看看那个if ... else ...是怎样执行的,就明白了。
我去掉了@echo off 运行如下
C:\>for %A in (*.VCF) do (for /F "usebackq skip=2 eol=E delims=: tokens=2" %a in
("%A") do (if %a GEQ a (set /p=%a: 0<nul 1>>Tel.txt ) else echo %a 1>>Tel.txt
) )
C:\>(for /F "usebackq skip=2 eol=E delims=: tokens=2" %a in ("1.vcf") do (if %a
GEQ a (set /p=%a: 0<nul 1>>Tel.txt ) else echo %a 1>>Tel.txt ) )
C:\>(if 张三 GEQ a (set /p=张三: 0<nul 1>>Tel.txt ) else echo 张三 1>>Tel.txt )
C:\>(if 13888675 GEQ a (set /p=13888675: 0<nul 1>>Tel.txt ) else echo 13888675
1>>Tel.txt )
C:\>pause
请按任意键继续. . .
里面我还是有一个问题没有弄懂,if %a% geq a 里面的 a 是指的什么?再就是 set /p=张三: 0<nul 1>>Tel.txt 中的0和1是指的什么,在原来的代码里面并没有出现0和1,但是在运行的时候就出现了?我看了if的教程,但是只有ERRORLEVEL 里面有0跟1这个说法,不知道是不是我没有理解if命令,麻烦版主在指点一下。
作者: tireless 时间: 2008-12-30 12:20
1、if %a% geq a 里面的 a 是指的什么?
是在比较 ASCII 值。大小关系是:
数字 < 英文 < 中文
比较的时候是一位一位地比较。例如 ag 会大于 abzzzzzzzz。
所以,if %a% geq a (...) else (...) 就可以分出是电话号码还是人名。
2、set /p=张三: 0<nul 1>>Tel.txt 中的0和1是指的什么
参考:
重定向中的秘密
重定向中的秘密(续)
Using command redirection operators
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |