ことの発端
gnuplotで以下のようなコードを組んで、dataフォルダにある複数のデータフォルダをプロットするようにしていました。cronで定期実行する都合上、ファイルパスをフルパスで指定います。そしてフルパスで指定しているため、plotコマンドによる凡例出力がフルパスのファイル名で記述されてしまっていました(titleオプションのfilename変数にフルパスのファイル名が代入される)。
filelist=system("ls /home/abcd/data/data*.txt")
plot for [filename in filelist] filename using 2:3 with linespoints title filename
フルパスでファイル名が凡例としてグラフに描き込まれると、結構場所を占めるのと見た目にも邪魔になってきます。ということで、このファイル名を短くしようというのが今回の趣旨となります。
gprintf, sprintf関数は?
gnuplotの文字列操作の関数gprintf, sprintfでなんとか出来そうかと思って試してみました。しかし、文字列を先頭から任意文字数まで抜き出すことは出来るようですが、文字列の途中を抜き出す方法は分からず…。
substr関数を用いる
gnuplotにはいくつかの文字列関数があって、その中のsubstr関数を使うと良さそうです。
使い方としては
substr(文字列, 開始, 終了)
というようにすることで、文字列の途中の部分を抽出出来るものです。
細かい説明は省くとして、フルパスのファイル名の必要な部分のみを抜き出す場合では以下のようになりました。
substr(substr(filename, 74, 200), 0, 4)
簡単に説明するとフルパス部分を除くために先頭から74文字までを抜かし、終了を200とすることでファイル名最後までを抽出。ここまでで拡張子を含んだファイル名が得られます。そしてさらにsubstr関数で開始0, 終了4と指定することで拡張子を除去。これでファイル名の必要な部分だけを凡例に指定出来ました。
記事をシェア