2017-02-20 24 views
-3

У меня есть имя файла в шаблоне ниже, и я хочу извлечь среднюю часть файла (т.е. 20170217154436). как это сделать в C# (или задаче скрипта)?Как извлечь часть имени файла

20170123-100046_20170217154436_A20170217210502 

всякая помощь приветствуется.

+0

У этого всегда есть этот формат? –

ответ

3

Вы можете использовать регулярное выражение, но я думаю, вы также можете продолжить так:

String filename = "20170123-100046_20170217154436_A20170217210502"; 
String partToExtract = filename.Split('_')[1]; 
0

Это полностью зависит от консистенции формата файла, который вы используете. Я предполагаю, что, учитывая ваш пример, ########-######_##############[email protected]############## - это формат вашего имени файла.

В вашем случае это должно быть подходящим и избегать использования массивов.

String fileName = "20170123-100046_20170217154436_A20170217210502"; 
fileName = fileName.Substring(0, fileName.IndexOf("_") - 1); 

Это занимает подстроку между 0-м элементом и индексом последнего символа перед подчеркиванием.

0

Вы можете использовать Regex, чтобы получить ей строку между двумя символами: _ и _

string myStr= "20170123-100046_20170217154436_A20170217210502"; 
Regex r = new Regex(@"_(.+?)_"); 
MatchCollection mc = r.Matches(myStr); 
Console.WriteLine("Fine name is " + mc[0].Groups[1].Value); 
0

Как указано Regex вариант, но так как это не самый читаемый стандарт я бы с чем-то более четкое и более прочные, такие как:

const char splitChar = '_'; 

String fileName = "20170123-100046_20170217154436_A20170217210502"; 
int valueIndexStart = fileName.IndexOf(splitChar); 
int valueIndexEnd = fileName.LastIndexOf(splitChar); 


if(valueIndexStart != -1 && valueIndexEnd != -1) 
{ 
    //increment so as to trip splitChar from result 
    valueIndexStart++; 
    valueIndexEnd = valueIndexEnd-valueIndexStart; 
    return fileName.Substring(valueIndexStart, valueIndexEnd); 
}else{ 
    //throw exception? 
} 

Конечно, вам необходимо рассмотреть, насколько стандартным является этот формат. Вы говорите, что средняя часть - это то, что вы ищете, всегда будет 3 части? Что произойдет, если вы найдете более или менее разделительные символы? Может ли этот персонаж быть в значении. Я оставлю это до вас о том, как обращаться с потенциальными ложными позитивами или негативами.

0

Спасибо за все ваши ответы. Я попробовал что-то вроде ниже, и это сработало.

String fileName = "20170123-100046_20170217154436_A20170217210502"; 
fileName = filename.Substring(filename.IndexOf("_") + 1); 
string fname; 
fname=fileName.Substring(0, fileName .IndexOf("_")) 

это дает мне «20170217154436».