Question

J'ai trouvé le code suivant C ++ (commentaires me ajoutés):

// 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());

J'essaie ensuite de traduire en 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]);

En fait, ce serait le C # équivalent de la chaîne de format C ++ "% S_% 0 * s.bmp"?

Modifier, Byers @ Mark:

J'ai essayé votre code et a fait un petit programme de test:

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();
 }

Il est pas un rembourrage pour une raison quelconque.

Edit: Got it travail; ne sera pas pad si n = 2.

Était-ce utile?

La solution

Pour cadrer une chaîne avec des zéros utiliser string.PadLeft :

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

En combinaison avec string.Format :

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

Notez que j'ai changé k à n, comme je suppose que ce bogue dans le code d'origine. Je pense qu'il est peu probable que la longueur du rembourrage sur le nom du fichier était destiné à augmenter d'un à chaque itération de la boucle.

Autres conseils

Pour le formatage des détails comme le 0* dans %0*s, je le ferais de cette façon:

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

Si je l'ai droit, il faudra frames[k], et gauche du pavé avec des 0.

par exemple:.

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

Est-ce que vous êtes après?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top