我的排序脚本需要一些帮助。我想排序一些文件。 这就是Name的构造方式:Name#Page#Version 我可以选择名称/类别和页面,但我不知道如何选择最新版本:/ 在这里你可以看到一个例子。
foreach(string files in Directory.GetFiles(path).OrderBy(fi => fi.Length))
{
try
{
filename = Path.GetFileNameWithoutExtension(files);
index = filename.LastIndexOf("#");
index2 = filename.LastIndexOf("#",index-1);
strversion = filename.Substring(index+1);
strpage = filename.Substring(index2+1);
strpage = strpage.Substring(0, strpage.LastIndexOf("#"));
page = Int32.Parse(strpage);
version = Int32.Parse(strversion);
Console.WriteLine("Page: "+page);
Console.WriteLine("Version: "+version);
if (filename.Contains("SMA"))
{
if (page == 1)
{
Console.WriteLine(filename);
}
}
}
catch (ArgumentOutOfRangeException e)
{
Console.WriteLine(e.Message);
}
}
答案 0 :(得分:5)
您过度复杂化了,您可以将字符串拆分为#
并从给定的数组中获取您想要的内容:
var fileName = "SMA#1#2";
var parts = fileName.Split('#');
var name = parts[0];
var page = parts[1];
var version = parts[2];
修改强>
至于为每个version
获取最后一个page
,您可能最好为您的文件创建某种类,然后按页分组,然后按版本排序,以及然后选择第一个:
public class Program
{
public static void Main()
{
var fileNames = new[] { "SMA#1#1", "SMA#1#2", "SMA#1#3", "SMA#2#1", "SMA#2#3" };
var files = (from fileName in fileNames select fileName.Split('#') into parts let name = parts[0] let page = Int32.Parse(parts[1]) let version = Int32.Parse(parts[2]) select new MyFile(name, page, version)).ToList();
var grouped = files.GroupBy(x => x.Page).ToList();
foreach (var group in grouped)
{
var ordered = group.OrderByDescending(x => x.Version);
Console.WriteLine($"Page {group.Key} highest version: {ordered.First().Version}");
}
}
}
public class MyFile
{
public string Name { get; set; }
public int Page { get; set; }
public int Version { get; set; }
public MyFile(string name, int page, int version)
{
Name = name;
Page = page;
Version = version;
}
}
答案 1 :(得分:1)
如果我正确理解您的要求,您需要
你可以使用LINQ来完成声明:
while ( !preg_match('/[0-9]/', $rand) && !preg_match('[a-z]',$rand )) { $rand = substr(md5(microtime()),rand(0,26),5) };
答案 2 :(得分:0)
int lastIndex = filename.LastIndexOf("#");
string version = fileName.SubString(lastIndex, fileName.Length - lastIndex);
这就是你要找的东西吗?