中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 用for如何分离出带汉字列的文件中想要的列
作者:
标题: 用for如何分离出带汉字列的文件中想要的列 上一主题 | 下一主题
skystar65
初级用户





积分 27
发帖 12
注册 2008-8-22
状态 离线
『楼 主』:  用for如何分离出带汉字列的文件中想要的列

有个1.txt文档,里面内容摘录一部分如下:

        2        博 克 图        50632        48.77         121.92
        3        海 拉 尔        50527        49.22         119.75
        4        图 里 河        50434        50.45         121.70        

现在我想把第三列,也就是50623那列分离出来,写入2。txt文档。

for语句如此:
for /f "tokens=3 delims= " %i in (1.txt) do >> 2.txt echo\%i

分离结果乱七八糟,细细看了语句,明显是汉字之间的空格干扰了delims的分离作用。

有没有什么好的办法能把这个问题解决?

[ Last edited by skystar65 on 2008-9-24 at 03:25 PM ]

2008-9-24 15:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Batcher
初级用户





积分 33
发帖 16
注册 2008-8-21
状态 离线
『第 2 楼』:  


for /f "tokens=5 delims= " %i in (1.txt) do @>>2.txt echo\%i


2008-9-24 15:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
skystar65
初级用户





积分 27
发帖 12
注册 2008-8-22
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by Batcher at 2008-9-24 03:33 PM:
for /f "tokens=5 delims= " %i in (1.txt) do @>>2.txt echo\%i

这个代码还是不行,那几个例子只是我随时摘录的,实际上汉字行是地名,有三个字,也有四个字,示例如下:

        6        齐齐哈尔        50745        47.38         123.92
        7        海    伦        50756        47.43         126.97
        8        富    锦        50788        47.23         131.98
        9        佳 木 斯        50873        46.49         130.17
        10        鸡    西        50978        45.28         130.95
        11        哈 尔 滨        50953        45.75         126.77
        12        牡 丹 江        54094        44.57         129.60

2008-9-24 15:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Batcher
初级用户





积分 33
发帖 16
注册 2008-8-21
状态 离线
『第 4 楼』:  


@echo off
>2.txt type nul
for /f "tokens=1 delims=." %%a in (1.txt) do (
  setlocal enabledelayedexpansion
  set "str=%%a"
  set "str=!str:~-15,5!"
  >>2.txt echo\!str!
  endlocal
)


2008-9-24 15:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
skystar65
初级用户





积分 27
发帖 12
注册 2008-8-22
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by Batcher at 2008-9-24 03:48 PM:
[code]@echo off
>2.txt type nul
for /f "tokens=1 delims=." %%a in (1.txt) do (
  setlocal enabledelayedexpansion
  set "str=%%a"
  set "str=!str:~-15,5!"
  &g ...

哥们,还是不行:)

2008-9-24 15:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Batcher
初级用户





积分 33
发帖 16
注册 2008-8-21
状态 离线
『第 6 楼』:  

哥们,咋个不行法?

  Quote:
C:\Test>type 1.txt
        6        齐齐哈尔        50745        47.38         123.92
        7        海    伦        50756        47.43         126.97
        8        富    锦        50788        47.23         131.98
        9        佳 木 斯        50873        46.49         130.17
        10        鸡    西        50978        45.28         130.95
        11        哈 尔 滨        50953        45.75         126.77
        12        牡 丹 江        54094        44.57         129.60
C:\Test>type test.bat
@echo off
>2.txt type nul
for /f "tokens=1 delims=." %%a in (1.txt) do (
  setlocal enabledelayedexpansion
  set "str=%%a"
  set "str=!str:~-15,5!"
  >>2.txt echo\!str!
  endlocal
)
C:\Test>test.bat

C:\Test>type 2.txt
50745
50756
50788
50873
50978
50953
54094



2008-9-24 16:03
查看资料  发短消息 网志   编辑帖子  回复  引用回复
skystar65
初级用户





积分 27
发帖 12
注册 2008-8-22
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by Batcher at 2008-9-24 04:03 PM:
哥们,咋个不行法?

兄弟,你的思路挺好的,倒数过来,把汉字掠过,可是我这边执行起来确实问题很多。

我把原文件1.txt传上来,你可以在你那边测试下。

附件 1: 1.txt (2008-9-24 16:14, 5.67 K,下载次数: 5)
2008-9-24 16:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Batcher
初级用户





积分 33
发帖 16
注册 2008-8-21
状态 离线
『第 8 楼』:  

你的文本列之间是用制表符tab分割的
论坛程序会把制表符转换成8个空格
运行下面的代码之前请自行把delims=后面的8个空格改成1个制表符
@echo off
>2.txt type nul
for /f "tokens=3 delims=        " %%a in (1.txt) do (
  >>2.txt echo %%a
)


2008-9-24 16:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
skystar65
初级用户





积分 27
发帖 12
注册 2008-8-22
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by Batcher at 2008-9-24 04:23 PM:
你的文本列之间是用制表符tab分割的
论坛程序会把制表符转换成8个空格
运行下面的代码之前请自行把delims=后面的8个空格改成1个制表符
[code]@echo o ...

非常感谢!问题已经解决,我刚在ultraedit下面看了,列之间确实是拿制表符tab分割的,文档是朋友给的,没怎么细看,真没想到是tab符,这样以来问题确实很简单.

2008-9-24 16:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: