Sin repetir muchos códigos y hacer lo mismo
Publicado por Meta (122 intervenciones) el 22/08/2021 10:20:29
Buenas foreros:
¿Cómo están tod@s?
Tengo un código de ejemplo hecho en Consola C# con Visual Studio Community 2019.
1. Se usa solo las teclas flechas y Enter.
2. Puedes escribir cualquier nombre con el teclado.
3. Guardar información en un archivo de texto plano .txt.
4. Recuperar información guardada en un archivo de .txt nada más ejecutar el programa.
Es lo que hace ahora. Como puedes ver, solo indica "Nombre del relé 1", en el cual solo se guarda ahí los datos.
Quiero lograr de alguna forma, la cantidad de relés que yo quiera, en este caso 8 relés. Tiene que hacer estas cosas.
1. Cuando el programa esté ejecutado, se selecciona uno a uno el relé que quiera del 1 al 8.
2. Poder introducir desde el teclado un nombre en cada relés.
3. Guardar cada nombre en el mismo archivo de texto .txt.
4. Al ejecutar el programa, que lea todo lo que incluye en el archivo .txt.
Lo veo complicado. Hacerlo con un solo relé vale, pero con 8 relés, lo veo más complicado.
Código completo de un solo relé.
¿Alguna idea sobre este planteamiento?
Un cordial saludos.
¿Cómo están tod@s?
Tengo un código de ejemplo hecho en Consola C# con Visual Studio Community 2019.
1. Se usa solo las teclas flechas y Enter.
2. Puedes escribir cualquier nombre con el teclado.
3. Guardar información en un archivo de texto plano .txt.
4. Recuperar información guardada en un archivo de .txt nada más ejecutar el programa.
Es lo que hace ahora. Como puedes ver, solo indica "Nombre del relé 1", en el cual solo se guarda ahí los datos.
Quiero lograr de alguna forma, la cantidad de relés que yo quiera, en este caso 8 relés. Tiene que hacer estas cosas.
1. Cuando el programa esté ejecutado, se selecciona uno a uno el relé que quiera del 1 al 8.
2. Poder introducir desde el teclado un nombre en cada relés.
3. Guardar cada nombre en el mismo archivo de texto .txt.
4. Al ejecutar el programa, que lea todo lo que incluye en el archivo .txt.
Lo veo complicado. Hacerlo con un solo relé vale, pero con 8 relés, lo veo más complicado.
Código completo de un solo relé.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
using System;
using System.IO;
namespace LCD_nombre_archivo_consola_11
{
class Program
{
// Variables.
static string guardarNombre = ""; // Guardar nombre escrito.
static int coordenadaX = 0; // Coordenada X del setCursorPisition.
static ConsoleKey tecla; // Guarda cualquier tecla pulsada.
static int index = 0; // Índice.
// Caracteres de este array.
static readonly char[] roALFANUMERICO = new char[]
{
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'Ñ', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'x', 'y',
'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','.', ',', '-', '_', ':', ';',
'¿', '?', '(', ')', '[', ']', '{', '}','=', '$','&', '"', ' '
};
// Dirección del carácter del array. El 80 presenta al espacio ' ' del array roALFANUMERICO.
static readonly int[] roINDICE_ARRAY = new int[]
{
80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80
};
// Palabras del array para imprimir en pantalla.
static readonly string[] roTEXTO = new string[] { "ATRÁS", "GUARDAR" };
static void Main(string[] args)
{
// Título de la pantalla.
Console.Title = "Cambiar nombre";
Inicio();
}
static void MainMenu()
{
Console.Clear(); // Limpiar pantalla.
Console.SetCursorPosition(0, 0);
Console.Write("Nombre del relé 1: ");
Console.SetCursorPosition(0, 1);
// Recorre el índice del array, del 0 hasta donde llegue.
for (int i = 0; i < roINDICE_ARRAY.Length; i++)
{
// Imprime los caracteres del array.
Console.Write(roALFANUMERICO[roINDICE_ARRAY[i]]);
}
Console.SetCursorPosition(3, 3);
Console.Write(roTEXTO[0]); // ATRÁS.
Console.SetCursorPosition(12, 3);
Console.Write(roTEXTO[1]); // GUARDAR.
}
#region Inicio.
static void Inicio()
{
Console.SetWindowSize(20, 5); // Residemensiona pantalla. X = 20, Y = 5.
Console.BackgroundColor = ConsoleColor.Gray; // Fondo gris.
Console.ForegroundColor = ConsoleColor.Black; // Letras negras.
// ¿El archivo Existe?
if (File.Exists("Archivo.txt"))
{
// Sí. Lee el archivo de texto.
string nombre = File.ReadAllText("Archivo.txt");
int a, b; // Almacena ídice array.
for (a = 0; a < nombre.Length; a++)
{
for (b = 0; roALFANUMERICO[b] != nombre[a]; b++)
{
;
}
roINDICE_ARRAY[a] = b; // b indica índice y lo añade al roINDICE_ARRAY.
}
}
File.WriteAllText("Archivo.txt", guardarNombre);
// No. El Archivo.txt no existe. El código continúa por aquí.
MainMenu(); // Dibuja el menú.
while (true)
{
Console.CursorVisible = true; // Cursor invisible.
index = 0;
// Si se cumple estas condiciones, Enter, flecha izquierda, flecha derecha
if ((tecla == ConsoleKey.Enter) || (tecla == ConsoleKey.RightArrow) || (tecla == ConsoleKey.LeftArrow))
{
MainMenu(); // Dibuja el menú.
}
// Posiciona cursor.
Console.SetCursorPosition(coordenadaX, 1);
// Almacena en la variable tecla, la tecla pulsada.
tecla = Console.ReadKey(true).Key;
// Si coincide una tecla pulsada.
switch (tecla)
{
case ConsoleKey.RightArrow: // Flecha derecha detectada.
// ¿CoordenadaX menor que 15?
if (coordenadaX < 15)
{
coordenadaX++; // Sí. Añada + 1 en la coordenadaX.
}
// No. Sale de aquí.
break;
case ConsoleKey.LeftArrow: // Flecha izquierda detectada.
// ¿coordenadaX es mayor que 0?
if (coordenadaX > 0)
{
coordenadaX--; // Sí. Decremente o quita -1.
}
// No. Sale de aquí.
break;
case ConsoleKey.UpArrow: // Flecha arriba.
roINDICE_ARRAY[coordenadaX]++; // En el índice del array añade + en coordenadaX.
// ¿El índice del array es mayor o igual que el arra Alfanumérico?
if (roINDICE_ARRAY[coordenadaX] >= roALFANUMERICO.Length)
{
roINDICE_ARRAY[coordenadaX] = 0; // Sí. Deja en 0 la coordenada del índice del array.
}
Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
break;
case ConsoleKey.DownArrow: // Flecha abajo detectado.
roINDICE_ARRAY[coordenadaX]--; // Decrementa a -1 el índice del array.
// ¿La coordenadaX del indice del array es menor que 0?
if (roINDICE_ARRAY[coordenadaX] < 0)
{
// Sí. Imprimir el valor alfanumérico.
roINDICE_ARRAY[coordenadaX] = roALFANUMERICO.Length - 1;
}
Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
break;
case ConsoleKey.Enter: // Detecta la tecla Enter.
Console.SetCursorPosition(1, 3); // Posición del cursor.
Console.CursorVisible = false; // Se oculta el cursor.
Console.Write(">"); // Imprime en pantalla >.
// ¿La tecla almacenada es distinto a la tecla Enter?
while ((tecla = Console.ReadKey(true).Key) != ConsoleKey.Enter)
{
// Sí.
switch (tecla)
{
case ConsoleKey.RightArrow:
index = 1;
Console.SetCursorPosition(1, 3);
Console.Write(" ");
Console.SetCursorPosition(10, 3);
Console.Write(">");
break;
case ConsoleKey.LeftArrow:
Console.SetCursorPosition(10, 3);
Console.Write(" ");
Console.SetCursorPosition(1, 3);
Console.Write(">");
index = 0;
break;
case ConsoleKey.UpArrow:
Inicio();
break;
case ConsoleKey.DownArrow:
Inicio();
Console.SetCursorPosition(coordenadaX, 1);
break;
}
}
if (index == 0)
{
Atras();
}
if (index == 1)
{
Guardar();
}
break;
}
}
}
#endregion
static void Atras()
{
Console.Clear();
Console.SetCursorPosition(0, 1);
Console.Write("HAS PULSADO ATRÁS ");
Console.ReadKey(); // Pulse cualquier tecla para salir.
}
static void Guardar()
{
guardarNombre = "";
Console.Clear();
// Lee todo el contennido del array y lo guarda en guardarNombre.
for (int a = 0; a < roINDICE_ARRAY.Length; a++)
{
guardarNombre += roALFANUMERICO[roINDICE_ARRAY[a]].ToString();
}
Console.SetCursorPosition(0, 2);
Console.Write(guardarNombre); // Imprime el contenido.
// Crear Archivo.txt y el contenido de guardarNombre.
File.WriteAllText("Archivo.txt", guardarNombre);
Console.SetCursorPosition(0, 1);
Console.Write("HAS GUARDADO ");
// Pulsa otra vez tecla.
Console.ReadKey();
}
}
}
Un cordial saludos.
Valora esta pregunta
0