Unknown Region

プログラムでハマったエラーとその解決方法についての備忘録メモ

【Perl】テキスト中の特定文字目をハイライトする

MacLinuxのコンソールにおいて、以下の方法で標準出力を加工できる。

\[(属性)m hogehoge \e[m

これを利用して、テキストファイルの中の特定番目の文字だけを赤くハイライトするだけのPerlプログラムを作ってみた。

作った理由は単にJSONの構文エラーの時にChromeがエラー個所の文字の位置をDeveloper Consoleでログとして出力してくるので、その特定を早くするため。

僕がいいツールを知らないだけで、最近のJSON整形ツールだとこの程度は内臓されているような気がする。

 

プログラム: position-checker.pl

#!/usr/bin/perl
use strict;
use warnings;
use utf8;

main();

sub main {
  my $file = $ARGV[0] or die("The file is not given.");
  my $position = $ARGV[1] or die("The position is not given.");
  my $text = "";

  # ファイルの読み込み
  open(IN, $file);
  while() {
    $text .= $_;
  }
  close(IN);
  
  my $target_char = substr($text, $position, 1);
  substr($text, $position, 1, "\e[31m".$target_char."\e[m") if ($target_char);
  print($text."¥n");
}

使い方は、第一引数にテキストファイル、第二引数に文字のポジションを指定する。

ただしシバンは適当だしテキストファイルの文字エンコードは特に指定していないし、ファイルロックも考慮していないのであくまで個人用。

実行すると、ポジションで指定した番目の文字が赤くハイライトの状態で出力される。

 

サンプルのファイル: sample.json

{"hoge": "fuga", "foo": "bar", "piyo": "piyopiyo"}

 

実行例:

$ perl position-checker.pl sample.json 18
{"hoge": "fuga", "foo": "bar", "piyo": "piyopiyo"}

 

最近あまりPerlに触れていないので、たまにはこういう息抜きも大事。