コード例 #1
0
ファイル: Program.cs プロジェクト: Ethereal77/Silab
        //
        // Divide en sílabas cada palabra que aparezca en la entrada estándar.
        //
        private static void LeerEntrada(DivisorDePalabras divisorDePalabras, Modo modoDePresentación, string separador)
        {
            string línea;

            while ((línea = Console.ReadLine()) != null)
            {
                MostrarSílabas(línea, divisorDePalabras, modoDePresentación, separador);
            }
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: Ethereal77/Silab
        //
        // Divide una palabra en sus sílabas y las muestra.
        //
        private static void MostrarSílabas(string palabra, DivisorDePalabras divisorDePalabras,
                                           Modo modoDePresentación, string separador)
        {
            //Console.Write($"{palabra} --> ");

            var sílabas = divisorDePalabras.DividirEnSílabas(palabra);

            if (modoDePresentación == Modo.Line)
            {
                foreach (var sílaba in sílabas)
                {
                    Console.WriteLine(sílaba);
                }
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.White;
                Console.WriteLine(string.Join(separador, sílabas));
                Console.ResetColor();
            }
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: Ethereal77/Silab
        //
        // Lee un archivo y divide en sílabas cada palabra que aparezca. El archivo se lee línea a línea.
        //
        private static void LeerArchivo(string archivo, DivisorDePalabras divisorDePalabras,
                                        Modo modoDePresentación, string separador)
        {
            if (!File.Exists(archivo))
            {
                ErrorArchivoNoEncontrado(archivo);
            }
            else
            {
                try
                {
                    // Redirigimos a la entrada estándar el contenido del archivo
                    Console.SetIn(new StreamReader(archivo));

                    // Leemos por la entrada estándar normalmente
                    LeerEntrada(divisorDePalabras, modoDePresentación, separador);
                }
                catch (IOException)
                {
                    // Ante cualquier error asumimos que el archivo no se puede leer
                    ErrorArchivoNoSePuedeAbrir(archivo);
                }
            }
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: Ethereal77/Silab
        //
        // Punto de inicio de la aplicación.
        //
        public static int Main(string[] args)
        {
            if (args.Length == 0)
            {
                MostrarAyudaDeUso();
                return(0);
            }

            var  modoPresentación = Modo.Dash;
            var  listaEntradas    = new List <(Entrada Tipo, string)>();
            bool entradaStdin     = false;

            int i = 0;

            while (i < args.Length)
            {
                var arg = args[i].ToLower();

                switch (arg)
                {
                // === Entrada: Archivo de palabras
                case "-f":
                case "--file":
                    if (i + 1 < args.Length)
                    {
                        listaEntradas.Add((Entrada.File, args[++i]));
                    }
                    else
                    {
                        ErrorArchivoNoEspecificado();
                    }
                    break;

                // === Entrada: Emtrada estándar (stdin)
                case "-i":
                case "--in":
                    entradaStdin = true;
                    break;

                // === Especificador de Modo de Presentación
                case "-m":
                case "--mode":
                    if (i + 1 < args.Length)
                    {
                        var modo = args[++i].ToLower();
                        switch (modo)
                        {
                        case "dash": modoPresentación = Modo.Dash; break;

                        case "space": modoPresentación = Modo.Space; break;

                        case "line": modoPresentación = Modo.Line; break;

                        default:
                            ErrorModoNoVálido(modo);
                            break;
                        }
                    }
                    else
                    {
                        ErrorModoNoEspecificado();
                    }
                    break;

                // === Entrada: Palabra suelta
                default:
                    if (arg.StartsWith("--") || arg.StartsWith("-"))
                    {
                        ErrorArgumentoNoVálido(arg);
                    }
                    else
                    {
                        listaEntradas.Add((Entrada.Palabra, arg));
                    }
                    break;
                }

                i++;    // Siguiente argumento
            }

            // Sin entradas a procesar: Mostramos la ayuda
            if (listaEntradas.Count == 0 && !entradaStdin)
            {
                MostrarAyudaDeUso();
                return(0);
            }

            var divisor = new DivisorDePalabras();

            var separador = "";

            switch (modoPresentación)
            {
            case Modo.Dash: separador = "-"; break;

            case Modo.Space: separador = " "; break;
            }

            // Procesamos las entradas en orden
            foreach (var entrada in listaEntradas)
            {
                switch (entrada.Tipo)
                {
                case Entrada.Palabra:
                    MostrarSílabas(entrada.Item2, divisor, modoPresentación, separador);
                    break;

                case Entrada.File:
                    LeerArchivo(entrada.Item2, divisor, modoPresentación, separador);
                    break;
                }
            }

            if (entradaStdin)
            {
                LeerEntrada(divisor, modoPresentación, separador);
            }

            return(0);   // Todo bien
        }