Example #1
0
 private static void DefineProcess(ISingleStream <string> contextStream)
 {
     contextStream
     .CrossApplyFolderFiles("list all required files", "*.zip", true)
     .CrossApplyZipFiles("extract files from zip", "*.csv")
     .CrossApplyTextFile("parse file", FlatFileDefinition.Create(i => new Person
     {
         Email       = i.ToColumn("email"),
         FirstName   = i.ToColumn("first name"),
         LastName    = i.ToColumn("last name"),
         DateOfBirth = i.ToDateColumn("date of birth", "yyyy-MM-dd"),
         Reputation  = i.ToNumberColumn <int?>("reputation", ".")
     }).IsColumnSeparated(','))
     .Distinct("exclude duplicates based on the Email", i => i.Email)
     .SqlServerSave("upsert using Email as key and ignore the Id", o => o
                    .ToTable("dbo.Person")
                    .SeekOn(p => p.Email)
                    .DoNotSave(p => p.Id))
     .Select("define row to report", i => new { i.Email, i.Id })
     .ToTextFileValue("write summary to file", "report.csv", FlatFileDefinition.Create(i => new
     {
         Email = i.ToColumn("Email"),
         Id    = i.ToNumberColumn <int>("new or existing Id", ".")
     }).IsColumnSeparated(','))
     .WriteToFile("save log file", i => i.Name);
 }
Example #2
0
 static void Main(string[] args)
 {
     StreamProcessRunner.CreateAndExecuteAsync(
         new
     {
         InputFilePath  = Path.Combine(args[0], "simpleinputfile.csv"),
         OutputFilePath = Path.Combine(args[0], "simpleoutputfile.csv")
     },
         rootStream =>
     {
         var outputFileS = rootStream.Select("open output file", i => (Stream)File.OpenWrite(i.OutputFilePath));
         rootStream
         .CrossApplyTextFile("read input file",
                             FlatFileDefinition.Create(i => new
         {
             Id           = i.ToColumn <int>("#"),
             Name         = i.ToColumn <string>("Label"),
             ValueType    = i.ToColumn <string>("Value"),
             CategoryCode = i.ToColumn <string>("Category")
         }).IsColumnSeparated('\t'),
                             i => i.InputFilePath)
         .ThroughAction("Write input file to console",
                        i => Console.WriteLine($"{i.Id}->{i.Name}->{i.CategoryCode}->{i.ValueType}"))
         .Pivot("group and count",
                i => i.CategoryCode,
                i => new
         {
             Count  = AggregationOperators.Count(),
             CountA = AggregationOperators.Count().For(i.ValueType == "a"),
             CountB = AggregationOperators.Count().For(i.ValueType == "b"),
         })
         .Select("create output row",
                 i => new
         {
             CategoryCode = i.Key,
             i.Aggregation.Count,
             i.Aggregation.CountA,
             i.Aggregation.CountB
         })
         .Sort("sort output values",
               i => new { i.CategoryCode })
         .ThroughTextFile("write to text file",
                          outputFileS,
                          FlatFileDefinition.Create(i => new
         {
             CategoryCode = i.ToColumn <string>("MyCategoryCode"),
             Count        = i.ToColumn <int>("Count"),
             CountA       = i.ToColumn <int>("CountA"),
             CountB       = i.ToColumn <int>("CountB")
         }));
     }).Wait();
     Console.WriteLine("Press a key...");
     Console.ReadKey();
 }
Example #3
0
        private void Tmp(ISingleStream <int> processContextStream)
        {
            var efaNavFileDefinition = FlatFileDefinition.Create(i => new
            {
                ShareCode                 = i.ToColumn <string>("Share_code"),
                SubFundCode               = i.ToColumn <string>("Sub-fund_code"),
                IsinCode                  = i.ToColumn <string>("Isin_code"),
                ShareCurrency             = i.ToColumn <string>("CCY_NAV_share"),
                NavDate                   = i.ToDateColumn("Valuation_date", "dd/MM/yyyy"),
                NavPerShare               = i.ToNumberColumn <double>("NAV_share", "."),
                NumberOfSharesOutstanding = i.ToNumberColumn <double>("Numbre_of_Shares_outstanding", "."),
                TotalNetAsset             = i.ToNumberColumn <double>("Total_Net_Assets", "."),
                NetAssetShareType         = i.ToNumberColumn <double>("Net_assets_share_type", "."),
            }).IsColumnSeparated(',');

            var fileStream = processContextStream
                             .CrossApplyFolderFiles($"get local files", i => "/home/stephane/Desktop/zret", "*.csv", false);
            var navFileStream = fileStream
                                .CrossApplyTextFile($"parse nav file", efaNavFileDefinition);

            var managedSubFundStream = processContextStream.EfCoreSelect($"get subfunds from db", (c, i) => c.Set <SubFund>());
        }
Example #4
0
        public static void Import(ISingleStream <string[]> contextStream)
        {
            var portfolioFileStream = contextStream
                                      .FromConnector("Get portfolio files", "PTF")
                                      .CrossApplyTextFile("Parse portfolio file", FlatFileDefinition.Create(i => new
            {
                SicavCode     = i.ToColumn("SicavCode"),
                SicavName     = i.ToColumn("SicavName"),
                SicavType     = i.ToColumn("SicavType"),
                PortfolioCode = i.ToColumn("PortfolioCode"),
                PortfolioName = i.ToColumn("PortfolioName")
            }).IsColumnSeparated(','))
                                      .SetForCorrelation("Correlate portfolio row");

            var positionFileStream = contextStream
                                     .FromConnector("Get position files", "POS")
                                     .CrossApplyTextFile("Parse position file", FlatFileDefinition.Create(i => new
            {
                PortfolioCode = i.ToColumn("PortfolioCode"),
                SecurityCode  = i.ToColumn("SecurityCode"),
                Isin          = i.ToColumn("Isin"),
                SecurityName  = i.ToColumn("SecurityName"),
                SecurityClass = i.ToColumn("SecurityClass"),
                Issuer        = i.ToColumn("Issuer"),
                Date          = i.ToDateColumn("Date", "yyyyMMdd"),
                Value         = i.ToNumberColumn <decimal>("Value", "."),
            }).IsColumnSeparated(','))
                                     .SetForCorrelation("Correlate position row");

            var sicavStream = portfolioFileStream
                              .Distinct("Distinct sicav", i => i.SicavCode, true)
                              .Select("Create sicav", i => new DataAccess.Sicav
            {
                InternalCode = i.SicavCode,
                Name         = i.SicavName,
                Type         = i.SicavType == "UCITS" ? DataAccess.SicavType.UCITS : DataAccess.SicavType.AIFM
            })
                              .EfCoreSave("Save sicav", o => o
                                          .SeekOn(i => i.InternalCode)
                                          .DoNotUpdateIfExists());

            var portfolioStream = portfolioFileStream
                                  .Distinct("Distinct portfolio", i => i.PortfolioCode, true)
                                  .CorrelateToSingle("Get related sicav and create portfolio", sicavStream, (row, sicav) => new DataAccess.Portfolio
            {
                InternalCode = row.PortfolioCode,
                Name         = row.PortfolioName,
                SicavId      = sicav.Id
            })
                                  .EfCoreSave("Save portfolio", o => o
                                              .SeekOn(i => i.InternalCode)
                                              .DoNotUpdateIfExists());

            var compositionStream = positionFileStream
                                    .Distinct("Distinct compositions", i => new { i.PortfolioCode, i.Date }, true)
                                    .Lookup("Get related portfolio and create composition",
                                            portfolioStream,
                                            i => i.PortfolioCode,
                                            i => i.InternalCode,
                                            (row, portfolio) => new DataAccess.Composition
            {
                Date        = row.Date,
                PortfolioId = portfolio.Id
            })
                                    .EfCoreSave("Save composition", o => o
                                                .SeekOn(i => new { i.Date, i.PortfolioId })
                                                .DoNotUpdateIfExists());

            var securityStream = positionFileStream
                                 .Distinct("Distinct securities", i => i.SecurityCode)
                                 .Select("Create security", i =>
            {
                if (string.IsNullOrWhiteSpace(i.SecurityClass))
                {
                    return(new DataAccess.Equity
                    {
                        InternalCode = i.SecurityCode,
                        Name = i.SecurityName,
                        Isin = i.Isin,
                        Issuer = i.Issuer
                    } as DataAccess.Security);
                }
                return(new DataAccess.ShareClass
                {
                    InternalCode = i.SecurityCode,
                    Name = i.SecurityName,
                    Isin = i.Isin,
                    Class = i.SecurityClass
                } as DataAccess.Security);
            })
                                 .EfCoreSave("Save security", o => o
                                             .SeekOn(i => i.Isin)
                                             .AlternativelySeekOn(i => i.InternalCode)
                                             .DoNotUpdateIfExists());

            positionFileStream
            .CorrelateToSingle("Get related security", securityStream, (row, security) => new { Row = row, SecurityId = security.Id })
            .CorrelateToSingle("Get related composition and create position", compositionStream, (row, composition) => new DataAccess.Position
            {
                Value         = row.Row.Value,
                SecurityId    = row.SecurityId,
                CompositionId = composition.Id
            })
            .Distinct("Distinct positions", i => new { i.CompositionId, i.SecurityId }, o => o.ForProperty(i => i.Value, DistinctAggregator.Sum))
            .EfCoreSave("Save position");
        }
Example #5
0
 private static void DefineProcess5(ISingleStream <string> stream)
 {
     stream
     .CrossApply("produce a list of dummy values for ", _ => Enumerable.Range(0, 100).Select(idx => new { Index = idx, Name = $"Index {idx}", CategoryId = idx % 3 }))
     .GroupBy("process per group", i => i.CategoryId, (subStream, firstRow) => subStream
              .Select("create row to save", i => new { i.Index, i.Name })
              .ToTextFileValue("save into csv file", $"fileExport{firstRow?.CategoryId}.csv", FlatFileDefinition.Create(i => new
     {
         Index = i.ToNumberColumn <int>("Idx", "."),
         Name  = i.ToColumn("Title")
     })))
     .WriteToFile("write to folder", i => i.Name);
 }
Example #6
0
        private static void DefineProcess6(ISingleStream <string> stream)
        {
            var streamOfRows = stream
                               .CrossApply("produce a list of dummy values for ", _ => Enumerable.Range(0, 100).Select(idx => new { Index = idx, Name = $"Index {idx}", CategoryId = idx % 3 }));

            var fileStream = streamOfRows
                             .Select("create row to save", i => new { i.Index, i.Name })
                             .ToTextFileValue("save into csv file", $"fileExport.csv", FlatFileDefinition.Create(i => new
            {
                Index = i.ToNumberColumn <int>("Idx", "."),
                Name  = i.ToColumn("Title")
            }).IsColumnSeparated(','));

            fileStream.WriteToFile("write to folder", i => i.Name);
        }