[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】批处理将txt文本内容按指定格式处理后输出到新的文本里?

有点复杂,附件中有格式。

原数据格式
数据1
数据2
数据3
……

原txt文件都是一列数据,为了方便利用excel等做分析,先对其格式做处理,需要两个批处理文件代码处理。

格式1: 第一行是(文件名)(tab键)( 1)
            第二行是(0.1)(tab键)(数据1)
            第三行是(0.2)(tab键)(数据2)
                        ...
实际文件中不需要上面的括号;也就是原数据前多加一行,并且原数据每行前面加数字,这些数字竖向看刚好是0.1为首项,0.1为公差的等差数列。


格式2:第一行是(文件名)(tab键)(2)
           第二行是(0.1)(tab键)(数据1)(tab键)(数据2)
           第三行是(0.2)(tab键)(数据3)(tab键)(数据4)
                       ...
格式2实际文件中也不需要上面的括号,数据部分是把原文件中的数据每两行并一行的。

tab键控制宽度,一列数据首字符开始到下列字符宽度为8。
1

评分人数

本帖最后由 pcl_test 于 2016-6-29 12:42 编辑

关于格式1:
我只能作到,没有小数点的部分。
还请其他高手指点。

[c39_temp1.txt]
c39        1  
1        0.24  
2        14.6  
3        0.59  
...

[Dat代码]:
  1. @echo off
  2. echo ---------------------------------
  3. echo Format one
  4. echo ---------------------------------
  5. :: Step1, Catch all txt file and save to namelist.txt
  6. if exist namelist.txt del namelist.txt
  7. if exist namelist.lst del namelist.lst
  8. for %%i in (*.txt) do echo %%i>>namelist.lst
  9. cd.>namelist.txt
  10. for /f "tokens=1,2  delims=." %%J in (namelist.lst) do echo %%J >>namelist.txt
  11. del namelist.lst
  12. :: Step2, add number to collumn 1
  13. setlocal enabledelayedexpansion
  14. for /f %%C in (namelist.txt) do (
  15.         set n=0
  16.         for /f "delims=" %%a in (%%C.txt) do (
  17.             set /a n=n+1
  18.             if "!n!"==""1"" cd.>%%C_temp.txt else (
  19.             echo !n! %%a>>%%C_temp.txt
  20. )
  21. )
  22. )
  23. :: Step3, add file name to row1
  24. for /f %%C in (namelist.txt) do (
  25. for /f "tokens=1,2 delims= " %%d in (%%C_temp.txt) do (
  26.     if "%%d"=="1" echo %%C 1 >>%%C_temp1.txt
  27.      echo %%d %%e >>%%C_temp1.txt
  28. )
  29. )
  30. del namelist.txt
  31. del *temp.txt
  32. pause
复制代码

TOP

TOP

论坛过滤了TAB键已上传文件
大小: 603 字节
修改时间: 2016年6月29日, 0:41:46
MD5: B3ADDFF0A458C703BFCA291997A55F68
SHA1: C35DDE2A2D9206ACB5DAEDDBACAFE4D438C5BE35
CRC32: 85E14D55
这么好的论坛你上哪找,运行测试环境为6.1.7601-64
注:请遵守互联网信息安全,勿用于非法用途

TOP

回复 4# /zhqsystem/zhq
测试能保留tab字符
  1. 1 2 3
复制代码
当然也可以这样
  1. @echo off
  2. for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
  3. echo;1%tab%2%tab%3
  4. pause
复制代码

TOP

本帖最后由 /zhqsystem/zhq 于 2016-6-29 02:26 编辑

回复 5# pcl_test
我比较关心第一种,你是怎么打上去的,晕死啊,改了好几次也没打上去
  1. " "
复制代码
这么好的论坛你上哪找,运行测试环境为6.1.7601-64
注:请遵守互联网信息安全,勿用于非法用途

TOP

本帖最后由 mydreamspace 于 2016-6-29 13:49 编辑

回复 4# /zhqsystem/zhq


    好厉害,测试转换后的两种格式文件都可以用。其中有段是判断行数的在我这里有特别的用处,错误的就是数据有问题,这个真心不错。
    但是能拆开做成两个批处理吗?有时候只要格式1,有时候用格式2,两种格式一次全都做出来可能会多一倍时间

TOP

本帖最后由 mydreamspace 于 2016-6-29 11:38 编辑

回复 2# jrx401


    你这个形式看起来对的,但是1.没有用tab键隔开,你这好像是空格隔开的;例如123       123,用tab键的话1到下个1是8个字符间距,但往前删除那个空档按一下删除键就删除掉了就对的,按很多下才能删除那用的就是空格隔开。
2.第一行输出没有提示文件名和格式:  (文件名)(tab)(1)这样

TOP

回复 7# mydreamspace
复制两次,删除对应的导出行就行了,其他最好不动
有些是带关联的上一个没有值下一个不能计算
单行的格式是在计算整体余数为0时才执行
有多余无用的变量主要是编写时复制方便没怎么改
总体速度慢在导出和计算
这么好的论坛你上哪找,运行测试环境为6.1.7601-64
注:请遵守互联网信息安全,勿用于非法用途

TOP

回复 6# /zhqsystem/zhq


    可以现在你自己电脑上的文本编辑器里面写好,再复制粘贴到论坛上,这样TAB是可以保留住的。

TOP

原数据每行前面加数字,这些数字竖向看刚好是0.1为首项,0.1为公差的等差数列。

这个用Excel来操作也挺快的:
复制txt文件内容到B列
A1单元格填写 0.1
A2单元格填写 0.2
选中A1和A2
双击右下角的小方块
它会自动填充数字序列

TOP

回复  jrx401


    你这个形式看起来对的,但是1.没有用tab键隔开,你这好像是空格隔开的;例如123    ...
mydreamspace 发表于 2016-6-29 11:35



    我这边运行结果是 有名称和Tab的。
    可否提供一下你那边运行的结果呢?

TOP

本帖最后由 mydreamspace 于 2016-6-30 08:28 编辑

回复 12# jrx401


    我又试了下,可以的,就是等差数列不对!上次估计我复制代码没复制好,你写的可读性很好

TOP

回复 11# GNU


    就是有很多txt,都要手工操作吃不消啊,批处理完就可以用了

TOP

本帖最后由 mydreamspace 于 2016-6-30 07:58 编辑

回复 9# /zhqsystem/zhq


    哈!试了,可以的,复制成两个,每个都删除另一个格式的输出变快了不少

TOP

返回列表