Pregunta

Encontré el siguiente código C ++ (los comentarios se agregaron):

// frame_name is a char array
// prefix is std::string
// k is a for loop counter
// frames is a std::vector string
sprintf(frameName, "%s_%0*s.bmp", prefix.c_str(), k, frames[k].c_str());

Luego trato de traducirlo a C#

// prefix is string
// k is a for loop counter
// frames is List<string>
string frameName = string.Format("{0}_(what goes in here?).bmp", prefix, k, frames[k]);

Básicamente, ¿cuál sería el equivalente de C# de la cadena de formato C ++ "%s_%0*s.bmp"?

Editar, @mark byers:

He probado su código e hice un pequeño programa de prueba:

static void Main(string[] args)
{
    List<string> frames = new List<string>();
    frames.Add("blah");
    frames.Add("cool");
    frames.Add("fsdt");

    string prefix = "prefix";
    int n = 2;
    int k = 0;
    string frameName = string.Format("{0}_{1}.bmp", prefix, frames[k].PadLeft(n, '0'));
    Console.WriteLine(frameName); // outputs prefix_blah.bmp, should output prefix_00blah.bmp
    Console.ReadLine();
 }

No es relleno por alguna razón.

Editar: lo tengo funcionando; No se enmovedor si n = 2.

¿Fue útil?

Solución

Para rellenar una cadena con ceros de uso string.PadLeft:

frames[k].PadLeft(n, '0')

En combinación con string.Format:

int n = 15; // Get this from somewhere.
string frameName = string.Format("{0}_{1}.bmp",
                                 prefix,
                                 frames[k].PadLeft(n, '0'));

Tenga en cuenta que he cambiado k a n, como supongo que este es un error en el código original. Creo que es poco probable que la longitud del relleno en el nombre del archivo estuviera destinada a aumentar en una iteración del bucle.

Otros consejos

Para formatear detalles como el 0* en %0*s, Lo haría de esta manera:

string.Format("{0}_{1}.bmp", prefix, frames[k].PadLeft(k,'0'));

Si lo tengo bien, tomará frames[k], y lo haz con la izquierda con 0.

p.ej:

k=10;
frames[k] = "Hello";
frames[k].PadLeft(k,'0') ==> "00000Hello";

¿Eso es lo que buscas?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top