2012-06-12 69 views
3

我有一個文件名dayhappy_02_02345.csv獲取文件名C#

的一部分,我如何獲得02部分出一個變量使用,也可以我怎麼了02345一部分,所以我可以通過這兩個值變成一個函數的變量。

使用c#。

我已經看過GetFileName但這隻能得到文件名,擴展名或完整的文件名。

感謝

科技教育

回答

5

對於特定的文件名,

string sData = "dayhappy_02_02345.csv"; 
string[] sArr = sData.split('_'); 

string sPart1 = sArr[1]; 
string sPart2 = sArr[2]; 

會做,但是這是一個特殊的情況下,將這種類型的文件名工作

+0

我認爲你的答案可能工作,但即時通訊使用Dts.Variable和文件名及其擴展名位於變量。這會工作嗎?你能簡單地替換字符串sData = Dts.Variables [「filenameVariable」]。Value。 感謝您的快速回復 – Steven

+0

當然可以。此外,你必須在這段代碼中插入一些驗證,我沒有在上面的例子中包含 – Shai

+0

我現在有這個: string fileName = Dts.Variables [「csvFileNames」]。Value; string [] sArray = fileName.Split('_'); string 02345Number = sArray [1]; string 02Number = sArray [2]; MessageBox.Show(02345Number); 表示無法將對象轉換爲字符串。 我真的很傻在這裏我認爲和即時通訊缺少語法,但我有這個:使用Microsoft.SqlServer.Dts.Runtime;在命名空間中,所以我不知道這會有什麼問題。感謝您的幫助 – Steven

4

獲取文件名,你已經想通了,然後用String.Split()得到各個部分。

+0

我會建議不要使用字符串方法,因爲格式的改變會強制你改變代碼,而使用正則表達式你可以使字符串成爲一個配置s不管怎樣,它更加靈活和強大。 –

+1

@TA先生 - 夠公平的。一般來說我都同意,但在這個特定的例子中,String.Split就足夠了。這是主觀的,但我喜歡更簡潔的代碼,如果可能的話。而且,這顯然是一個非常新的開發者,所以我給出了最簡單的答案。學習正則表達式是需要完成的事情,但是對於這種情況,他現在需要嗎?跑步前我正在考慮寶寶的步驟。但是,我同意你的一般看法。 – David

+0

文件名不斷變化,但擴展名不變,我也有文件在一個DTS變量。正則表達式是最好的前進方式嗎? – Steven

3

你必須使用正則表達式:

var match = new Regex(@".*_(\d+)_(\d+)").Match(Path.GetFileNameWithoutExtension(fileNAme)); 
var v02 = match.Groups[0].Value; 
var v02345 = match.Groups[1].Value;