标题: [文本处理] 【已解决】批处理将txt文本内容按指定格式处理后输出到新的文本里? [打印本页]
作者: mydreamspace 时间: 2016-6-28 14:21 标题: 【已解决】批处理将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。
作者: jrx401 时间: 2016-6-28 23:07
本帖最后由 pcl_test 于 2016-6-29 12:42 编辑
关于格式1:
我只能作到,没有小数点的部分。
还请其他高手指点。
[c39_temp1.txt]
c39 1
1 0.24
2 14.6
3 0.59
...
[Dat代码]:- @echo off
- echo ---------------------------------
- echo Format one
- echo ---------------------------------
- :: Step1, Catch all txt file and save to namelist.txt
- if exist namelist.txt del namelist.txt
- if exist namelist.lst del namelist.lst
- for %%i in (*.txt) do echo %%i>>namelist.lst
- cd.>namelist.txt
- for /f "tokens=1,2 delims=." %%J in (namelist.lst) do echo %%J >>namelist.txt
- del namelist.lst
-
- :: Step2, add number to collumn 1
- setlocal enabledelayedexpansion
- for /f %%C in (namelist.txt) do (
- set n=0
- for /f "delims=" %%a in (%%C.txt) do (
- set /a n=n+1
- if "!n!"==""1"" cd.>%%C_temp.txt else (
- echo !n! %%a>>%%C_temp.txt
- )
- )
- )
-
- :: Step3, add file name to row1
- for /f %%C in (namelist.txt) do (
- for /f "tokens=1,2 delims= " %%d in (%%C_temp.txt) do (
- if "%%d"=="1" echo %%C 1 >>%%C_temp1.txt
- echo %%d %%e >>%%C_temp1.txt
- )
- )
- del namelist.txt
- del *temp.txt
- pause
复制代码
作者: pcl_test 时间: 2016-6-28 23:41
回复 2# jrx401
http://www.bathome.net/thread-3473-1-1.html
http://bbs.bathome.net/thread-404-1-1.html
作者: /zhqsystem/zhq 时间: 2016-6-29 00:22
论坛过滤了TAB键已上传文件
大小: 603 字节
修改时间: 2016年6月29日, 0:41:46
MD5: B3ADDFF0A458C703BFCA291997A55F68
SHA1: C35DDE2A2D9206ACB5DAEDDBACAFE4D438C5BE35
CRC32: 85E14D55
作者: pcl_test 时间: 2016-6-29 00:55
回复 4# /zhqsystem/zhq
测试能保留tab字符复制代码
当然也可以这样- @echo off
- for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
- echo;1%tab%2%tab%3
- pause
复制代码
作者: /zhqsystem/zhq 时间: 2016-6-29 02:19
本帖最后由 /zhqsystem/zhq 于 2016-6-29 02:26 编辑
回复 5# pcl_test
我比较关心第一种,你是怎么打上去的,晕死啊,改了好几次也没打上去复制代码
作者: mydreamspace 时间: 2016-6-29 11:31
本帖最后由 mydreamspace 于 2016-6-29 13:49 编辑
回复 4# /zhqsystem/zhq
好厉害,测试转换后的两种格式文件都可以用。其中有段是判断行数的在我这里有特别的用处,错误的就是数据有问题,这个真心不错。
但是能拆开做成两个批处理吗?有时候只要格式1,有时候用格式2,两种格式一次全都做出来可能会多一倍时间
作者: mydreamspace 时间: 2016-6-29 11:35
本帖最后由 mydreamspace 于 2016-6-29 11:38 编辑
回复 2# jrx401
你这个形式看起来对的,但是1.没有用tab键隔开,你这好像是空格隔开的;例如123 123,用tab键的话1到下个1是8个字符间距,但往前删除那个空档按一下删除键就删除掉了就对的,按很多下才能删除那用的就是空格隔开。
2.第一行输出没有提示文件名和格式: (文件名)(tab)(1)这样
作者: /zhqsystem/zhq 时间: 2016-6-29 22:30
回复 7# mydreamspace
复制两次,删除对应的导出行就行了,其他最好不动
有些是带关联的上一个没有值下一个不能计算
单行的格式是在计算整体余数为0时才执行
有多余无用的变量主要是编写时复制方便没怎么改
总体速度慢在导出和计算
作者: GNU 时间: 2016-6-29 22:37
回复 6# /zhqsystem/zhq
可以现在你自己电脑上的文本编辑器里面写好,再复制粘贴到论坛上,这样TAB是可以保留住的。
作者: GNU 时间: 2016-6-29 22:49
原数据每行前面加数字,这些数字竖向看刚好是0.1为首项,0.1为公差的等差数列。
这个用Excel来操作也挺快的:
复制txt文件内容到B列
A1单元格填写 0.1
A2单元格填写 0.2
选中A1和A2
双击右下角的小方块
它会自动填充数字序列
作者: jrx401 时间: 2016-6-30 07:23
回复 jrx401
你这个形式看起来对的,但是1.没有用tab键隔开,你这好像是空格隔开的;例如123 ...
mydreamspace 发表于 2016-6-29 11:35
我这边运行结果是 有名称和Tab的。
可否提供一下你那边运行的结果呢?
作者: mydreamspace 时间: 2016-6-30 07:37
本帖最后由 mydreamspace 于 2016-6-30 08:28 编辑
回复 12# jrx401
我又试了下,可以的,就是等差数列不对!上次估计我复制代码没复制好,你写的可读性很好
作者: mydreamspace 时间: 2016-6-30 07:38
回复 11# GNU
就是有很多txt,都要手工操作吃不消啊,批处理完就可以用了
作者: mydreamspace 时间: 2016-6-30 07:41
本帖最后由 mydreamspace 于 2016-6-30 07:58 编辑
回复 9# /zhqsystem/zhq
哈!试了,可以的,复制成两个,每个都删除另一个格式的输出变快了不少
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |