Я бы не использовал PaddedForm
для этого. На самом деле, я не уверен, что PaddedForm
хорош для всего. Вместо этого я бы использовал старые добрые ToString
, Characters
и PadLeft
, например:
toFixedWidth[n_Integer, width_Integer] :=
StringJoin[PadLeft[Characters[ToString[n]], width, "0"]]
Тогда вы можете использовать StringForm
и ToString
, чтобы сделать ваше имя файла:
toNumberedFileName[n_Integer] :=
ToString@StringForm["filename_``", toFixedWidth[n, 5]]
Mathematica не очень подходит для этого вида струнных жеребьевок.
ИЗМЕНИТЬ, чтобы добавить: Собственно Mathematica не обладает необходимой функциональностью, но класс java.lang.String
имеет статический метод format()
, который принимает аргументы в стиле printf
. Вы можете вызвать его с помощью JLink-функций Mathematica. Производительность не будет очень хорошей, но для многих случаев использования вам будет все равно:
Needs["JLink`"];
LoadJavaClass["java.lang.String"];
LoadJavaClass["java.util.Locale"];
sprintf[fmt_, args___] :=
String`format[Locale`ENGLISH,fmt,
MakeJavaObject /@
Replace[{args},
{x_?NumericQ :> N@x,
x : (_Real | _Integer | True |
False | _String | _?JavaObjectQ) :> x,
x_ :> MakeJavaExpr[x]},
{1}]]
Вам нужно проделать немного больше работы, потому что JLink немного туповат в функциях Java с переменным числом аргументов. Метод format()
принимает строку формата и массив Java Object
s, и Mathematica не будет выполнять преобразование автоматически, для этого существует MakeJavaObject
.