2016-07-28 4 views
0

日付の範囲をループするスクリプトを作成しています。各日付が有効な取引日であるかどうかをチェックし、日付ごとに対応するフォルダとファイル名があることを確認します。Zipフォルダとファイル名を返すときに文字が変更される

Quantconnect/Lean Githib repo for classes

私が午前の問題は、私のFile.Exists(dataFile)メソッドがfalseたびにまで来ているということです。 formattedFolderNameに格納されているフォルダ名の文字が変更されているようです。

ターゲットフォルダ自体が圧縮されているので、それが問題なのかな?

対象ファイルのパス:C:\Users\richa_000\Desktop\exporter\forex\fxcm\minute\audjpy\20070401_quote\20070401_audjpy_minute_quote

実際のファイルパス:C:\Users\richa_000\Desktop\exporter\forex\fxcm\minute\audjpy\20070401_quoAe\20070401_au1jp7_0inuAe_quoAe

は、私はそれが20070401_quoteはこれでいじって、フォルダを圧縮することができると思いますが、私はよく分かりません。

Program.cs

using System; 
using System.IO; 
using QuantConnect; 
using QuantConnect.Securities; 
using QuantConnect.Securities.Forex; 

namespace TradingDaysFileChecker 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var startDate = new DateTime(2007, 04, 01); 
      var endDate = new DateTime(2016, 07, 25); 
      var dataFilePath = @"C:\Users\richa_000\Desktop\exporter\forex\fxcm\minute\"; 

      var securityType = SecurityType.Forex; 
      var ticker = TickType.Trade; 
      var marketHoursDatabase = MarketHoursDatabase.FromDataFolder(); 
      var market = Market.FXCM; 
      var symbol = Symbol.Create(ticker.ToString(), securityType, market); 
      var marketHoursDbEntry = marketHoursDatabase.GetEntry(symbol.ID.Market, symbol.Value, symbol.ID.SecurityType); 

      var exchange = new ForexExchange(marketHoursDbEntry.ExchangeHours); 
      var validTradingDays = new DateHandler(startDate, endDate, dataFilePath).IterateOverDateRange(exchange); 

      var forexSecuritiesFolders = Directory.GetDirectories(dataFilePath); 

       foreach (var validDay in validTradingDays) 
       { 
        foreach (var forexSecurity in forexSecuritiesFolders) 
        { 
         var securityName = new DirectoryInfo(forexSecurity).Name.ToString(); 
         var formattedFolderName = validDay.ToString("yyyyMMdd_quote"); 
         var formattedFileName = validDay.ToString($"yyyyMMdd_{securityName}_minute_quote"); 

         var dataFile = dataFilePath + securityName + @"\" + formattedFolderName + @"\" + formattedFileName; 

         if (!File.Exists(dataFile)) 
         { 
          Console.WriteLine(dataFile); 
          Console.ReadLine(); // Stopping after the first run while troubleshooting 
         } 
        } 
       } 
       Console.ReadLine(); 
     } 
    } 
} 

DateHandler.cs

using System; 
using System.Collections.Generic; 
using QuantConnect.Securities.Forex; 

namespace TradingDaysFileChecker 
{ 
    public class DateHandler 
    { 
     private DateTime _startDate; 
     private DateTime _endDate; 

     public DateHandler(DateTime startDate, DateTime endDate, string filePath) 
     { 
      _startDate = startDate; 
      _endDate = endDate; 
     } 

     public IEnumerable<DateTime> IterateOverDateRange(ForexExchange exchange) 
     { 
      for (var day = _startDate.Date; day.Date <= _endDate.Date; day = day.AddDays(1)) 
       if (exchange.IsOpenDuringBar(day.Date, day.Date.AddDays(1), false)) 
       { 
        yield return day; 
       } 
     } 
    } 
} 
+0

はあなたの\をエスケープの代わりに、逐語的文字列を使用してみましたか? @ "\"の代わりに "\\"ですか? –

+0

@EricWalkerはい私は、同じ結果を得ています –

答えて

1

[OK]を、それはあなたがDateTimeオブジェクトからあなたのフォーマットされた名前を構築している方法です。 .ToString()を呼び出すと、特別な書式設定文字が検索されるため、任意のリテラルテキストにanyを含めることはできません。 't'は子午線の書式設定文字(AM/PMですが、単一の 't'はAまたはPを与えます)と同じものを 'm'で置き換えたので、あなたの 't'はAに変換されています。そのDateTimeオブジェクトの分の1桁。

これを試してみてください:

   var formattedFolderName = validDay.ToString("yyyyMMdd") + "_quote"; 
       var formattedFileName = validDay.ToString($"yyyyMMdd") + securityName + "_minute_quote"; 
+0

ああ、もちろんです。その書式を完全に見落とした。 ありがとう! –

関連する問題