1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-28 01:12:20 +01:00
Files
archived-doc-es/reference/strings/functions/sprintf.xml
Juan Pablo Berdejo 298d7c35dd English version update
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@313393 c90b9560-bf6c-de11-be94-00142212c4b1
2011-07-18 15:49:40 +00:00

452 lines
14 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: b5003f8de6f535d6d7337df168d885693d6ccf19 Maintainer: jpberdejo Status: ready -->
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.sprintf">
<refnamediv>
<refname>sprintf</refname>
<refpurpose>Devuelve un string formateado</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>string</type><methodname>sprintf</methodname>
<methodparam><type>string</type><parameter>format</parameter></methodparam>
<methodparam choice="opt"><type>mixed</type><parameter>args</parameter></methodparam>
<methodparam choice="opt"><type>mixed</type><parameter>...</parameter></methodparam>
</methodsynopsis>
<para>
Devuelve un string producido de acuerdo con el string
<parameter>format</parameter>.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>format</parameter></term>
<listitem>
<para>
El string de formato está compuesto de cero o más directivas:
caracteres ordinarios (excluyendo <literal>%</literal>) que son
copiados directamente al resultado y <emphasis>especificaciones
de conversión</emphasis>, cada una de las cuales da lugar a extraer su
propio parámetro. Esto aplica tanto para <function>sprintf</function>
como <function>printf</function>.
</para>
<para>
Cada especificación de conversión consiste en un signo de porcentaje
(<literal>%</literal>), seguido por uno o más de estos
elementos, en orden:
<orderedlist>
<listitem>
<simpara>
Un <emphasis>especificador de signo</emphasis> opcional que fuerza un signo
(- ó +) a ser utilizado en un número. Por defecto, sólo el signo - se utiliza
en un número si es negativo. Esta especificación fuerza números positivos
para que también tengan adjunto el signo + y fue agregada en PHP 4.3.0.
</simpara>
</listitem>
<listitem>
<simpara>
Un <emphasis>especificador de relleno</emphasis> opcional que
indica qué carácter se utiliza para rellenar el resultado hasta
el tamaño correcto de string. Este puede ser un caracter de espacio o un
<literal>0</literal> (el caracter cero). El valor por defecto es rellenar
con espacios. Un caracter de relleno alternativo se puede especificar
colocándole un prefijo de una comilla simple (<literal>'</literal>).
Ver los ejemplos mas adelante.
</simpara>
</listitem>
<listitem>
<simpara>
Un <emphasis>especificador de alineación</emphasis> opcional que indica
si el resultado debe ser alineado a la izquierda o a la derecha.
El valor por defecto es justificado a la derecha, un caracter <literal>-</literal>
aquí lo hará justificado a la izquierda.
</simpara>
</listitem>
<listitem>
<simpara>
Un número opcional, un <emphasis>especificador de ancho</emphasis>
que dice cuantos caracteres (como mínimo) debe producir esta
conversión.
</simpara>
</listitem>
<listitem>
<simpara>
Un <emphasis>especificador de precisión</emphasis> opcional en la forma
de un punto (`.') seguido de un string opcional de dígitos decimales
que indica cuántos dígitos decimales deben mostrarse para
los números de punto flotante. Cuando se utiliza este especificador con un string,
actúa como un punto de corte, estableciendo un límite máximo de caracteres al
string.
</simpara>
</listitem>
<listitem>
<para>
Un <emphasis>especificador de tipo</emphasis> que indica como que tipo
deben ser tratados los datos del argumento. Los tipos posibles son:
<simplelist>
<member>
<literal>%</literal> - un caracter de porcentaje literal. No
se requiere argumento.
</member>
<member>
<literal>b</literal> - el argumento es tratado como un
integer y presentado como un número binario.
</member>
<member>
<literal>c</literal> - el argumento es tratado como un
integer y presentado como el caracter con ese valor
ASCII.
</member>
<member>
<literal>d</literal> - el argumento es tratado como un
integer y presentado como un número decimal (con signo).
</member>
<member>
<literal>e</literal> - el argumento es tratado como notación
científica (e.g. 1.2e+2).
El especificador de precisión indica el número de dígitos después del
punto decimal a partir de PHP 5.2.1. En versiones anteriores, se tomó como
el número de dígitos significativos (uno menos).
</member>
<member>
<literal>E</literal> - como <literal>%e</literal> pero utiliza
la letra mayúscula (e.g. 1.2E+2).
</member>
<member>
<literal>u</literal> - el argumento es tratado como un
integer y presentado como un número decimal sin signo.
</member>
<member>
<literal>f</literal> - el argumento es tratado como un
float y presentado como un número de punto flotante (consciente de la configuración regional).
</member>
<member>
<literal>F</literal> - el argumento es tratado como un
float y presentado como un número de punto flotante (no consciente de la configuración regional).
Disponible desde PHP 4.3.10 y PHP 5.0.3.
</member>
<member>
<literal>g</literal> - más corto de <literal>%e</literal> y
<literal>%f</literal>.
</member>
<member>
<literal>G</literal> - más corto de <literal>%E</literal> y
<literal>%f</literal>.
</member>
<member>
<literal>o</literal> - el argumento es tratado como un
integer y presentado como un número octal.
</member>
<member>
<literal>s</literal> - el argumento es tratado y
presentado como un string.
</member>
<member>
<literal>x</literal> - el argumento es tratado como un integer
y presentado como un número hexadecimal (con las letras
en minúsculas).
</member>
<member>
<literal>X</literal> - el argumento es tratado como un integer
y presentado como un número hexadecimal (con las letras
en mayúsculas).
</member>
</simplelist>
</para>
</listitem>
</orderedlist>
</para>
<para>
El string de formato soporta numeración/intercambio de argumentos. Aquí está un
ejemplo:
<example>
<title>Intercambio de argumentos</title>
<programlisting role="php">
<![CDATA[
<?php
$num = 5;
$location = 'tree';
$format = 'There are %d monkeys in the %s';
printf($format, $num, $location);
?>
]]>
</programlisting>
</example>
Esto producirá "There are 5 monkeys in the tree". Pero
imaginemos que estamos creando un string de formato en un archivo separado,
generalmente por que nos gustaría internacionalizarlo y lo
reescribimos así:
<example>
<title>Intercambio de argumentos</title>
<programlisting role="php">
<![CDATA[
<?php
$format = 'The %s contains %d monkeys';
printf($format, $num, $location);
?>
]]>
</programlisting>
</example>
Ahora tenemos un problema. El orden de los marcadores de posición en el
string de formato no coincide con el orden de los argumentos en el
código. Nos gustaría dejar el código tal cual y simplemente indicar
en el string de formato a cuáles argumentos de los marcadores de posición se refieren.
Tendríamos que escribir el string de formato de esta forma:
<example>
<title>Intercambio de argumentos</title>
<programlisting role="php">
<![CDATA[
<?php
$format = 'The %2$s contains %1$d monkeys';
printf($format, $num, $location);
?>
]]>
</programlisting>
</example>
Un beneficio adicional aquí, es que se pueden repetir los marcadores de posición sin
agregar más argumentos en el código. Por ejemplo:
<example>
<title>Intercambio de argumentos</title>
<programlisting role="php">
<![CDATA[
<?php
$format = 'The %2$s contains %1$d monkeys.
That\'s a nice %2$s full of %1$d monkeys.';
printf($format, $num, $location);
?>
]]>
</programlisting>
</example>
Cuando se utiliza intercambio de argumentos, el <emphasis>especificador de posición</emphasis>
<literal>n$</literal> debe venir inmediatamente
después del signo de porcentaje (<literal>%</literal>), antes de cualquier otro
especificador, tal como se muestra en el ejemplo siguiente.
<example>
<title>Especificador de posición con otros especificadores</title>
<programlisting role="php">
<![CDATA[
<?php
$format= 'The %2$s contains %1$04d monkeys';
printf($format, $num, $location);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
The tree contains 0005 monkeys
]]>
</screen>
</example>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>args</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>...</parameter></term>
<listitem>
<para>
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Devuelve un string producido de acuerdo con el string de formato
<parameter>format</parameter>.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>4.0.6</entry>
<entry>
Fue agregado el soporte para numeración/intercambio de argumentos
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
<title><function>printf</function>: ejemplos varios</title>
<programlisting role="php">
<![CDATA[
<?php
$n = 43951789;
$u = -43951789;
$c = 65; // ASCII 65 es 'A'
// fijarse en el doble %%, esto muestra un caracter '%' literal
printf("%%b = '%b'\n", $n); // representación binaria
printf("%%c = '%c'\n", $c); // muestra el caracter ascii, igual que la función chr()
printf("%%d = '%d'\n", $n); // representación estándar de un entero
printf("%%e = '%e'\n", $n); // notación científica
printf("%%u = '%u'\n", $n); // representación sin signo de un entero positivo
printf("%%u = '%u'\n", $u); // representación sin signo de un entero negativo
printf("%%f = '%f'\n", $n); // representación de punto flotante
printf("%%o = '%o'\n", $n); // representación octal
printf("%%s = '%s'\n", $n); // representación en una cadena
printf("%%x = '%x'\n", $n); // representación hexadecimal (minúsculas)
printf("%%X = '%X'\n", $n); // representación hexadecimal (mayúsculas)
printf("%%+d = '%+d'\n", $n); // especificador de signo sobre un entero positivo
printf("%%+d = '%+d'\n", $u); // especificador de signo sobre un entero negativo
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
%b = '10100111101010011010101101'
%c = 'A'
%d = '43951789'
%e = '4.39518e+7'
%u = '43951789'
%u = '4251015507'
%f = '43951789.000000'
%o = '247523255'
%s = '43951789'
%x = '29ea6ad'
%X = '29EA6AD'
%+d = '+43951789'
%+d = '-43951789'
]]>
</screen>
</example>
<example>
<title><function>printf</function>: especificadores de string</title>
<programlisting role="php">
<![CDATA[
<?php
$s = 'monkey';
$t = 'many monkeys';
printf("[%s]\n", $s); // salida estándar de string
printf("[%10s]\n", $s); // justificación a la derecha con espacios
printf("[%-10s]\n", $s); // justificación a la izquierda con espacios
printf("[%010s]\n", $s); // rellenado con ceros también funciona sobre strings
printf("[%'#10s]\n", $s); // utiliza el caracter de relleno personalizado '#'
printf("[%10.10s]\n", $t); // justificación a la izquierda pero con un corte a los 10 caracteres
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
[monkey]
[ monkey]
[monkey ]
[0000monkey]
[####monkey]
[many monke]
]]>
</screen>
</example>
<example>
<title><function>sprintf</function>: rellenado con ceros en integers</title>
<programlisting role="php">
<![CDATA[
<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
]]>
</programlisting>
</example>
<example>
<title><function>sprintf</function>: formato de moneda</title>
<programlisting role="php">
<![CDATA[
<?php
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money producirá "123.1";
$formatted = sprintf("%01.2f", $money);
// echo $formatted producirá "123.10"
?>
]]>
</programlisting>
</example>
<example>
<title><function>sprintf</function>: notación científica</title>
<programlisting role="php">
<![CDATA[
<?php
$number = 362525200;
echo sprintf("%.3e", $number); // produce 3.625e+8
?>
]]>
</programlisting>
</example>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>printf</function></member>
<member><function>sscanf</function></member>
<member><function>fscanf</function></member>
<member><function>vsprintf</function></member>
<member><function>number_format</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->