获取文件名的一部分 C#

3

我有一个文件名为 dayhappy_02_02345.csv

如何将其中的 0202345 提取出来并存入变量中,以便传递给函数?

使用 c# 语言。

我已经查看了 GetFileName,但它只能获取文件名、扩展名或完整文件名。

谢谢!

Ste

3个回答

5

针对特定的文件名,

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

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

好的,但这是一个特殊情况,仅适用于此类型的文件名


我认为你的答案可能有效,但是我正在使用一个Dts.Variable,文件名及其扩展名位于变量中。这样会行吗?你能否简单地替换字符串sData = Dts.Variables["filenameVariable"].Value。 感谢您的快速回复。 - Steven
当然可以。此外,您必须在此代码中插入一些验证,这在上面的示例中没有包含。 - Shai
我目前有以下代码: 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
抱歉,我太蠢了。我漏掉了一个括号。哈哈 - Steven

4
获取文件名,正如你已经想到的那样,然后使用 String.Split() 来获取单独的部分。

我建议不要使用字符串方法,因为格式的更改将迫使您更改代码,而使用正则表达式,您可以将字符串作为配置设置,并且它更加灵活和强大。 - Mr. TA
1
@Mr.TA - 没错。我总体上同意,但在这个特定的例子中,String.Split就足够了。这是主观的,但我喜欢更简洁、更简单的代码,如果可能的话。此外,这显然是一个非常新的开发者,所以我给出了最简单的答案。学习正则表达式是必须要做的事情,但他现在需要吗?我想先从小步开始再慢慢提高。但是,总的来说,我确实同意你的观点。 - David
文件名一直在变,但扩展名不变,同时我有一个存储在dts变量中的文件。使用正则表达式是最好的方法吗? - Steven
根据其他答案,分割似乎更受欢迎,我又有什么资格反驳人民的选择呢 :) - Mr. TA
@Steven "文件名一直在变" - 意思是它的格式一直在变化? - Mr. TA
感谢您的所有帮助,我确实开始学习C#,所以非常感谢您的帮助。我只有几天时间接触它,所以目前对这门语言还不太熟悉。不过,我正在使用它与SSIS一起使用,希望能够快速掌握它。 - Steven

3

您需要使用正则表达式:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接