0

ファイル名の形式がすべて同じままである複数のデータ ファイルから特定の情報を読み取って抽出しようとしています。ファイルの形式は XXXXXX_XXXXXX_PCPDTB_ODT.datafile で、X はランダムな数字です。

最初の 6 桁で年、月、日を表し、最後の 6 つの X で時、分、秒を表すため、131005_091429_PCPDTB_ODT.datafile は 2013 年、10 月、5 日などとなり、_PCPDTB_ODT.datafile は常に存在します。

ファイルから目的のデータを正常に収集できます (特定のキーワードの後のすべての情報を抽出します。この場合は「#Footer」がキーワードです)。複数の変化する整数を持つファイル?

これが私の試みです(コーディングの経験がほとんどないのでひどいですが)が、4桁しか入力できず、それ以上は入力できないようです。XXXX_PCPDTB_ODT.datafile や 1304_PCPDTB_ODT.datafile などのファイルへのアクセスのみを許可します。

static void Main(string[] args)
    {
        var path = @"C:\Users\#####\Desktop\";
        var ext = "_PCPDTB_ODT.datafile";
        var range = Enumerable.Range(0,9);
        var filePaths = 
                from i1 in range
                from i2 in range
                from i3 in range
                from i4 in range
                let file = path + i1 + i2 + i3 + i4 + ext
                where File.Exists(file)
                select File.ReadLines(file)
                    .SkipWhile(line => !line.Contains("#Footer"))
                    .Skip(1);
        try
        {
            Console.WriteLine(String.Join(Environment.NewLine,filePaths.SelectMany(f => f)));
        }
        catch (Exception e)
        {
            Console.WriteLine("The file could not be read:");
            Console.WriteLine(e.Message);
            Console.Read();
        }
    }

i5、i6、i7などのi値を「_」で追加して、最後の6桁から最初の6桁のスペースを空けようとしましたが、i4を超える大きなi値を使用しても何も起こらないようです。

どんなアイデアでも大いに役立ちます。現時点では私の知識がほとんどないため、私のコーディングはゴミである可能性が高いことに注意してください。

4

4 に答える 4

3

If you're trying to process all of the files in a directory, use Directory.EnumerateFiles.

Forexample:

foreach (var filename in Directory.EnumerateFiles(@"c:\mydata\", "*PCPDTB_ODT.data")
{
    var lines = File.ReadLines(filename)
               .SkipWhile(line => !line.Contains("#Footer"))
               .Skip(1);
    // add the rest of your code . . .
}
于 2013-11-12T16:54:34.600 に答える