2016-08-16 81 views
0

因此,首先对实际数据进行重组(数据最初是文本和数字的混合,此时对任何数据都没有意义,并且某些模式只是因为我取代了大多数以0,1和ZS的人物,因为在我的大脑中的随机数发生器被打破):将分页列转换为具有正则表达式的行

011.0ZN1ZZ     001.F5ZS1Z     001.ZO5ZY0  
014.5ZZZ1Z     001.1SZZOZ     001.ZLMZY0  
016.01NM1SU54    001.EX0Z1Z     001.LIZZOZ  
018.01NM1SS41    001.F83Z1Z     001.0011M1SU54 
014.ZZ1YZZ     001.ZZZ1IZ     001.0011M1SS41 
013.2EBSIZ     001.ZZZ11Z     001.0011SE4 

01N.ZINSIZ     001.ZZZZ1Z     P01.ZZZZ1Z 
01N.01NSE4     001.LSZZHG     N01.ZZZZ1Z  
001.01ON5O     001.5Z21OL     F01.ZZZZ1Z  
001.NE5ZO1     001.ZOM05O     D01.ZZZZ1Z  
001.ZO5ZOZ     001.01NO1G     Z01.ZZZZ1Z  
001.ZO5ZOZ     001.01NO1G     Z01.ZZZZ1Z 

001.011ZOZ     001.01NZ0Y        

一些补充意见。我可以清理空格和处理没有问题的记录长度,所以我想简化这个问题,我只是将上面的内容包括在内,以免有简化版本的解决方案无法轻松扩展到更复杂的版本。

1 7 13 
2 8 14 
3 9 15 
4 10 16 
5 11 17 
6 12 18 

19 25 
20 26 
21 27 
22 28 
23 29 
24 

所以会有一个可变数量的网页,但每个页面(但在情况下,它显著重要的,它实际上是12x3而不是6X3的相同数量的行和列,但我想保持简单如果可能的话),尽管最后一页可能是一些空行/列。

我使用记事本++,但我有权访问各种功能,所以如果有一种解决方案的方式,比正则表达式更好,我不介意,但由于我将使用这个很多,并使用记事本++ a如果它不是太疯狂,我会很感激正则表达式的解决方案。

回答

0

如果你的Windows机器上安装了Git,你可以使用Git bash中捆绑的Perl。前提是你的输入文件名为data,请尝试以下命令(谨慎:它会orverwrite输入文件):

echo >>data ; \ 
perl -i -lane' 
    $i=0; 
    push @{$c[$i++]}, $_ foreach @F; 
    if (/^\s*$/) { 
     push @l, @{$_} foreach @c; 
     print "@l\015"; 
     @[email protected]=(); 
    }' data 

Perl的命令把输入作为空间分隔的字段的每一行,并积累领域中@c矩阵。遇到空行(if (/^\s*$/) ...)时,它会打印列表中连接的矩阵列。

输入文件就地更改。备份副本data.bak已创建。

输入文件可能不会以空行结束,所以我添加一个与echo >>data。这使Perl脚本变得更简单。

另一个诀窍是尾随\015print "@l\015";。这使我们能够在Unix口味的Git bash环境中获得Windows CRLF行结束符。

演示可以在这里找到:https://ideone.com/vnYoOd。但是由于Ideone禁止文件读/写,所以原来的命令已被修改以使代码在那里运行。

+0

谢谢..这不正是我想要的,因为我描绘了它,但它符合我指定的要求,并且我对它的理解足够好。一旦我有时间这样做,我会在这里用我实际使用的代码添加另一个评论。我在这里唯一真正的修正是: print“@l \ 012 \ 015”;虽然诚实地说我可以告诉你可以做\ r \ n并且它会产生相同的结果,但我认为012 015可能更好,以防解释者对待\ r和\ n的不同(如果这不是标准的话)我会仍然喜欢正则表达式的解决方案,但除非我得到一个我已经标记为解决方案 – Mark

相关问题