X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fm%2Fgeneral%2Fint2str.m;fp=octave_packages%2Fm%2Fgeneral%2Fint2str.m;h=b80fae7a3542db33c70b9c5ca84b925905d53acf;hp=0000000000000000000000000000000000000000;hb=1c0469ada9531828709108a4882a751d2816994a;hpb=63de9f36673d49121015e3695f2c336ea92bc278 diff --git a/octave_packages/m/general/int2str.m b/octave_packages/m/general/int2str.m new file mode 100644 index 0000000..b80fae7 --- /dev/null +++ b/octave_packages/m/general/int2str.m @@ -0,0 +1,122 @@ +## Copyright (C) 1993-2012 John W. Eaton +## +## This file is part of Octave. +## +## Octave is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or (at +## your option) any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, see +## . + +## -*- texinfo -*- +## @deftypefn {Function File} {} int2str (@var{n}) +## Convert an integer (or array of integers) to a string (or a character +## array). +## +## @example +## @group +## int2str (123) +## @result{} "123" +## +## s = int2str ([1, 2, 3; 4, 5, 6]) +## @result{} s = +## 1 2 3 +## 4 5 6 +## +## whos s +## @result{} s = +## Attr Name Size Bytes Class +## ==== ==== ==== ===== ===== +## s 2x7 14 char +## @end group +## @end example +## +## This function is not very flexible. For better control over the +## results, use @code{sprintf} (@pxref{Formatted Output}). +## @seealso{sprintf, num2str, mat2str} +## @end deftypefn + +## Author: jwe + +function retval = int2str (n) + + if (nargin != 1) + print_usage (); + endif + + if (isempty (n)) + retval = ''; + return; + endif + + n = round (real(n)); + sz = size(n); + nd = ndims (n); + nc = columns (n); + if (nc > 1) + idx = repmat ({':'}, nd, 1); + idx(2) = 1; + ifmt = get_fmt (n(idx{:}), 0); + idx(2) = 2:sz(2); + rfmt = get_fmt (n(idx{:}), 2); + fmt = cstrcat (ifmt, repmat (rfmt, 1, nc-1), "\n"); + else + fmt = cstrcat (get_fmt (n, 0), "\n"); + endif + tmp = sprintf (fmt, permute (n, [2, 1, 3 : nd])); + tmp(end) = ""; + retval = char (strsplit (tmp, "\n")); + +endfunction + +function fmt = get_fmt (x, sep) + + t = x(:); + t = t(t != 0); + if (isempty (t)) + ## All zeros. + fmt = sprintf ("%%%dd", 1 + sep); + else + ## Maybe have some zeros. + nan_inf = isinf (t) | isnan (t); + if (any (nan_inf)) + if (any (t(nan_inf) < 0)) + min_fw = 4 + sep; + else + min_fw = 3 + sep; + endif + else + min_fw = 1 + sep; + endif + t = t(! nan_inf); + if (isempty (t)) + ## Only zeros, Inf, and NaN. + fmt = sprintf ("%%%dd", min_fw); + else + ## Could have anything. + tfw = floor (log10 (double (abs (t)))) + 1 + sep; + fw = max (tfw); + if (any (t(tfw == fw) < 0)) + fw++; + endif + fmt = sprintf ("%%%dd", max (fw, min_fw)); + endif + endif + +endfunction + +%!assert (strcmp (int2str (-123), "-123") && strcmp (int2str (1.2), "1")); +%!assert (all (int2str ([1, 2, 3; 4, 5, 6]) == ["1 2 3";"4 5 6"])); +%!assert (int2str([]), ""); + +%!error int2str (); +%!error int2str (1, 2); +