我开始编写一个下载程序..但我想将需要提取的文件,必需文件或选项放在列表中供以后下载参考。
输入的样本字符串将是这样的:
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
但我不知道如何去做这件事。 下载程序将使用这些列表下载外部应用程序所需的文件。
答案 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)));
}
}