【问题标题】:how to extract the part of filename如何提取文件名的一部分
【发布时间】:2017-02-20 20:53:28
【问题描述】:

我在下面的模式中有一个文件名,我想提取文件的中间部分。(即 20170217154436)。如何在 c#(或脚本任务)中执行此操作?

20170123-100046_20170217154436_A20170217210502

感谢任何帮助。

【问题讨论】:

  • 它总是有这种格式吗?

标签: c# visual-studio ssis


【解决方案1】:

您可以使用正则表达式,但我认为您也可以这样进行:

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

【讨论】:

    【解决方案2】:

    您可以使用 Regex 获取两个字符之间的 s 字符串:__

    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);
    

    【讨论】:

      【解决方案3】:

      这完全取决于您使用的文件名格式的一致性。我假设,给定您的示例 ########-######_##############_@############## 是您的文件名格式。

      在你的情况下,这应该是合适的并且避免使用数组。

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

      这在第 0 个元素和下划线之前的最后一个字符的索引之间获取一个子字符串。

      【讨论】:

        【解决方案4】:

        如上所述,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 部分吗?如果您发现更多或更少的分隔符会发生什么?这个字符是否可以在一个值字符内。不过,如何处理潜在的误报或误报将由您决定。

        【讨论】:

          【解决方案5】:

          感谢您的所有回复。 我尝试了类似下面的方法,它奏效了。

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

          这给了我“20170217154436”。

          【讨论】:

            猜你喜欢
            • 2019-10-28
            • 1970-01-01
            • 2013-08-07
            • 1970-01-01
            • 1970-01-01
            • 2017-06-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多