// // 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); } }
// // 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(); } }
// // 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); } } }
// // 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 }