2014-11-12 3 views
0

У меня есть определенное количество файлов, для которых мне нужны имена файлов в моей программе. Файлы имеют фиксированный способ именования, то есть (префикс + цифры) .jpg. Для например: head001.jpg, head002.jpg, head003.jpg и т.д. и т.п.Создание фиксированной длины числовой строки

Количество цифр в конце концов может быть разным - поэтому программа имеет переменную для изменения где именование файлов начинаются с, где она заканчивается, и сколько число цифр используемый в именовании. Для, например: Второй сценарий может быть - tail00001.jpg, tail00002.jpg, tail00003.jpg и т.д. до tail00100.jpg
И в этом случае: старт цифра будет 0, конец цифра будет 100 и numDigits бы 5

В C++, я видел это форматирование делается следующим образом:
format <<prefix<<"%0"<<numDigits<<"d."<<filetype; // где format является stringstream

Однако, я не совсем уверен, что лучший способ сделать это в C# и хотел бы знать, как решить эту проблему.

+2

String.Формат - ваш друг. Документация MSDN: http://msdn.microsoft.com/en-us/library/system.string.format%28v=vs.110%29.aspx – SBI

+1

Или 'ToString':' myIntValue.ToString («D8»); '// 8 означает общую длину строки вывода –

+0

@SBI: можете ли вы указать на конструктор или функцию или литералы формата, которые будут использоваться для поддержания фиксированной длины числовой строки с помощью' String.Format'? – user1240679

ответ

7

Просто используйте string.Format с спецификатор точности говоря, сколько цифр вы хотите:

string name = string.Format("tail{0:d6}.jpg", index); 

смотрите в документации MSDN для standard numeric string formats для более подробной информации.

Вы можете создать формат поднапрячься программно конечно:

string name = string.Format("tail{0:d" + digits + "}.jpg", index); 

Или использовать PadLeft как это было предложено Вано. Вы все равно можете использовать string.Format хотя:

string name = string.Format("tail{0}.jpg", 
          index.ToString().PadLeft(digits, '0')); 

Использование PadLeft имеет то преимущество, что легче изменить значение дополнения, хотя я предположил бы, что вы всегда хотели, чтобы это было 0 в любом случае.

1

строка имеет PadLeft метод:

int n1 = 1; 
string t1 = n1.ToString().PadLeft(5, '0'); // This will return 00001 
int n10 = 10; 
string t2 = n10.ToString().PadLeft(5, '0'); // This will return 00010 and so on... 
0

..и в этом случае: старт цифра будет 0, конечная цифра будет составлять 100 и numDigits будет 5

Вы можете использовать String.Format и decimal format/precision specifier "D"` и для петли:

int start = 0; 
int end = 100; 
int numDigits = 5; 
string name = "tail"; 
string extension = ".jpg"; 
for(int i = start; i <= end; i++) 
{ 
    string fileName = string.Format(
     "{0}{1}{2}", name, i.ToString("D" + numDigits), extension); 
    Console.WriteLine(fileName); 
} 

Выходы:

tail00000.jpg 
tail00001.jpg 
tail00002.jpg 
tail00003.jpg 
tail00004.jpg 
tail00005.jpg 
tail00006.jpg 
tail00007.jpg 
tail00008.jpg 
tail00009.jpg 
tail00010.jpg 
.... 
tail100.jpg 
0

Вы можете сделать это с помощью string.Format

var result = string.Format("{0}{1:00000}{2}", prefix, number, filetype) 

Или вы могли бы использовать padleft

var result = prefix + number.ToString().PadLeft('0', numDigits) + "." + extension; 

Или вы можете использовать смесь из двух :)

Смежные вопросы