読者です 読者をやめる 読者になる 読者になる

Perlでタブを使った階層を表したテキストを箇条書きメモにする

perl

メモや、議事録をプレインテキストで書く方が好きなのですが、階層構造にするのが面倒・・・と思っていたのでさくっと書いてみた。


やりたいのは、↓みたいなテキストを書いておいて、

	議題1
		ほげほげ
			うひひ
			いひひ
		いひ
	あはは
		うふふ
		ふふ
	えへ
		ああー

メールで展開したりするときに、

1 議題1
 (1) ほげほげ
  (a) うひひ
  (b) いひひ
 (2) いひ
2 あはは
 (1) うふふ
 (2)ふふ
3 えへ
 (1) ああー

みたいにすること。

少し考えて、再帰・・・?と思ったのだけどうまく再帰で書く方法が思いつかなかったのでダサいやり方で書いた。なんかこう、Coooool!的な書き方ができそうだけど、頭の体操だな。
今のところ思いつかない。Perl使うの久しぶり。

#!/usr/bin/perl
use strict;

my @count;
my @num;
my @alpha = ("a","b","c","d","e","f","g","h","i","j");

while(my $line = <>){
   if($line =~  /^\t\t\t.+\n/){
       $count[0]++ ;
   }elsif($line =~ /^\t\t.+\n/){
       $count[1]++;
   }elsif($line =~ /^\t.+\n/){
       $count[2]++ ;
   }

   $line =~ s/\t//g;

   if($count[0] > 0){
           print "   ($alpha[$num[0]]) $line";
           $count[0]--;
           $num[0]++;

   }elsif($count[1] > 0){
           $num[1]++;
           print "  ($num[1]) $line";
           $count[1]--;
           $num[0] = 0;
   }elsif($count[2] > 0){
           $num[2]++;
           print "$num[2] $line";
           $count[2]--;
           $num[1] = 0;
   }

}