2017-02-20 9 views
-3

Ich habe einen Dateinamen in unten Muster und ich möchte den mittleren Teil der Datei zu extrahieren (. Z. B. 20170217154436). Wie mache ich das in C# (oder Skriptaufgabe)?wie den Teil des Dateinamens zu extrahieren

20170123-100046_20170217154436_A20170217210502 

jede Hilfe wird geschätzt.

+0

hat es immer dieses Format? –

Antwort

3

können Sie einen regulären Ausdruck verwenden, aber ich glaube, Sie auch so vorgehen können:

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

Es ganz auf die Konsistenz des Formats des Dateinamens abhängt, die Sie verwenden. Ich nehme an, dass Ihr Beispiel ########-######_##############[email protected]############## das Format Ihres Dateinamens ist.

In Ihrem Fall sollte dies geeignet sein und vermeidet die Verwendung von Arrays.

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

Dies nimmt einen Teil zwischen dem 0-ten Elemente und dem Index des letzten Zeichens vor einem Unterstrich.

0

Sie können Regex verwenden s Zeichenfolge zwischen den beiden Zeichen zu erhalten: _ und _

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

Wie bereits erwähnt Regex ist eine Option, aber da es nicht die lesbar Standard ist, würde ich mit etwas klarer und gehen robust wie:

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? 
} 

Natürlich müssen Sie überlegen, wie Standard dieses Format ist. Sie sagen, der mittlere Teil ist was Sie suchen, wird es immer 3 Portionen geben? Was passiert, wenn Sie mehr oder weniger Trennzeichen finden? Kann dieser Charakter jemals innerhalb eines Wertcharakters sein? Ich überlasse es Ihnen, wie Sie mit möglichen falschen positiven oder negativen Ergebnissen umgehen können.

0

Vielen Dank für Ihre Antworten. Ich habe etwas wie unten versucht und es hat funktioniert.

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

dies gibt mir "20170217154436".

Verwandte Themen