中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-14 19:00
楼 主 把CSV文件转成想要的格式 发表于 2007-04-03 07:21 ·  IANA 局域网IP(Private-Use)
中级用户
★★
蝴蝶之吻
积分 430
发帖 177
注册 2006-09-20 12:00
UID 63170
来自 广东深圳
状态 离线
请看
http://www.cn-dos.net/forum/viewthread.php?tid=25112&fpage=0&highlight=&page=10

能不能写一个P,把CSV文件转成TEL.DB的格式呀....

CSV格式如下:
姓名,手机号码1,手机号码2,住宅电话,办公室电话,传真,电子邮件,家庭地址,录入时间
zouzhxi,1234567890123,1234567890124,12345678,12345679,12345678,zouzhxi@163.com,深圳大学,2007-04-02


如果没有的话,就留空.:
姓名,手机号码1,,,办公室电话,,电子邮件,家庭地址,录入时间
zouzhxi,1234567890123,,,12345679,,zouzhxi@163.com,深圳大学,2007-04-02


TEL.DB格式如下:
::电话本数据库
--------------------------------------------------

zouzhxi:1234567890123::
姓名:   
手机号码 1:
手机号码 2:
住宅电话: 
办公室电话:
传真:   
电子邮件: [zouzhxi@163.com]
家庭地址: 
录入日期: 
-End-


2 发表于 2007-04-03 07:38 ·  中国 广东 广州 荔湾区 电信
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
UID 82819
性别 男
状态 离线
可以写的。你可以自己试着写一下。。。
知,不觉多。不知,乃求知
3 发表于 2007-04-03 08:01 ·  IANA 局域网IP(Private-Use)
中级用户
★★
蝴蝶之吻
积分 430
发帖 177
注册 2006-09-20 12:00
UID 63170
来自 广东深圳
状态 离线
就是在处理“,”出错了。。。没弄出来。。。如果是完整的就可以。。。可是里边要是有空位的话,就出错了。。。郁闷ing...
4 发表于 2007-04-03 10:12 ·  中国 甘肃 平凉 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
先每两行为单位,call ,后替换,,为,空, 这样就可以for /f 来 set 了,然后set/p 就ok了
5 发表于 2007-04-03 10:28 ·  中国 四川 成都 教育网
中级用户
★★
积分 346
发帖 103
注册 2004-04-06 00:00
UID 21852
性别 男
状态 离线
你那个 CSV 有没有出现空格、引号等特殊字符之类的情况?如果没有的话正则一句就搞定了
6 发表于 2007-04-03 11:04 ·  中国 甘肃 平凉 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
剩下的你自己修改下应该可以的


@echo off&SETLOCAL ENABLEDELAYEDEXPANSION
set life=test.txt
set "fl=姓名,手机号码1,手机号码2,住宅电话,办公室电话,传真,电子邮件,家庭地址,录入时间"
set n=0
for %%? in (%fl%) do (
set/a n+=1
set "d!n!=%%?"
)

set n=0
:loop
set/a n+=2
for /f "tokens=*" %%? in ('findstr /N "." c.txt^|findstr "^%n%"') do (call :替换 "%%?")
for /f "tokens=2* delims=:" %%? in ('set v^|findstr "^v="') do (
for /f "tokens=1-9 delims=," %%a in ('set/p^=^%%?^<nul') do (
set "b1=%%a"
set "b2=%%b"
set "b3=%%c"
set "b4=%%d"
set "b5=%%e"
set "b6=%%f"
set "b7=%%g"
set "b8=%%h"
set "b9=%%i"
)
)

>>%life% set/p=^!b1!的通讯录<nul
>>%life% echo.
for /l %%? in (1,1,9) do (
>>%life% set/p=^!d%%?!: <nul
>>%life% echo.
)
>>%life% echo.
>>%life% echo.

pause
goto loop

:替换
set "v=%~1"
:loop_替换
set "v=!v:,,=,空,!"
set v|findstr "^v="|findstr ",," >nul 2>nul &&goto loop_替换
goto :eof
7 替namejm兄发的一个回贴 发表于 2007-04-03 13:35 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线

@echo off
::Code by namejm
setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.csv) do (
set /a num+=1
if !num! equ 1 set str1=%%i
if !num! equ 2 (
set str2=%%i
set num=0
set str1=!str1:,=\!
set str2=!str2:,=\!
call :translate
)
echo.
)
echo.
pause
exit

:translate
set /a num+=1
for /f "delims=" %%i in ("%str1%") do (
set var%num%=%%~ni:
set str1=%%~dpi
set str1=!str1:~0,-1!
)
for /f "delims=" %%i in ("%str2%") do (
set var_%num%=%%~ni
set str2=%%~dpi
set str2=!str2:~0,-1!
)
if /i not "%str1%"=="%cd%" goto translate
for /l %%i in (%num%,-1,1) do echo !var%%i!
set num=0
goto :eof
8 发表于 2007-04-03 15:10 ·  中国 广东 广州 荔湾区 电信
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
UID 82819
性别 男
状态 离线
因为 for 语句里面对空格也做为分割行。

所以。我一般在这种情况下会采用其他的方案执行。。
知,不觉多。不知,乃求知
9 发表于 2007-04-03 21:54 ·  IANA 局域网IP(Private-Use)
中级用户
★★
蝴蝶之吻
积分 430
发帖 177
注册 2006-09-20 12:00
UID 63170
来自 广东深圳
状态 离线
Re:6F
你的P处理,基本能成功,,但是如果有很多的话,,,用PAUSE就觉得很麻烦了...如果我去掉的话,,,,会在最后一个结果做死循环......能不能改进一下....

Re:7F
你的不行...第一个联系人的资料会和第二个联系的资料连在一起,,,而第二个也和第三个连在一起....



还有就是我想问一下,就是怎么知道这个CSV文件里边有多少行记录....

[ Last edited by zouzhxi on 2007-4-3 at 10:31 PM ]
10 发表于 2007-04-04 03:13 ·  IANA 局域网IP(Private-Use)
中级用户
★★
蝴蝶之吻
积分 430
发帖 177
注册 2006-09-20 12:00
UID 63170
来自 广东深圳
状态 离线
11 发表于 2007-04-04 06:52 ·  中国 广东 电信
初级用户
游荡的孤魂
积分 79
发帖 29
注册 2007-04-02 11:08
UID 83714
性别 男
来自 湖南
状态 离线
7F的代码能处理顶楼的文本内容啊。如果不能处理你的文件,那就是你的文件内容格式比较复杂,和顶楼的例子有出入,最好的办法是把你的文件发出来让大家看看。
12 发表于 2007-04-04 08:18 ·  中国 甘肃 平凉 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
Originally posted by zouzhxi at 2007-4-3 21:54:
Re:6F
你的P处理,基本能成功,,但是如果有很多的话,,,用PAUSE就觉得很麻烦了...如果我去掉的话,,,,会在最后一个结果做死循环......能不能改进一下....

R ...

倒,给你的已经很详细了啊~你自己修改下不就可以了
加2一句 if "%~1"=="" exit/b 就好了

[ Last edited by vkill on 2007-4-4 at 08:19 AM ]
13 发表于 2007-04-04 08:42 ·  中国 广东 电信
初级用户
游荡的孤魂
积分 79
发帖 29
注册 2007-04-02 11:08
UID 83714
性别 男
来自 湖南
状态 离线
难道楼主是把每个联系人的信息分别保存为对应的文件?

[ Last edited by digger on 2007-4-3 at 07:53 PM ]
论坛跳转: