2016-08-16 11 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 

だから、実際の代わりに6x3の12x3だが、私は単純にそれを維持したい、(各ページにページの可変数が、列と行の同じ数があるでしょう可能であれば)、最後のページは空の行/列である可能性があります。

私はnotepad ++を使用していますが、私は様々な関数にアクセスできますので、解決策があれば正規表現より優れていますが、これをたくさん使用してnotepad ++ lotそれはあまりにも狂っていない場合、私は正規表現のソリューションを感謝したい。

答えて

0

WindowsマシンにGitがインストールされている場合は、Git bashのPerlをバンドルして使うことができます。 (:それは、入力ファイルを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コマンドの扱いスペース区切られたフィールドなどの入力の各行をし、フィールドを蓄積し提供し、あなたの入力ファイルはdataという名前で、次のコマンドを実行してみてくださいマトリックス。空の行(if (/^\s*$/) ...)に遭遇すると、行列の列をリストに連結して出力​​します。

入力ファイルがインプレースで変更されました。バックアップコピーdata.bakが作成されます。

入力ファイルは空白行で終わらない可能性がありますので、echo >>dataで入力ファイルを追加してください。これにより、Perlスクリプトが短く簡単になります。

もう1つのトリックは\015の末尾にprint "@l\015";です。これにより、Unix風のGit bash環境でWindows CRLFの行末を取得することができます。

デモはhttps://ideone.com/vnYoOdでご覧いただけます。しかし、Ideoneはファイルの読み書きを禁じているため、元のコマンドはコードが実行されるように変更されています。

+0

ありがとうございます。これは私が描いたものとまったく同じものではありませんが、指定した要件を満たしています。一度これを行う時間があれば、実際に使用したコードをここに追加します。私がここで唯一本当に訂正するのは、 print "@l \ 012 \ 015";正直なところ、私はあなたが言うことができるから\ r \ nと同じ結果を生み出すことができますが、私は012と仮定しますが、015は、通訳者が\ rと\ nを別々に扱う場合には、まだ正規表現の解決が大好きですが、私が1つを得るまでは解決策としてマークしました – Mark

関連する問題