elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: ¿Eres usuario del foro? Ahora tienes un Bot con IA que responde preguntas. Lo puedes activar en tu Perfil


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Agregar else.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Agregar else.  (Leído 1,285 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.831


Hackentifiko!


Ver Perfil
Agregar else.
« en: 23 Septiembre 2026, 10:09 am »

Tengo un código que genera códigos incompletos que pueden implicar números (que representan acciones que no vienen al caso):
Citar
LV1Code1:
1

LV1Code2:
if {
}

LV1Code3:
do {
} while

LV1Code4:
while {
}

CodeBase:
1

LineaDondeAgregar: 0

LV2Code1:
1
1

LV2Code2:
2
1

LV2Code3:
if {
}
1

LV2Code4:
do {
} while
1

LV2Code5:
while {
}
1

LineaDondeAgregar: 1

LV2Code6:
1
1

LV2Code7:
1
2

LV2Code8:
1
if {
}

LV2Code9:
1
do {
} while

LV2Code10:
1
while {
}

CodeBase:
if {
}

LineaDondeAgregar: 0

LV2Code11:
1
if {
}

LV2Code12:
if {
}
if {
}

LV2Code13:
do {
} while
if {
}

LV2Code14:
while {
}
if {
}

LineaDondeAgregar: 1

LV2Code15:
if {
   1
}

etc, etc

Citar
LV2Code46:
while {
}
while {
}

Quiero que así como se agrega if { y }, do { y } while, etc, se agregue } else {, claro sólo si en el código anteriormente hay un if { pero no su }

La parte relevante del código supongo que es:
Código
  1. // Para agregar if, do, while...
  2. AgregablesLinea1 = ["if {", "do {", "while {"];
  3. AgregablesLinea2 = ["}", "} while", "}"];
  4. NroDeCosaaAgregar = 0;
  5. // Repetir mientras no se haya agregado algo de eso:
  6. // Se cambiará qué se agrega:
  7. while (NroDeCosaaAgregar < 3) {
  8. CodesLV2++;
  9. NombredeNewCode = "LV2Code"+CodesLV2;
  10. // Se copia la base:
  11. set (NombredeNewCode, eval("LV1Code"+CodeBase).slice());
  12. // Insertar en la posición LineaDondeAgregar
  13. // Parámetros: (índice, elementos_a_eliminar, nuevo_elemento)
  14. eval(NombredeNewCode).splice(LineaDondeAgregar, 0, EspaciosRequeridos+AgregablesLinea1[NroDeCosaaAgregar]);
  15. eval(NombredeNewCode).splice(LineaDondeAgregar+1, 0, EspaciosRequeridos+AgregablesLinea2[NroDeCosaaAgregar]);
  16. trace (NombredeNewCode+":");
  17. TextoLineaPorLinea = eval(NombredeNewCode).join("\n");
  18. trace (TextoLineaPorLinea+"\n");
  19. NroDeCosaaAgregar++;
  20. }
  21.  
  22. // Para agregar else sólo cuando hay if no terminado:

Si necesitan algo más avisen.

Lo complicado es describir la condición que debe cumplirse, justamente ahí lo dejé. Puede que tenga que ver con revisar el array que se está formando (eval(NombredeNewCode)) pero no sé exacto cómo, por ejemplo supongamos que fuese
Citar
if {
   while {
   }
   if {
   }
   ACÁ ESTÁ EL CURSOR
}
if {
   2
}

Si pongo:
"Si hay un "if {" antes del cursor"
...entonces no se tiene en cuenta si el if terminó antes del cursor o no

Si pongo:
"Si hay un "if {" antes del cursor y si no hay un } antes del cursor"
...entonces podría ocurrir que el } no sea el final del if sino del while o de otro if.

Quizá tiene que ver con contar la cantidad de ifs pero no alcanza, necesito restar los que terminaron, pero no sé detectarlos porque el } podría ser de ellos o del while.

https://share.google/aimode/zaftDPTTQsG8TNCSI

En otro momento seguiré viendo eso.


En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.831


Hackentifiko!


Ver Perfil
Re: Agregar else.
« Respuesta #1 en: 7 Octubre 2026, 06:30 am »

Agregué lo que creí necesario en el código pero no hubo cambios en la salida parece. ¿Qué falla?

Código
  1. // Para códigos de 2 cosas:
  2. CodesLV2 = 0;
  3. CodeBase = 0;
  4. // Repetir mientras haya alguna base sin usar:
  5. // Se van a generar códigos con 2 cosas:
  6. while (CodeBase < CodesLV1) {
  7. CodeBase++;
  8. TextoLineaPorLinea = eval("LV1Code"+CodeBase).join("\n");
  9. trace ("CodeBase: \n"+TextoLineaPorLinea+"\n");
  10. LineaDondeAgregar = -1;
  11. // Repetir mientras haya alguna línea posterior en Codebase:
  12. // Se cambiará la línea donde se agrega código en Codebase:
  13. while (LineaDondeAgregar < eval("LV1Code"+CodeBase).length) {
  14. LineaDondeAgregar++;
  15. trace("LineaDondeAgregar: "+LineaDondeAgregar+"\n");
  16.  
  17. // Para averiguar espacios iniciales requeridos:
  18. // Si hay alguna línea anterior entonces puede...
  19. // que se requieran espacios, sino esto no...
  20. // funcionaría bien y no tiene sentido porque...
  21. // el resultado siempre debería ser 0:
  22. EspaciosRequeridos = "";
  23. if (LineaDondeAgregar > 0) {
  24. // 1ero se averigua la cantidad de espacios...
  25. // iniciales de la línea anterior:
  26. // AÚN NO PUEDE SABERSE SI ESTO FUNCIONA
  27. LineaAnterior = eval("LV1Code"+CodeBase)[LineaDondeAgregar-1];
  28. CaracterEvaluandose = 0;
  29. do {
  30. if (LineaAnterior.charAt(CaracterEvaluandose) == " ") {
  31. EspaciosRequeridos = EspaciosRequeridos+" ";
  32. } else {
  33. break;
  34. }
  35. CaracterEvaluandose++;
  36. } while (CaracterEvaluandose < eval("LV1Code"+CodeBase)[LineaDondeAgregar].length);
  37.  
  38. // Luego se averigua si la línea es un if o...
  39. // algo así que requiera espacios,
  40. // en cuyo caso se le agregan:
  41. // Extrae el texto desde la posición...
  42. // EspaciosRequeridos hasta el final:
  43. LineaSinEspacios = LineaAnterior.substr(EspaciosRequeridos);
  44. // trace("LineaSinEspacios: "+LineaSinEspacios);
  45. if (LineaSinEspacios == "if {" or LineaSinEspacios == "do {" or LineaSinEspacios == "while {") {
  46. EspaciosRequeridos = EspaciosRequeridos+"   ";
  47. }
  48. }
  49. Action = 0;
  50. // Repetir mientras haya alguna acción agregable
  51. // (se refiere a 1, 2, etc, no ifs, etc):
  52. // Se cambiará la acción que se agrega:
  53. while (Action <= eval("LV1Code"+CodeBase+"MaxAction")) {
  54. Action++;
  55. CodesLV2++;
  56. NombredeNewCode = "LV2Code"+CodesLV2;
  57.  
  58. // Para agregar código 1ero se copia el base:
  59. set (NombredeNewCode, eval("LV1Code"+CodeBase).slice());
  60.  
  61. // Insertar en la posición LineaDondeAgregar:
  62. // Parámetros: (índice, elementos_a_eliminar, nuevo_elemento)
  63. eval(NombredeNewCode).splice(LineaDondeAgregar, 0, EspaciosRequeridos+Action);
  64. trace (NombredeNewCode+":");
  65. TextoLineaPorLinea = eval(NombredeNewCode).join("\n");
  66. trace (TextoLineaPorLinea+"\n");
  67. }
  68.  
  69. // Para agregar if, do, while...
  70. AgregablesLinea1 = ["if {", "do {", "while {"];
  71. AgregablesLinea2 = ["}", "} while", "}"];
  72. NroDeCosaaAgregar = 0;
  73. // Repetir mientras no se haya agregado algo de eso:
  74. // Se cambiará qué se agrega:
  75. while (NroDeCosaaAgregar < 3) {
  76. CodesLV2++;
  77. NombredeNewCode = "LV2Code"+CodesLV2;
  78. // Se copia la base:
  79. set (NombredeNewCode, eval("LV1Code"+CodeBase).slice());
  80. // Insertar en la posición LineaDondeAgregar
  81. // Parámetros: (índice, elementos_a_eliminar, nuevo_elemento)
  82. eval(NombredeNewCode).splice(LineaDondeAgregar, 0, EspaciosRequeridos+AgregablesLinea1[NroDeCosaaAgregar]);
  83. eval(NombredeNewCode).splice(LineaDondeAgregar+1, 0, EspaciosRequeridos+AgregablesLinea2[NroDeCosaaAgregar]);
  84. trace (NombredeNewCode+":");
  85. TextoLineaPorLinea = eval(NombredeNewCode).join("\n");
  86. trace (TextoLineaPorLinea+"\n");
  87. NroDeCosaaAgregar++;
  88. }
  89.  
  90. // Para agregar else sólo cuando hay if no terminado,
  91. // y la posición del else no sea entre otros bloques:
  92. // Desde la línea actual ir mirando hacia arriba:
  93. NroDeLineaMirandose = LineaDondeAgregar;
  94. LineaMirandose = eval("LV1Code"+CodeBase)[NroDeLineaMirandose];
  95. PuedeHaberElse = undefined;
  96. while (NroDeLineaMirandose > 0) {
  97. NroDeLineaMirandose--;
  98. // Para averiguar espacios iniciales que...
  99. // deben borrarse para saber qué tiene...
  100. // la línea sin ellos:
  101. EspaciosaQuitar = "";
  102. CaracterEvaluandose = 0;
  103. do {
  104. if (LineaMirandose.charAt(CaracterEvaluandose) == " ") {
  105. EspaciosaQuitar = EspaciosaQuitar+" ";
  106. } else {
  107. break;
  108. }
  109. CaracterEvaluandose++;
  110. } while (CaracterEvaluandose < eval("LV1Code"+CodeBase)[LineaMirandose].length);
  111. LineaSinEspacios = LineaMirandose.substr(EspaciosaQuitar);
  112. DosAbiertos = 0;
  113. OtrosAbiertos = 0;
  114. if (LineaSinEspacios == "} while") {
  115. DosAbiertos++;
  116. } else if (LineaSinEspacios == "}") {
  117. OtrosAbiertos++;
  118. } else if (LineaSinEspacios == "do {") {
  119. DosAbiertos--;
  120. if (DosAbiertos == -1) {
  121. PuedeHaberElse = false;
  122. break;
  123. }
  124. } else if (LineaSinEspacios == "while {") {
  125. OtrosAbiertos--;
  126. if (OtrosAbiertos == -1) {
  127. PuedeHaberElse = false;
  128. break;
  129. }
  130. } else if (LineaSinEspacios == "if {") {
  131. OtrosAbiertos--;
  132. if (OtrosAbiertos == -1) {
  133. PuedeHaberElse = true;
  134. break;
  135. }
  136. } else if (LineaSinEspacios == "} else if {") {
  137. PuedeHaberElse = true;
  138. break;
  139. }
  140. }
  141. if (PuedeHaberElse == true) {
  142. CodesLV2++;
  143. NombredeNewCode = "LV2Code"+CodesLV2;
  144. // Se copia la base:
  145. set (NombredeNewCode, eval("LV1Code"+CodeBase).slice());
  146. // Insertar en la posición LineaDondeAgregar
  147. // Parámetros: (índice, elementos_a_eliminar, nuevo_elemento)
  148. eval(NombredeNewCode).splice(LineaDondeAgregar, 0, EspaciosRequeridos+"} else if {");
  149. trace (NombredeNewCode+":");
  150. TextoLineaPorLinea = eval(NombredeNewCode).join("\n");
  151. trace (TextoLineaPorLinea+"\n");
  152. }
  153. }
  154. }
  155. stop ();


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Agregar una DLL al php.ini!!!
PHP
Pitoniso 1 3,249 Último mensaje 13 Junio 2007, 16:32 pm
por grubhart
Agregar Lineas a un TXT
Scripting
Nilrac 8 5,433 Último mensaje 14 Junio 2010, 19:00 pm
por leogtz
Agregar sección a .exe
Programación Visual Basic
locot3 1 2,551 Último mensaje 8 Junio 2010, 18:12 pm
por Horricreu
Agregar juegos a ps3
Juegos y Consolas
Remus 0 2,427 Último mensaje 30 Julio 2011, 03:24 am
por Remus
Agregar un .lib a un proyecto
Programación C/C++
Goddamn 0 1,977 Último mensaje 16 Mayo 2018, 04:55 am
por Goddamn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines