public static IStream <TOut> CrossApplyTextFile <TIn, TOut>(this IStream <TIn> stream, string name, FlatFileDefinition <TOut> args, Func <TIn, string> filePathSelector, bool noParallelisation = false)
        {
            var valuesProvider = new FlatFileValuesProvider <TIn, TOut, TOut>(new FlatFileValuesProviderArgs <TIn, TOut, TOut>()
            {
                DataStreamSelector = i => File.OpenRead(filePathSelector(i)),
                Mapping            = args,
                ResultSelector     = (i, o) => o
            });

            return(stream.CrossApply <TIn, TOut>(name, valuesProvider.PushValues, noParallelisation));
        }
        public static IStream <TOut> CrossApplyTextFile <TParsed, TOut>(this IStream <string> stream, string name, FlatFileDefinition <TParsed> args, Func <string, TParsed, TOut> resultSelector, bool noParallelisation = false)
        {
            var valuesProvider = new FlatFileValuesProvider <string, TParsed, TOut>(new FlatFileValuesProviderArgs <string, TParsed, TOut>()
            {
                DataStreamSelector = i => File.OpenRead(i),
                Mapping            = args,
                ResultSelector     = resultSelector
            });

            return(stream.CrossApply <string, TOut>(name, valuesProvider.PushValues, noParallelisation));
        }
        public static IStream <TOut> CrossApplyTextFile <TOut>(this IStream <Stream> stream, string name, FlatFileDefinition <TOut> args, bool noParallelisation = false)
        {
            var valuesProvider = new FlatFileValuesProvider <Stream, TOut, TOut>(new FlatFileValuesProviderArgs <Stream, TOut, TOut>()
            {
                DataStreamSelector = i => i,
                Mapping            = args,
                ResultSelector     = (i, o) => o
            });

            return(stream.CrossApply <Stream, TOut>(name, valuesProvider.PushValues, noParallelisation));
        }