若文件名包含某个数字,请将其放入列表中

本文关键字:列表 包含某 文件名 数字 | 更新日期: 2023-09-27 18:01:09

我正在开始编写下载程序。。但我想把需要提取的文件、必需的文件或选项放在一个列表中,供下载者稍后参考。

输入到其中的样本字符串如下所示:

file0.txt:0 file1.txt:0 file2.txt:1 file3.txt:2 file4.txt:2 file5.txt:2

我想做的是得到这样的输出:

提取:file0.txt file1.txt

必需:file2.txt

可选:file3.txt file4.txt,file5.txt

但我不知道该怎么做。下载程序将使用这些列表下载外部应用程序需要的文件。

若文件名包含某个数字,请将其放入列表中

我假设每个文件名后面的数字应该指示它们是什么类型的文件?

现在你肯定应该尝试自己解决这个问题,因为这就是你学习的方式,但这里有一个相当优雅的LINQ解决方案,它可以创建与你发布的示例相同的输出。

// Define this in your class
enum FileType : byte
{
    Extract = 0,
    Required = 1,
    Optional = 2,
}
static void Main(string[] args)
{
    string input = "file0.txt:0 file1.txt:0 file2.txt:1 file3.txt:2 file4.txt:2 file5.txt:2";
    // create list of files
    var list = input.Split(' ').Select(file =>
    {
        var spl = file.Split(':');
        var type = (FileType)Enum.Parse(typeof(FileType), spl[1]);
        return new { Name = spl[0], Type = type };
    }).ToArray();
    // group by type and write to console
    var group = list.GroupBy(l => l.Type);
    foreach (var g in group)
    {
        Console.WriteLine("{0}: {1}", g.Key, String.Join(",", g.Select(a => a.Name)));
    }
}

您可以对输入的字符串执行两次字符串拆分操作。

var input = "file0.txt:0 file1.txt:0 file2.txt:1 file3.txt:2 file4.txt:2 file5.txt:2";
// gets each pairing
var filePairs = input.split(new[] {' '});
foreach(var filePair in filePairs)
{
  var fileInfo = filePair.split(new[] {';'}); // [file0.txt, 0]
  var fileName = fileInfo[0]; // file0.txt
  var fileKeep = fileInfo[1]; // 0, 1, or 2.
}

从这里,您可以使用foreach循环中的信息执行您想要的操作。您可以将信息添加到列表中进行存储。