2016-08-07 3 views
-2

私はダウンローダーの作成を開始しています..しかし、ダウンローダーが後で参照できるように、抽出する必要があるファイル、 。それに供給されるファイル名に特定の番号が含まれている場合は、ファイル名を入力してください

サンプル文字列は次のようになります:

エキス:file0.txt FILE1私がやりたい

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

何、このような出力を得ることです。 TXT

必須:file5.txt

file3.txtのfile4.txt、:FILE2.TXT

オプション

しかし、私はこれを行う方法について手がかりがありません。 ダウンローダーはこれらのリストを使用して、外部アプリが必要とするファイルをダウンロードします。

+0

どのファイルがどのカテゴリに属する​​かを判断する際に使用するルールについて説明できますか?あなたが投稿したものからは明らかではありません。 – stuartd

+0

@stuartdサフィックス '0'は' 1'が必要で、 '2'はオプションです – TheVillageIdiot

+0

ファイルには:0がリストに含まれていれば抽出リストに入れられます。 – null

答えて

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))); 
    } 
} 
0

あなたができることは、入力した文字列に対して2つの文字列分割操作です。

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ループの中で持っている情報を希望するものを行うことができます。また、情報を保存するためのリストに追加することもできます。

関連する問題