Board logo

标题: [文本处理] 批处理如何实现在多个txt文本的相邻两行之间插入多行特定数据内容 [打印本页]

作者: nihaoareyou    时间: 2016-11-7 10:56     标题: 批处理如何实现在多个txt文本的相邻两行之间插入多行特定数据内容

连续插入多行【着急,跪求大神帮助】
很多TXT文件,特征如下:第一列为深度,第二列为含量
深度           含量
2601.11        5.2
2603.2        29.3
2639.64        29.9
如何能批量按深度0.01米连续插入行,含量值均为-999.25,如下:
深度        含量       
2601.11         5.2       
.........      -999.25
........        -999.25       
2603.2         29.3       
.. .......     -999.25
........        -999.25       
2639.64         29.9
最终插入后的深度数据间隔0.01米,含量数据均为-999.25。
作者: pcl_test    时间: 2016-11-7 15:17

  1. set data='2601.11        5.2','2603.2        29.3','2639.64        29.9'
  2. powershell -c "$a=%data%;0..($a.count-2)|%%{$a[$_];$b=$a[$_] -split '\s+';$c=$a[($_)+1] -split '\s+';$d=1*$b[0];while($d -lt ($c[0]-0.01)){$d+=0.01;'{0:0.00}      -999.25' -f $d}};$a[-1]"
  3. pause
复制代码

作者: nihaoareyou    时间: 2016-11-7 15:47

这个powershell怎么运行啊?  请原谅我这个小白问这么白痴的问题
作者: 523066680    时间: 2016-11-7 16:41

perl,可能功力不够,略长
  1. open READ,"<:raw","a.txt";
  2. open WRT,">:raw","b.txt";
  3. print WRT scalar(<READ>);
  4. my @all = <READ>;
  5. for my $i (0 .. $#all-1)
  6. {
  7.     $all[$i] =~/([\d\.]+)\s+/;
  8.     $dpa = $1;
  9.     $all[$i+1] =~/([\d\.]+)\s+/;
  10.     $dpb = $1;
  11.     printf(WRT $all[$i]);
  12.     for (my $n = $dpa+0.01; $n < $dpb; $n+=0.01)
  13.     {
  14.         printf(WRT "%.2f       -999.25\r\n", $n);
  15.     }
  16. }
  17. printf(WRT $all[$#all]);
  18. close READ;
  19. close WRT;
复制代码

作者: CrLf    时间: 2016-11-8 00:24

本帖最后由 CrLf 于 2016-11-8 00:52 编辑

回复 5# 523066680


    取巧解法嗯哼
  1. open READ,"<:raw","a.txt";
  2. open WRT,">:raw","b.txt";
  3. print WRT scalar(<READ>);
  4. my @all = <READ>;
  5. %map = split(/\s+/g);
  6. for($all[0]*100 .. $all[-1]*100){
  7. $_ /= 100;
  8. printf WRT "$_\t%s\r\n", exists $map{$_} ? $map{$_} : -999.25 ;
  9. }
复制代码





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