예제 #1
0
파일: Program.cs 프로젝트: fisica3/CS3
        static void Main(string[] args)
        {
            foreach (int i in new NaturalNumbersSequence())
                Console.WriteLine(i);

            //foreach (int i in new PrimeSequence2())
            //{
            //    Console.WriteLine(i);
            //    System.Threading.Thread.Sleep(1000);
            //}

            //BigIntegerPrimes p = new BigIntegerPrimes(
            //new BigInteger(1),
            //BigInteger.Parse("1000000000000000000000"));
            //foreach (var x in p)
            //    Console.WriteLine(x);

            // enumeración de ficheros
            string[] files = System.IO.Directory.GetFiles(
                "C:\\Users\\Octavio\\Pictures", "*.jpg",
                SearchOption.AllDirectories);
            foreach (string s in files)
                Console.WriteLine(s);

               FileSystemEnumerator fse =
                new FileSystemEnumerator("C:\\Users\\Octavio\\Pictures",
                    "*.jpg", true);
            foreach (FileInfo fi in fse.Matches())
                Console.WriteLine(fi.FullName);

            Console.ReadLine();
        }
예제 #2
0
파일: Extensiones.cs 프로젝트: fisica3/CS3
 public static IEnumerable<FileInfo> GetFileInfos(
     this DirectoryInfo dir,
     string fileTypesToMatch, 
     bool includeSubDirs)
 {
     using (FileSystemEnumerator fse =
          new FileSystemEnumerator(
              dir.FullName,
              fileTypesToMatch,
              includeSubDirs))
     {
         foreach (FileInfo fi in fse.Matches())
             yield return fi;
     }
 }
예제 #3
0
 void ProcessFiles(string msg)
 {
     lock (_locker) if (_inBatch) return;
     //Open the folder and keep going until there are any files left
     //Skip any locked files
     try {
         if (LockPath(_inputFolder)) {
             Log.Debug("{0} ({1}\\{2})", msg, _inputFolder, _info.Filter);
             StartBatch();
             FileSystemEnumerator fse = new FileSystemEnumerator(_inputFolder, _info.Filter ?? "*", includeSubDirs: false);
             int i = 0;
             foreach (FileInfo f in fse.Matches()) {
                 if (!IsLocked(f.FullName)) {
                     EnqueueFile(f.FullName, f.Name);
                     ++i;
                 }
             }
             Log.Debug("{0} - enqueued {1} files", msg, i);
             StopBatch();
             UnlockPath(_inputFolder);
         }
     } catch (Exception e) {
         Log.Error("Exception processing files. ERROR: {0}", e.ToString().Replace("\n", " "));
     }
 }
예제 #4
0
파일: Program.cs 프로젝트: fisica3/CS3
        static void Main(string[] args)
        {
            // colección de objetos en memoria
            List<Persona> Generación = new List<Persona> {
                new Persona { Nombre = "Diana",
                    Sexo = SexoPersona.Mujer,
                    FechaNac = new DateTime(1996, 2, 4),
                    CodigoPaisNac = "ES" },
                new Persona { Nombre = "Dennis",
                    Sexo = SexoPersona.Varón,
                    FechaNac = new DateTime(1983, 12, 27),
                    CodigoPaisNac = "RU" },
                new Persona { Nombre = "Claudia",
                    Sexo = SexoPersona.Mujer,
                    FechaNac = new DateTime(1989, 7, 26),
                    CodigoPaisNac = "CU" },
                new Persona { Nombre = "Jennifer",
                    Sexo = SexoPersona.Mujer,
                    FechaNac = new DateTime(1982, 8, 12),
                    CodigoPaisNac = "CU" },
                //new Persona { Nombre = "JOHN DOE",
                //    Sexo = SexoPersona.Varón,
                //    FechaNac = new DateTime(0001, 1, 1),
                //    CodigoPaisNac = "?" },
            };

            List<Pais> Paises = new List<Pais> {
                new Pais("ES", "ESPAÑA"),
                new Pais("CU", "CUBA"),
                new Pais("RU", "RUSIA"),
                new Pais("US", "ESTADOS UNIDOS")
            };

            var mayores20 = from h in Generación
                            where h.Edad > 20
                            orderby h.Nombre
                            select new { Nombre = h.Nombre.ToUpper(), Edad = h.Edad };

            //var mayores20	= Generación
            //    .Where(h => h.Edad > 20)
            //    .OrderBy(h => h.Nombre)
            //    .Select(h => new { Nombre = h.Nombre.ToUpper(), Edad = h.Edad });

            //var tmp1 = Generación.Where(h => h.Edad > 20);
            //var tmp2 = tmp1.OrderBy(h => h.Nombre);
            //var mayores20 = tmp2.Select(h => new { Nombre = h.Nombre.ToUpper(), Edad = h.Edad });

            foreach (var h in mayores20)
                Console.WriteLine(h.Nombre + " (" + h.Edad + ")");

            int[] arr1 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            // lo siguiente produce 81, 49, 25, 9, 1
            var inversa =
                (from n in arr1 where n % 2 == 1 select n * n).Reverse();
            foreach (var x in inversa)
                Console.WriteLine(x);

            string s = "AURELIO TRABAJA EN MICROSOFT";

            // produce en orden alfabético las vocales de la cadena 's'
            var s1 = from c in s
                     where "AEIOU".IndexOf(c) >= 0
                     orderby c
                     select c;
            ObjectDumper.Write(s1);

            // cuenta los espacios en la cadena 's'
            int n1 = (from c in s
                      where c == ' '
                      select c).Count();
            ObjectDumper.Write(n1);

            // palabras diferentes en una oración
            var n2 = (from w in s.Split(new char[] { ' ', '\t', '\n' },
                         StringSplitOptions.RemoveEmptyEntries)
                      orderby w.ToLower()
                      select w.ToLower()).Distinct();
            ObjectDumper.Write(n2);

            // produce una secuencia con los pares en arr1
            var pares = from n in arr1
                        where n % 2 == 0
                        select n;
            // también pudo ser:
            var pares2 = arr1.Where(n => n % 2 == 0);

            // produce la suma de los números de la secuencia
            int suma = arr1.Sum();
            // lo mismo que:
            int suma2 = (from n in arr1 select n).Sum();

            // produce los números de la secuencia, incrementados en 1
            var otra = from n in arr1
                       select n + 1;
            // lo mismo que:
            var otra2 = arr1.Select(n => n + 1);

            string[] ciudades = { "HAVANA", "MADRID", "NEW YORK", "MIAMI", "SEATTLE" };
            // ciudades con más de seis letras,
            // en orden alfabético
            var c7 = from c in ciudades
                     where c.Length > 6
                     orderby c
                     select c;

            var meses = new TipoMeses[] {
                new TipoMeses { Nombre = "Enero", CantidadDias = 31 },
                new TipoMeses { Nombre = "Febrero", CantidadDias = 28 },
                new TipoMeses { Nombre = "Marzo", CantidadDias = 31 },
                new TipoMeses { Nombre = "Abril", CantidadDias = 31 },
                new TipoMeses { Nombre = "Mayo", CantidadDias = 31 },
                new TipoMeses { Nombre = "Junio", CantidadDias = 31 },
                new TipoMeses { Nombre = "Julio", CantidadDias = 31 },
                new TipoMeses { Nombre = "Agosto", CantidadDias = 31 },
                new TipoMeses { Nombre = "Septiembre", CantidadDias = 31 },
                new TipoMeses { Nombre = "Octubre", CantidadDias = 31 },
                new TipoMeses { Nombre = "Noviembre", CantidadDias = 31 },
                new TipoMeses { Nombre = "Diciembre", CantidadDias = 31 },
            };

            var meses31 = from m in meses
                          where m.CantidadDias == 31
                          select m.Nombre;

            // *** PERSONAS

            // nombres que empiezan por 'D'
            var hijos = from h in Generación
                        where h.Nombre.StartsWith("D")
                        select h.Nombre;
            ObjectDumper.Write(hijos);

            // lista ordenada, primero por sexos
            // luego por edad en orden ascendente
            var orden = from h in Generación
                        orderby h.Sexo, h.Edad descending
                        select h;
            ObjectDumper.Write(orden);

            // ** EVALUACION DIFERIDA

            Console.WriteLine("Primera evaluación");
            ObjectDumper.Write(hijos);

            // se modifica la colección subyacente
            Generación[0].Nombre = "Elisa";

            Console.WriteLine("Segunda evaluación");
            ObjectDumper.Write(hijos);

            // ** EVALUACION INMEDIATA

            var hijos_cache = hijos.ToList();

            Console.WriteLine("Primera evaluación");
            ObjectDumper.Write(hijos_cache);

            // se modifica la colección subyacente
            Generación[0].Nombre = "Diana";

            Console.WriteLine("Segunda evaluación");
            ObjectDumper.Write(hijos_cache);

            /* PRODUCTO CARTESIANO */
            var pc1 = from pa in Paises
                      from pe in Generación
                      select new { pa.Nombre, Nombre2 = pe.Nombre };
            ObjectDumper.Write(pc1);

            var pc2 = from p1 in Generación
                      from p2 in Generación
                      where p1.Sexo == SexoPersona.Varón && p2.Sexo == SexoPersona.Mujer
                      select new { El = p1.Nombre, Ella = p2.Nombre };
            ObjectDumper.Write(pc2);

            var pc3 = from p1 in Generación
                      where p1.Sexo == SexoPersona.Varón
                      from p2 in Generación
                      where p2.Sexo == SexoPersona.Mujer
                      select new { El = p1.Nombre, Ella = p2.Nombre };
            ObjectDumper.Write(pc3);

            /* ENCUENTRO */
            var enc1 = from pa in Paises
                       join pe in Generación on pa.Codigo equals pe.CodigoPaisNac
                       orderby pa.Nombre
                       select new { pa.Nombre, Nombre2 = pe.Nombre };
            ObjectDumper.Write(enc1);

            var pc4 = from pa in Paises
                      from pe in Generación
                      where pa.Codigo == pe.CodigoPaisNac
                      select new { pa.Nombre, Nombre2 = pe.Nombre };
            ObjectDumper.Write(pc2);

            /* GRUPOS */
            var gruposSexo =
                from h in Generación
                group new { h.Nombre, h.Edad } by h.Sexo;
            ObjectDumper.Write(gruposSexo, 2);

            var gruposSexo2 =
                Generación.GroupBy(h => h.Sexo,
                    h => new { h.Nombre, h.Edad });
            ObjectDumper.Write(gruposSexo2, 2);

            foreach (var hh in gruposSexo)
            {
                // el valor de la clave
                Console.WriteLine(hh.Key);
                // los elementos del grupo
                foreach (var hhh in hh)
                    Console.WriteLine(" - " + hhh.Nombre + " (" + hhh.Edad + ")");
            }

            Console.WriteLine("GRUPOS POR PAISES");
            var gruposPaises =
                from pa in Paises
                join pe in Generación on pa.Codigo equals pe.CodigoPaisNac
                group new { pe.Nombre, pe.Edad } by pa.Nombre;

            var gruposPaises2 =
                (from pa in Paises
                 join pe in Generación on pa.Codigo equals pe.CodigoPaisNac
                 group new { pe.Nombre, pe.Edad } by pa.Nombre).
                OrderBy(g => g.Key);

            var gruposPaises3 =
                (from pa in Paises
                 join pe in Generación on pa.Codigo equals pe.CodigoPaisNac
                 group new { pe.Nombre, pe.Edad } by pa.Nombre).
                OrderByDescending(g => g.Count());

            var gruposPaises4 =
                from pa in Paises
                join pe in Generación on pa.Codigo equals pe.CodigoPaisNac
                group new { pe.Nombre, pe.Edad } by pa.Nombre
                into tmp
                orderby tmp.Key
                select tmp;

            var resumenPaises =
                from pa in Paises
                join pe in Generación on pa.Codigo equals pe.CodigoPaisNac
                group new { pe.Nombre, pe.Edad } by pa.Nombre
                into tmp
                orderby tmp.Count() descending
                select new { Pais = tmp.Key, Cantidad = tmp.Count() };

            var resumenPaises2 =
                from pa in Paises
                orderby pa.Nombre
                join pe in Generación on pa.Codigo equals pe.CodigoPaisNac
                into gp
                select new { Pais = pa.Nombre, Cantidad = gp.Count() };
            ObjectDumper.Write(resumenPaises2);

            var resumenPaises3 =
                Paises.OrderBy(pa => pa.Nombre).
                GroupJoin(Generación,
                    pa => pa.Codigo,
                    pe => pe.CodigoPaisNac,
                    (p, gp) => new { Pais = p.Nombre, Cantidad = gp.Count() });

            foreach (var hh in gruposPaises4)
            {
                // el valor de la clave
                Console.WriteLine(hh.Key);
                // los elementos del grupo
                foreach (var hhh in hh)
                    Console.WriteLine(" - " + hhh.Nombre +
                                      " (" + hhh.Edad + ")");
            }

            var into1 = from h in Generación
                        orderby h.Nombre
                        select new
                               {
                                   Nombre = h.Nombre,
                                   CodPais = h.CodigoPaisNac
                               }
                        into tmp
                        from p in Paises
                        where tmp.CodPais == p.Codigo
                        select tmp.Nombre + " - " + p.Nombre;

            var into2 = from tmp in
                            (
                            from h in Generación
                            orderby h.Nombre
                            select new
                                   {
                                       Nombre = h.Nombre,
                                       CodPais = h.CodigoPaisNac
                                   }
                            )
                        from p in Paises
                        where tmp.CodPais == p.Codigo
                        select tmp.Nombre + " - " + p.Nombre;

            /*LET */
            Console.WriteLine("LET");
            var let1 = from p in Generación
                       let media = Generación.Average(pp => pp.Edad)
                       where p.Edad >= media
                       select p.Nombre;
            ObjectDumper.Write(let1);

            var let2 = from p in Generación
                       let media = (from p2 in Generación
                                    where p2.CodigoPaisNac == p.CodigoPaisNac
                                    select p2).Average(pp => pp.Edad)
                       where p.Edad >= media
                       select p.Nombre;
            ObjectDumper.Write(let2);

            int[] numeros = { 27, 43, 52, 87, 99, 45, 72, 29, 61, 58, 94 };

            var grupos = from n in numeros
                         let terminacion = n % 10
                         orderby terminacion
                         group n by terminacion;

            var grupos2 = numeros.
            Select(n => new { n, terminacion = n % 10 }).
            OrderBy(x => x.terminacion).
            GroupBy(x => x.terminacion, x => x.n);
            foreach (var g in grupos2)
            {
                Console.WriteLine(g.Key);
                foreach (var elem in g)
                    Console.WriteLine("   " + elem);
            }

            // PROCESOS
            //var procesos =
            //    from p in System.Diagnostics.Process.GetProcesses()
            //    where p.ProcessName != "Idle" &&
            //        DateTime.Now - p.StartTime > new TimeSpan(1, 0, 0)
            //    orderby p.ProcessName
            //    select p;
            //ObjectDumper.Write(procesos);

            // REFLEXION
            printProperties(typeof(TimeSpan));

            // enumeración de ficheros
            string[] ficheros = Directory.GetFiles(
                " C:\\Users\\Octavio\\Pictures", "*.jpg",
                SearchOption.AllDirectories);
            IEnumerable<FileInfo> datosFicheros =
                (from f in ficheros select new FileInfo(f)).Take(10);
            ObjectDumper.Write(datosFicheros);

            // enumeración de ficheros 2
            using (FileSystemEnumerator fse = new FileSystemEnumerator(
                " C:\\Users\\Octavio\\Pictures", "*.jpg", true))
            {
                IEnumerable<FileInfo> datosFicheros2 =
                    (from f in fse.Matches() select f).Take(10);
                ObjectDumper.Write(datosFicheros2);
            }

            // LoggingEnumerable.Log = Console.Out;

            // ENCUENTRO EXTERNO POR LA IZQUIERDA
            var outerJoin1 =
                from pa in Paises
                join pe in Generación on pa.Codigo equals pe.CodigoPaisNac
                into tmp
                from res in tmp.DefaultIfEmpty() // System.Linq.Enumerable.DefaultIfEmpty(tmp)
                select new {
                    Pais = pa.Nombre,
                    Nombre = res == null ? null : res.Nombre
                };
            ObjectDumper.Write(outerJoin1);

            // ENCUENTRO EXTERNO "POR LA DERECHA"
            var outerJoin2 =
                from pe in Generación
                join pa in Paises on pe.CodigoPaisNac equals pa.Codigo
                into tmp
                from res in tmp.DefaultIfEmpty() // System.Linq.Enumerable.DefaultIfEmpty(tmp)
                select new
                       {
                           Pais = res == null ? null : res.Nombre,
                           Nombre = pe.Nombre
                       };
            ObjectDumper.Write(outerJoin2);

            Console.WriteLine("-----------------");
            // ENCUENTRO EXTERNO SIMETRICO
            var outerJoin3 =
                outerJoin1.Union(outerJoin2);
            ObjectDumper.Write(outerJoin3);

            Console.ReadLine();
        }