Board logo

标题: [文本处理] 批处理如何遍历获取文本文件的每一行? [打印本页]

作者: lengguoyong    时间: 2011-7-9 08:14     标题: 批处理如何遍历获取文本文件的每一行?

我有一个文本文件,每行都有一个7位数的数据,我如何能遍历获取该文本的每一行呢,文本内容;
1112200
1112300
1112320
1112340
1112350
1134050
1134100
1134110
1134200
作者: ArdentMan    时间: 2011-7-9 08:53

  1. @Echo Off
  2. For /F %%a in (a.txt) Do Echo %%a
  3. Pause>Nul
复制代码

作者: lengguoyong    时间: 2011-7-9 09:12

谢谢ArdentMan的回答,可能我没说清楚我的意思,我想依次获取每一行数据,来作为下一步操作的参数,但怎么样能单个的获取每一行的数据啊,
作者: ArdentMan    时间: 2011-7-9 09:18

在上面的代码中%%a不是Echo的参数吗?
作者: lengguoyong    时间: 2011-7-9 09:24

那怎样才能获取其中的一列数据呢,比如第五列
作者: lengguoyong    时间: 2011-7-9 09:24

说错了是第五行
作者: ArdentMan    时间: 2011-7-9 09:31

  1. @Echo Off
  2. For /F "tokens=1* delims=:" %%i In ('Findstr /n .* a.txt') Do Set "_%%i=%%j"
  3. Echo %_5%
  4. Pause>Nul   
复制代码

作者: lengguoyong    时间: 2011-7-9 09:43

谢谢ArdentMan 大哥,帮了我的大忙,非常感谢,但我看不懂 ,ArdentMan 大哥能解释下代码么
作者: lengguoyong    时间: 2011-7-9 09:46

如果想设计个循环,比如获取第五行到第十行的数据,怎么弄呢
作者: ArdentMan    时间: 2011-7-9 09:59

  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. For /F "tokens=1* delims=:" %%i In ('Findstr /n .* a.txt') Do Set "_%%i=%%j"
  3. For /L %%a in (5,1,10) Do Echo !_%%a!
  4. Pause>Nul   
复制代码

作者: lengguoyong    时间: 2011-7-9 10:10

谢谢ArdentMan大哥,但为啥运行时第五个到第九个的数据能显示,但第十个没显示,提示说是 echo处于关闭状态啊
作者: lengguoyong    时间: 2011-7-9 10:11

奥  是我弄错了 ,不好意思,非常谢谢ArdentMan 大哥,
作者: batman    时间: 2011-7-9 10:11

楼主,你自己想想为啥,不要什么都问可以?
作者: lengguoyong    时间: 2011-7-9 10:25

batman 大哥批评的对,但我要处理大量的数据,批处理还没学会,暂时只好求助了啊
作者: batman    时间: 2011-7-9 11:14

14# lengguoyong
我是指的你连行数都没搞清楚的这个问题。。。
作者: lengguoyong    时间: 2011-7-9 11:26

@Echo Off
For /F "tokens=1* delims=:" %%i In ('Findstr /n .* name.txt') Do Set "_%%i=%%j"
set q= %_2%
for /f "skip=44 tokens=1 delims=;" %%i in (%q%.mon) do echo %%i>>new1.xls

这段代码是提取name.txt中的第二行数据,并以获取的第二行数据为文件名变量执行for /f "skip=44 tokens=1 delims=;" %%i in (%q%.mon) do echo %%i>>new1.xls
但我想弄个循环,就是循环读取name.txt中的每行数据,并执行for /f "skip=44 tokens=1 delims=;" %%i in (%q%.mon) do echo %%i>>new1.xls
这怎么弄啊,求高手门指点啊,自己摸索了半天也不会,数据处理量大,求指点啊
作者: Batcher    时间: 2011-7-9 12:36

16# lengguoyong


请把完整的需求更新到顶楼,并给出部分文本以便测试。
作者: lengguoyong    时间: 2011-7-9 13:10

感谢Batcher 的提点,是这样的,我有一个文本name.txt,里面包含了很多文件的名称,如下:
1112200
1112300
1112320
1112340
1112350
1134050
1134100
1134110
每个对应的文件内的数据比如1112200.txt的内容如下
# Title:                 GRDC STATION DATA FILE
#                        --------------
# Format:                DOS-ASCII
# Date format:           YYYY-MM-DD; YYYY-MM; YYYY; MM
# Field delimiter:       ;
#
# file generation data:  2011-07-07
#
# GRDC-No.:              1112300
# River:                 SENEGAL
# Station:               GALOUGO
# Country:               ML
# Latitude (dec. ?:       13.830000
# Longitude (de. ?:      -11.130000
# Catchment area (km?:   127000.000
# Altitude (m.a.s.l):          69.00
# Next d/s station:      1112100
# Remarks:               
#************************************************************
#
# Data Set Content:      MEAN MONTHLY DISCHARGE
#                        --------------------
# Unit:                  m?s
# Time series:           1905 - 1990
# No. of years:          86
# Last update:           1992-06-26
#
# Table Header:
#     YYYY-MM-DD - Date (DD=00)
#     hh:mm      - Time
#     Original   - original (provided) data
#     Calculated - GRDC modified data
#     Flag       - modification flag
#        -999 - missing data, no correction
#       300+n - n = number of missing values, when determined from mean daily discharge
#          99 - usage not recommended by the provider
#         100 - corrected data, no methode specified
#
# Data lines: 1032
# DATA
YYYY-MM-DD;hh:mm; Original; Calculated; Flag
1905-01-00;--:--;   -999.000;   -999.000; -999
1905-02-00;--:--;   -999.000;   -999.000; -999
1905-03-00;--:--;   -999.000;   -999.000; -999
1905-04-00;--:--;   -999.000;   -999.000; -999
1905-05-00;--:--;     14.000;   -999.000; -999
1906-01-00;--:--;    155.000;   -999.000; -999
我就是想通过name.txt依次获取文件名。然后对该文件提取其中的
1905-01-00;--:--;   -999.000;   -999.000; -999
1905-02-00;--:--;   -999.000;   -999.000; -999
1905-03-00;--:--;   -999.000;   -999.000; -999
1905-04-00;--:--;   -999.000;   -999.000; -999
1905-05-00;--:--;     14.000;   -999.000; -999
1906-01-00;--:--;    155.000;   -999.000; -999
这几列数据。并输出到excel中啊
哪个大侠帮忙啊
我是批处理新手,但需要处理大量的这样数据,求助各位大侠啊
作者: ArdentMan    时间: 2011-7-9 13:12

  1. @Echo Off
  2. (For /F %%i In (name.txt) Do (
  3.   For /F "skip=44 delims=;" %%j In (%%i.mon) Do Echo %%j
  4. ))>new1.xls
复制代码

作者: lengguoyong    时间: 2011-7-9 13:15

最终提取1905-01-00   -999.000  -999.000 -999
这样的四列数据到excel中以便进一步的做分析啊
求助。。。。。
作者: lengguoyong    时间: 2011-7-9 13:56

ArdentMan 大哥真是个大好人啊,多谢多谢,真的非常感谢,
作者: Hello123World    时间: 2011-7-10 13:30

  1. @echo off
  2. for /f "delims=" %%i in (1.txt) do echo %%i
  3. pause>nul
复制代码

作者: yanziyanzi    时间: 2011-7-14 17:28

就楼主的问题,接着想。。怎么把这个参数在for循环中送给另一个程序作为调用参数?




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