【问题标题】:Resolving File Name Permutations解析文件名排列
【发布时间】:2015-05-21 14:17:20
【问题描述】:

我正在尝试将 .CSV 文件导入我的数据库,该文件是从图像管理系统导出的表。该系统允许最终用户拍摄图像并(有时)将它们分成多个图像。此报告中有一个列表示我正在跟踪的图像的文件名。如果项目在图像管理系统中被拆分,则文件名会在报告中收到下划线(“_”)。不保留以前的文件名。项目可能存在于 CSV 中的方式如下所示:

Report 1 @ 8:00AM:  ABC.PNG

Report 2 @ 8:30AM:  ABC_1.PNG
                    ABC_2.PNG 

 Report 3 @ 9:00AM: ABC_1_1.PNG 
                    ABC_1_2.PNG
                    ABC_2_1.PNG
                    ABC_2_2.PNG 

Report 4 @ 9:30AM   ABC_1_1_1.PNG
                    ABC_1_1_2.PNG
                    ABC_1_2.PNG
                    ABC_2_1.PNG
                    ABC_2_2.PNG 

我将每个文件名导入到它自己的记录中。当一个项目被拆分时,我想识别以前的版本并更新原始记录,然后将新的拆分记录添加到我的数据库中。了解项目是否被拆分的关键是找到下划线(“_”)。

我不确定应该如何重新创建以前的子名称,我必须测试文件名的每次迭代以查看它是否存在。我的问题是解释文件名的当前状态并重建所有以前的可能性。我不需要原始名称,只需要第一个可能的拆分名称,直到当前名称。下面的代码显示了我的意思,但我不知道如何干净地做到这一点。

String[] splitName = theStringToSplit.Split('_');

for (int i = 1; i < splitName.Length - 1; i++)
{
    //should concat everything between 0 and i, not just 0 and I
    //not sure if this is the best way or what I should do

    MessageBox.Show(splitName[0] + "_" + splitName[i] + ".PNG");
}

【问题讨论】:

    标签: c# permutation


    【解决方案1】:

    你正在寻找的东西是字符串的一部分。 所以string.Join() 可能会帮助您将数组加入分隔字符串: 它还包含参数起始索引和要使用的项目数。

    string[] s = new string[] { "2", "a", "b" };
    string joined = string.Join("_", s, 0 ,3);
    
    // joined will be "2_a_b"   
    

    也许你使用了错误的工具来解决你的问题。如果您想保留最后一个“_”,您可能需要使用LastIndexOf() 甚至正则表达式。无论如何:你不应该不必要地撕掉名字并重新粘上它们。如果完成,请使其保持文化不变而不是特定于文化(“-”或“I”的小写字母可能有不同的解释。 字符串 fnwithExt = "Abc_12_23.png";

            string fn = System.IO.Path.GetFileName(fnwithExt);
            int indexOf = fn.LastIndexOf('_');
            string part1 = fn.Substring(0, indexOf-1);
            string part2 = fn.Substring(indexOf+1);
            string part3 = System.IO.Path.GetExtension(fnwithExt);
    
            string original = System.IO.Path.ChangeExtension(part1 + "_"+ part2, part3);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-15
      • 2018-03-30
      • 1970-01-01
      相关资源
      最近更新 更多