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

うめすこんぶ

日々のプログラミングで残しておきたいメモ.何かの役に立てれば幸いです.

言語別Sprintfのまとめ

スポンサーリンク

研究で実験をしていると、ファイル名を連番で出力したいという時が良くあります。 連番をtest1, test2, ..test10などとすると、ファイル名でソートすると、都合よくソートされないんですよね (test1 test10 test2の順になる)

ファイル名でソートした時にうまくソートできるように、連番は001,002...011..のように、0で埋めてみます。 (0埋め、と検索されることが多いです)

せっかくなので、bash以外の他のプログラミング言語でも使えるように、sprintfの書き方をまとめてみました。 sprintfは、かなり汎用性が高いですので、覚えておくと便利です。

以下、iは整数とします。

bash

filename=$(printf test%03d $i)

単純に0梅の連番を作るのは、実は以下で簡単にできます。

seq -w 0 100

C, C++

char filename[10];
sprintf(filename, "test%03d", i);

java

Strng filename = Strng.format("test%03d", i)

Scala

var filename = "test%03d".format(i)

perl

$name = sprintf("test%03d", $i);

php

$filename = sprintf("test%03d", $i);

配列用の、vsprintfもある。

python

filename = "test%03d" % i

# 2つ目の構文はタプルを渡せる。
filename = "%s%03d" % ("test", i)

ruby

sprnf以外にもよりタイプ数の少ないpythonの文に似たメソッドが有る。

filename = sprintf("test%03d", i)
# もしくは
filename = "test%03d" % i

# 2つ目の構文は配列を渡せる。
filename = "%s%03d" % ["test", i]

sprintfformatにしても同じ。

javascrpt

デフォルトでは実装されていないので、ライブラリを使う。 alexe/sprintf.javascript

var filename = sprintf("test%03d", i);

0埋めだけなら以下で。

// 3桁にする
var filename = "test" + ( "000" + i).substr(-3);
var filename = "test" + ( "000" + i).slce(-3);

ただし、桁数が想定より多い数字はうまく表示できないなどの欠点がある。

R

filename <- sprintf("test%3d", i)

go

import "fmt"
var filename = fmt.Sprintf("test%03d", i)

lua

filename = string.format("test%03d", i)