Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eleкtro

#3751
Java / Re: Duda Examen Programaciin Urgente
19 Marzo 2016, 19:56 PM
Ojo, que "hacer una excepción" se puede interpretar de varias maneras, como crear la excepción literálmente hablando heredando la clase base, o simplemente controlar posibles excepciones en un bloque try/catch...

De todas formas, ya de nada sirve explicar, y menos cuando tu pregunta es sobre Java, que nada tuvo que ver con .Net ...Ay! esos despistes catastróficos en mitad del examen, jeje.

Saludos
#3752
.NET (C#, VB.NET, ASP) / Re: Combis :(
19 Marzo 2016, 19:40 PM
Cita de: luis456 en 18 Marzo 2016, 19:22 PM" No se puede inferir el tipo de 'k' porque los límites del bucle y la cláusula step no se convierten en el mismo tipo "

Hola!

Te está diciendo que no se puede inferir el tipo (sin asignar) de K, por que difiere del tipo de NumElementos.

Ese problema que se ve reflejado en la excepción es por que estás usando malas prácticas de las que ya te advertí en el pasado, debes intentar especificar explicitamente SIEMPRE el tipo de un objeto en lugar de dejar que el compiler lo intente inferir y así evitar ese tipo de errores.

Ejemplo:
CitarFor K As Integer = 2 ...

El segundo problema es que NumElementos no es un tipo Integer, sino una colección, así que lo que debes usar es la propiedad Count de dicha colección.




Puedes hacerlo de la siguiente manera:

Código (vbnet) [Seleccionar]
Dim intCol As IEnumerable(Of Integer) =
   {1, 3, 4, 5, 8, 13, 34, 55, 84, 99}

Dim sb As New StringBuilder(capacity:=100)
For x As Integer = 0 To (intCol.Count - 1) Step 2

   If (x < (intCol.Count - 1)) Then
       sb.Append(String.Format("{0:00}, {1:00}", intCol(x), intCol(x + 1)))
   Else
       sb.Append(String.Format("{0:00}", intCol(x)))
   End If

   sb.AppendLine()

Next

Console.WriteLine(sb.ToString)


Resultado de ejecución:
Citar01, 03
04, 05
08, 13
34, 55
84, 99

PD: ¿Algún "pero" esta vez? :P.
#3753
Hola

Lo primero de todo que quiero explicar (para quien no lo sepa) es que la versión del archivo hace referencia a la versión de .Net Framework, versión 2.0 = .Net Framework 2.0, versión 4.0 = .Net Framework 4.0 (el resto es el número de la build)

Bien, sabiendo esto, simplemente usa la lógica de la siguiente manera:
Si la class se encuentra en la versión 2.0 de .Net Framework, la misma class se debe encontrar en la versión 4.0, no hace falta comprobarlo, pero lo puedes comprobar con aplicaciones como .Net Reflector, Simple Assembly Explorer, o ILSpy (o simplemente observaando la información del ensamblado en la documentación online de la MSDN.), te aseguro que se encuentran en ambas versiones y de ambas arquitecturas (y si, lo he comprobado aunque no hiciera falta, por que no me gusta hablar sin verificar al 100%. )

 

( El número de ensamblado ignorarlo, puesto que no es lo mismo que el número de archivo, pero como ya te digo lo he comprobado con los números de archivo 2.0.x y 4.0.x del perfil completo )




Cita de: Lekim en 12 Marzo 2016, 17:24 PMQue no, que no hay error. Has visto bien

Los datos que has proporcionado se debe a que, o bien lo has comprobado erroneamente (has comprobado los archivos de la instalación compacta), o tienes algún tipo de conflicto con la instalación del .Net Framework compacto y la instalación completa, puesto que si no encuentras la class HttpUtility es por que estás analizando el ensamblado de la instalación compacta (el perfil cliente), mi consejo: Haz una instalación limpia del perfil completo de .Net Framework 4.0 (o deja de usar Windows XP, es otra solución :P).

Para que te sirva de ayuda y puedas verificar si tienes los archivos correctos en tu PC, aquí te dejo mis archivos con un par de hashes para que compares (aunque quizás no te sirva, ya que los números de build que has mencionado no se corresponden a estos del perfil completo):

System.Web.dll v2.0.50727.7905  x86 | MD5: 1828cc36f4c32e6e9107442c18bab4d4 | SHA1: 58efd875768818e525fa8a2b8110d9231cb30848
System.Web.dll v2.0.50727.7905  x64 | MD5: 02ae2cc1b00dae66b08f1a1ae22f3407 | SHA1: 8afdbc8a26063a50cf963034e67f5436871c19c1
System.Web.dll v4.0.30319.33440 x86 | MD5: ddece90e17b888567f129af5072e5a7d | SHA1: 69a771623fe030c032b1a24fee313c8b54967190
System.Web.dll v4.0.30319.33440 x64 | MD5: 434536963bed0da0c8e722252014a2d6 | SHA1: 973c796405f02590a786c0f1b6173112e73bcdf2


Puedes probar a activar la columna "Nombre Producto" en el explorador de Windows, quizás te diga si tus archivos se tratan de la versión compacta o no (no estoy seguro de la descripción que dará si se trata de compacta, solo es una sugerencia para que pruebes a ver si te dice algo de utilidad)

Saludos!
#3754
Aquí tienes infinidad de proyectos de código abierto en Python...







Saludos
#3755
Cita de: luis456 en 11 Marzo 2016, 20:14 PM
error
La conversión de la cadena "" en el tipo 'Integer' no es válida.

Lo puedes solucionar evaluando si el string está vacío antes de usar la función CInt().

Código (vbnet) [Seleccionar]
If String.IsNullOrEmpty(texto) then...

  If (CInt(texto) > 45) then...


O también puedes resolverlo utilizando la función Integer.TryParse() en lugar de CInt().

Saludos
#3756
Cita de: julian403 en 11 Marzo 2016, 16:14 PM¿cómo puedo hacer un programa portable? o ¿un instalador? sé que hay herramientas como .NET que me permitirían tal fin. ¿qué me recomiendan?

Pero... ¿bajo que lenguaje estás?. Si estás en la plataforma .Net entonces puedes compilar bajo un modo neutral llamado "AnyCPU" totalmente portable, el executable resultante se iniciará en modo x86 o x64 dependiendo de la arquitectura del S.O. donde se inicie. Aparte de eso si tienes declarada alguna función de la API Win32 debes asegurarte de hacerlo portable manualmente (la herramienta CodeAnalysis de Visual Studio ayuda a detectar conflictos de protabilización en ese sentido).

Los instaladores portables bien puedes hacerlo con VSIX en Visual Studio, pero yo personalmente prefiero utilizar InnoSetup junto a las constantes, parámetros del compiler o funciones relacionadas para ese propósito (como IsWin64, ArchitecturesInstallIn64BitMode y ArchitecturesAllowed)

Info:

Saludos
#3757
Cita de: luis456 en 11 Marzo 2016, 15:34 PM
yo pensaba en algo mas facil

Estoy casi seguro que la pregunta que has formulado ya la resolviste hace tiempo...
http://foro.elhacker.net/net/ayuda_como_hacer_para_validar_una_text_box_para_q_admita_solo_numeros-t429160.0.html;msg1994277#msg1994277
...no exactamente en ese post, pero no encuentro donde te mostré un ejemplo.

En fin, lo más sencillo es que uses un NumericUpDown, o heredar la Class de ese control para hacerlo más similar a un TextBox:

Código (vbnet) [Seleccionar]
Public Class NumericTextBox : Inherits NumericUpDown

   Public Sub New()
       MyBase.New()
       MyBase.Controls(0).Visible = False
   End Sub

   Protected Overrides Sub OnTextBoxResize(ByVal source As Object, ByVal e As EventArgs)
       MyBase.Controls(0).Size = New Size(0, MyBase.ClientSize.Height)
       MyBase.Controls(1).Size = New Size(MyBase.ClientSize.Width, MyBase.ClientSize.Height)
   End Sub

End Class

(no está pulido, es un ejemplo breve)




Con un TextBox corriente puedes hacerlo de la siguiente manera:
Código (vbnet) [Seleccionar]
   Private Sub TextBox1_Keypress(ByVal sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress

       e.Handled = Not Char.IsNumber(e.KeyChar)

   End Sub

   Private Sub TextBox1_TextChanged(ByVal sender As Object, e As EventArgs) Handles TextBox1.TextChanged

       Dim ctrl As TextBox = DirectCast(sender, TextBox)

       If CInt(ctrl.Text) > 45 Then
           ctrl.Text = "45"
       End If

   End Sub




#3758
Cita de: Lekim en 11 Marzo 2016, 16:15 PM
Dice que no se encuentra el archivo "\Prueba.txt" e ignora %apppath%

¿Cual es el problema?

Creo que el problema es que cuando ejecuto el archivo cmd es como si se ejecutara desde C:\windows\system32 que es donde se encuentra cmd.exe

Exacto lo primero que debes hacer ante la duda es revisar el directorio de trabajo actual observando el valor de la variable dinámica %CD%.




Cita de: Lekim en 11 Marzo 2016, 16:15 PMDice que no se encuentra el archivo "\Prueba.txt" e ignora %apppath%

Aparte del otro problema, es que no existe ninguna variable de entorno llamada apppath en Windows.




Cita de: Lekim en 11 Marzo 2016, 16:15 PM¿Hay alguna manera de no tener que poner el directorio completo y cambiar el directorio desde donde se ejecuta cmd?

Puedes utilizar la variable de argumento %0 con los modificadores de variable ~dp para extraer la ruta del directorio del script.
Ejemplo:
Código (dos) [Seleccionar]
@Echo OFF
Start "" "%~dp0Archivo.ext"
Pause & Exit /B 0

( si, sin el backsalsh  \   )

Para cambiar el directorio de trabajo actual, puedes utilizar el comando PUSHD (y POPD para restaurarlo)
Ejemplo:
Código (dos) [Seleccionar]
@Echo OFF
PUSHD "%AppData%"
Echo Directorio actual: "%CD%"
POPD
Pause & Exit /B 0


Saludos!
#3759
Cita de: Fixxed en 11 Marzo 2016, 15:03 PMAlguien sabe a que se debe??

El famoso mensaje de error se explica por si solo, estás intentando referenciar un objeto que NO ha sido inizializado.

Para que lo entiendas mejor: En el código que has mostrado, estás inicializando el Array, pero no los valores del Array, los valores son todo nulos.

Dicho esto, para no perder la "elegancia" del código puedes utilizar una query Linq-To-Objects de la siguiente manera:

Vb.Net
Código (vbnet) [Seleccionar]
Dim peds As Pedido() = (New Pedido(499) {}).Select(Function(element) New Pedido).ToArray()

C#:
Código (csharp) [Seleccionar]
var peds = new Pedido[499].Select(element => new Pedido()).ToArray();

O puedes crear una extensión de método rehutilizable para cualquier ocasión:

Vb.Net:
Código (vbnet) [Seleccionar]
' By Elektro

Public Module ArrayExtensions

   <Runtime.CompilerServices.Extension>
   Public Sub InitializeElements(Of T As New)(ByVal sender As T())

       For index As Integer = 0 To (sender.Length - 1)

           If (sender(index) IsNot Nothing) Then

               If sender(index).GetType.GetInterfaces.Contains(GetType(IDisposable)) Then
                   DirectCast(sender(index), IDisposable).Dispose()
                   sender(index) = Nothing
               End If

           End If

           sender(index) = New T

       Next index

   End Sub

End Module


Modo de empleo:
Código (vbnet) [Seleccionar]
Dim peds As Pedido() = (New Pedido(499) {})
peds.InitializeElements()


Traducción online a C#:
Código (csharp) [Seleccionar]
// By Elektro

public static class ArrayExtensions {

[Runtime.CompilerServices.Extension()]
public static void InitializeElements<T>(T[] sender) where T : new() {

for (int index = 0; index <= (sender.Length - 1); index++) {

if ((sender(index) != null)) {
if (sender(index).GetType.GetInterfaces.Contains(typeof(IDisposable))) {
((IDisposable)sender(index)).Dispose();
sender(index) = null;
}
}
sender(index) = new T();
}
}
}

//=======================================================
//Service provided by Telerik (www.telerik.com)
//=======================================================


Modo de empleo:
Código (csharp) [Seleccionar]
var peds = new Pedido[499]
peds.InitializeElements()





Por último, ten presente que puedes (y deberías) inicializar el valor por defecto de los campos de tu Type, desde el constructor de tu Type, y no desde un método local cualqueira.

Código (csharp) [Seleccionar]
public sealed class Pedido
{

public string Cliente { get; set; }
public string Producto { get; set; }
public int Cantidad { get; set; }
public double Precio { get; set; }
public string Calle { get; set; }
public int Num { get; set; }
public string Distrito { get; set; }

public Pedido()
{
this.Cliente = "NADA";
this.Producto = "NADA";
this.Calle = "NADA";
this.Distrito = "NADA";
}

}

(no es necesario hacerlo para los tipos numéricos)

Saludos!
#3760
Cita de: Hason en 11 Marzo 2016, 13:37 PM¿que pensais?..........

¿Hay que leer todo el artículo en serio? xD, yo no lo he leido ...ni lo haré, pero quiero responder igual diciendo que lo que pienso es que a los de La Tierra plana esto les va a encantar...

Y lo primero que se me ocurre para intentar desmontar de un soplido esta teoría (hipótesis, pamplina, o lo que sea) es con la siguiente pregunta:
  • ¿Qué explicación le dan entonces al experimento del péndulo de Foucault? (el cual demostró la rotación de La Tierra.)