如果文件名包含特定数字,请将其放入列表中

时间:2016-08-07 22:41:21

标签: c#

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

输入的样本字符串将是这样的:

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

但我不知道如何去做这件事。 下载程序将使用这些列表下载外部应用程序所需的文件。

2 个答案:

答案 0 :(得分:0)

你可以做的是对你喂的字符串进行两次字符串拆分操作。

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循环中的信息执行所需操作。您可以将信息添加到列表中进行存储。

答案 1 :(得分:0)

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

现在你肯定应该尝试自己解决这个问题 - 因为这就是你学习的方法,但这是一个相当优雅的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)));
    }
}