2010-05-29 37 views
2

好的,我有txt文件,我解析並保存到一個sql數據庫。名稱格式類似於C#解析txt文件IF名稱格式是需要的格式

R306025COMP_272A4075_20090929_080159.txt 

然而,也有少數(出數以千計的文件),與名字被格式化不同(如測試生成的特別文件),例如

R306025COMP_SU2_TestBottom_20090915_101441.txt 

這對我造成問題的原因是我使用Split('_')[1,2,etc]來提取R號碼,272A4075部分和20090929(日期)部分。當應用程序遇到奇怪命名的文件時,它會失敗,因爲它試圖將'TestBottom'解析爲日期並插入'SU2'而不是272號碼。

基本上我希望應用程序能夠識別出如果文件的名稱沒有像我的第一個示例那樣格式化,請跳過它。有什麼建議?

回答

1
foreach (var fileName in fileNames) { 
    if (fileName.Count(c => c == '_') != 3) continue; 
    // etc... 
} 
2

可你只是做了基於分割以下幾點:

string[] parsedLine = yourData.Split('_'); 
string theR = parsedLine[0]; 
string theCode = parsedLine[1]; 
string theDatePart = (parsedLine.Length > 4) ? parsedLine[3] : parsedLine[2]; 

如果你希望它只是跳過壞線只是做:

string[] parsedLine = yourData.Split('_'); 
if (parsedLine.Length > 4) continue; // assuming your looping 

需要看到一些代碼如果你想要更好的解決方案,因爲我不確定你是如何獲取線路數據的。

+0

@jakesankey您應該只做一次分割並存儲它,然後在嘗試寫入數據庫之前檢查數據是否有效。做這一切沒有驗證內聯似乎是你的問題。 – Kelsey 2010-05-29 02:22:28

+0

與此問題將是如果名稱更改爲類似R306025COMP_TestBottom_20090915_101441_SU2.txt。然後會發生什麼? – 2010-05-29 21:21:34

1

使用文件名正則表達式匹配,這意味着它會在文件名之間是否匹配正則表達式(這樣你就不必關心什麼地方字符串中這樣的情況,以及確切的結果被提取出來給你)。然後,如果您未能找到所需的匹配項,請跳過該文件(不會生成異常,您只需在Matches對象中找不到任何異常)。

我會給你做一個樣本,但我現在沒有VS方便。正則表達式的東西存在於System.Text.RegularExpressions命名空間中。

+0

我很想看到這個例子! – 2010-05-29 21:01:18