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 - luis456

#231
Estoy tratando de averiguar las diferencias entre una gran base de numeros entre si,tratare de explicarlo :) tengo en un txt una lista de numeros

numeros en el txt que debera de leer el codigo en forma descendente

02 15 28 50 45 60
10 20 35 40 60 80
11 40 49 50 77 99
20 25 33 48 60 88
30 36 44 55 77 95


Bien lo que se nesecita es saber las diferencias entre ellos

02 15 28  50  45  60 <--primer numero de la lista

10 20 35  40  60  80 <--segundo numero comparar con el primero

+8 +5 +7 -10 +15 +20 <--resultados


10  20  35  40  60 80 <-se toma el segundo numero  compara con el  tercer numero
11  40  49  50  77 99 <- com compara al igual que el anterior y haci con todos los numeros hasta acabar la muestra

+1 +20 +14 +10 +17 +19 < resultados


en fin en el txt resultante lo unico que tiene que estar son los resultados

+8 +5  +7  -10 +15 +20  <--resultados
+1 +20 +14 +10 +17 +19

Tengo este codigo amabilididad por elektro


Código (vbnet) [Seleccionar]
Public Class Form1

   Private Shadows Sub Load() Handles MyBase.Load

       Dim sb As New System.Text.StringBuilder
       Dim Values As New List(Of Integer()) From
           {
               ({1I, 20, 1I}),
               ({7I, 22, 4I}),
               ({8I, 27, 11}),
               ({20, 29, 17}),
               ({23, 33, 22}),
               ({39, 46, 31})
           }

       For Each ValueCol() As Integer In Values

           Dim Value1 As Integer = ValueCol(0)
           Dim Value2 As Integer = ValueCol(1)
           Dim Value3 As Integer = ValueCol(2)

           Dim Diff1 As String = GetDifferenceExpression(Value1, Value2)
           Dim Diff2 As String = GetDifferenceExpression(Value2, Value3)


           sb.AppendLine(String.Format("{0} -> {1} = {2}",
                         Value1.ToString("00"), Value2.ToString("00"), Diff1))

           sb.AppendLine(String.Format("{0} -> {1} = {2}",
                         Value2.ToString("00"), Value3.ToString("00"), Diff2))

           
           sb.AppendLine()

       Next ValueCol

       MessageBox.Show(sb.ToString)

       Application.Exit()

       
   End Sub

   Private Sub Form1_Load(ByVal sender As System.Object, _
                      ByVal e As System.EventArgs) Handles MyBase.Load
       Try
           Dim Archivo As System.IO.FileStream
           ' crea un archivo vacio prueba.txt  
           Archivo = System.IO.File.Create("c:\asi\Prueba.txt")
           ' error  
       Catch oe As Exception
           MsgBox(oe.Message, MsgBoxStyle.Critical)
       End Try
   End Sub
 
   ' Get Difference expression
   ' ( By Elektro )
   '
   ' Usage Examples:
   ' MessageBox.Show(GetDifferenceExpression(5, 10))
   '
   ''' <summary>
   ''' Obtiene la expresión aritmética suma diferencia / descanso entre dos valores.
   ''' </summary>
   ''' <param name="Value1">El primer valor.</param>
   ''' <param name="Value2">El segundo valor.</param>
   ''' <returns>La expresión aritmética.</returns>
   Friend Function GetDifferenceExpression(ByVal Value1 As Long, ByVal Value2 As Long) As String

       Select Case Value2

           Case Is > Value1 ' Value2 es más grande que Valor1.
               Return String.Format("+{0}", CStr(Value2 - Value1))

           Case Is < Value1 ' Value2 es inferior a Valor1.
               Return String.Format("-{0}", CStr(Value1 - Value2))

           Case Else ' Value2 es igual a Valor1.
               Return "0"

       End Select

   End Function

End Class




Luis



#232
Cita de: Eleкtro en 11 Febrero 2015, 13:43 PM
Joder Luis... ¿no se te ha ocurrido añadir una condición más a la query de LINQ?:
...Where (Value <= max AndAlso Value > 0)

Código (vbnet) [Seleccionar]
Dim values1 As IEnumerable(Of Integer) = {-2, -1, 0, 1, 2}
Dim values2 As IEnumerable(Of Integer) = {-20, -10, 0, 10, 20}
Dim max As Integer = 10

Dim result As IEnumerable(Of Integer) =
   (From Value As Integer In (values1.Concat(values2)).Distinct
    Where (Value <= max AndAlso Value > 0))

ListBox1.Items.AddRange(result.Cast(Of Object).ToArray)


PD ¿porque no aprendes en serio despues de tanto tiempo manejando VB.Net?, al menos lo básico ...como esto, saldrías de muchos apuros por ti mismo y eso te ayudaría a avanzar más rápido...

Saludos!

Gracias Elektro
recien lo pruebo. ya que estuve indispuesto por catarro y si me vale y  cada dia aprendo un poco pero poco eee,


Luis

#233
M recorde de un codigo que me dio Elektro


Código (vb.net) [Seleccionar]
'For Index As Integer = 0 To (Result1.Count - 1)

           Select Case Result1(Index)

               Case Is = 0 ' El valor es 0.
                   ' Hacer algo con el número 0 aquí.
                   ' Result1(Index) = Not 0

               Case Is < 0 ' El valor es negativo.
                   ' Lo convierto a positivo.
                   Result1(Index) = Math.Abs(Result1(Index))

           End Select '/ Result1(Index)  



Funciona con los negativos pero no me elimina el 0

luis
#234
Otro de mis ligeros problemas tengo este codigo que me muestra :  


-2
-1
0
2
3
4
1
5
6

nesecito eliminar esto de los resultados, que no muestre o mejor elimine los numeros que tengan el signo negativo y el cero
-2
-1
0


Código (vbnet) [Seleccionar]
Dim Resultodo1 As IEnumerable(Of Integer) =
           (
               From Value As Integer
                 In (Result1.Concat(Result2)).Distinct Where (Value <= MAX))


       ListBox1.Items.AddRange(Resultodo1.Cast(Of Object).ToArray)



Luis
#235
Yo lo solucione de esta manera espero te sirva


Código (vbnet) [Seleccionar]
  Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")
        End If
    End Sub



luis

#236
Solucionado jejej propiedades de Listbox  / name y listo :)

a veces me auto soluciono las cosas


Luis
#237
Pero claro ya Elektro se estaria preguntando que esta ves fue facil  ;)

pero no jejejje te tengo una pregunta ? se puede cambiar esto y poner otro nombre por ejemplo



ListBox1      ListBox2      ListBox3      ListBox4
********      ********      ********      ********

y poner


resultado 1    resultado2   resultado3   resultado4
********     ********   ********    ********

Saludos
Luis



#238
Cita de: Eleкtro en  4 Febrero 2015, 18:42 PM
Hola Luis

Simplemente podrías serializar los datos en un archivo binario si tu intención es cargarlo de nuevo al programa, es algo muy facil, pero creo que no es el caso lo que quieres hacer, así que esto requiere mucha más escritura.

He escrito este código hardcodeado, optimizado para un conjunto de listas con cantidad de items indefinida en cada lista, y con longitud de item indefinida.

Nota: No lo he testeado mucho, quizás pueda haber agún error en ciertas circunstancias.


Output:
ListBox1      ListBox2      ListBox3      ListBox4
********      ********      ********      ********
a1qwerty      a2            a3            a4      
qwertyqw                  
erty                      
--------      --------      --------      --------
b1            b2            b3            b4      
--------      --------      --------      --------
c1                          c3                    
--------      --------      --------      --------
                           d3                    
--------      --------      --------      --------



Source:
Código (vbnet) [Seleccionar]
Imports System.IO
Imports System.Text

Public Class TestForm

   Private Sub Test() Handles Button1.Click

       Dim lbs As ListBox() = {ListBox1, ListBox2, ListBox3, ListBox4}
       Dim spacing As Integer = 6 ' The horizontal spacing between columns.
       Dim filaPath As String = Path.Combine(Application.StartupPath, "Test.txt")
       Dim item1Parts As IEnumerable(Of String) = {}
       Dim item2Parts As IEnumerable(Of String) = {}
       Dim item3Parts As IEnumerable(Of String) = {}
       Dim item4Parts As IEnumerable(Of String) = {}
       Dim maxItemCount As Integer
       Dim maxItemPartCount As Integer
       Dim sb As New StringBuilder

       ' Get the max item count in listboxes.
       maxItemCount = (From lb As ListBox In lbs
                                      Order By lb.Items.Count Descending
                                      Select lb.Items.Count).First

       ' Write column names.
       sb.AppendLine(String.Format("{1}{0}{2}{0}{3}{0}{4}",
                     New String(" "c, spacing),
                     lbs(0).Name, lbs(1).Name,
                     lbs(2).Name, lbs(3).Name))

       ' Write column separator.
       sb.AppendLine(String.Format("{1}{0}{2}{0}{3}{0}{4}",
                     New String(" "c, spacing),
                     New String("*"c, lbs(0).Name.Length),
                     New String("*"c, lbs(1).Name.Length),
                     New String("*"c, lbs(2).Name.Length),
                     New String("*"c, lbs(3).Name.Length)))

       ' Iterate listbox items.
       For index As Integer = 0 To (maxItemCount - 1)

           ' If item at index exist...
           If lbs(0).Items.Count > index Then
               item1Parts = SplitByLength(lbs(0).Items(index).ToString, lbs(0).Name.Length)
           End If

           If lbs(1).Items.Count > index Then
               item2Parts = SplitByLength(lbs(1).Items(index).ToString, lbs(1).Name.Length)
           End If

           If lbs(2).Items.Count > index Then
               item3Parts = SplitByLength(lbs(2).Items(index).ToString, lbs(2).Name.Length)
           End If

           If lbs(3).Items.Count > index Then
               item4Parts = SplitByLength(lbs(3).Items(index).ToString, lbs(3).Name.Length)
           End If

           If (item1Parts.Count > 1) OrElse
              (item2Parts.Count > 1) OrElse
              (item3Parts.Count > 1) OrElse
              (item4Parts.Count > 1) Then

               ' Get the max item count in itemParts.
               maxItemPartCount = (From col As IEnumerable(Of String)
                                   In {item1Parts, item2Parts, item3Parts, item4Parts}
                                   Order By col.Count Descending
                                   Select col.Count).First

               For x As Integer = 0 To (maxItemPartCount - 1)

                   ' Write multiple items rows.
                   sb.AppendLine(String.Format("{1}{0}{2}{0}{3}{0}{4}",
                                     New String(" "c, spacing),
                                     If(item1Parts.Count <= x, String.Empty,
                                        item1Parts(x) & New String(" "c, lbs(0).Name.Length - item1Parts(x).Length)),
                                     If(item2Parts.Count <= x, String.Empty,
                                        item2Parts(x) & New String(" "c, lbs(1).Name.Length - item2Parts(x).Length)),
                                     If(item3Parts.Count <= x, String.Empty,
                                        item3Parts(x) & New String(" "c, lbs(2).Name.Length - item3Parts(x).Length)),
                                     If(item4Parts.Count <= x, String.Empty,
                                        item4Parts(x) & New String(" "c, lbs(3).Name.Length - item4Parts(x).Length))))
               Next

           Else
               ' Write simgle items row.
               sb.AppendLine(String.Format("{1}{0}{2}{0}{3}{0}{4}",
                                 New String(" "c, spacing),
                                 If(lbs(0).Items.Count <= index,
                                    String.Empty & New String(" "c, lbs(0).Name.Length),
                                    item1Parts.First & New String(" "c, lbs(0).Name.Length - item1Parts.First.Length)),
                                 If(lbs(1).Items.Count <= index,
                                    String.Empty & New String(" "c, lbs(1).Name.Length),
                                    item2Parts.First & New String(" "c, lbs(1).Name.Length - item2Parts.First.Length)),
                                 If(lbs(2).Items.Count <= index,
                                    String.Empty & New String(" "c, lbs(2).Name.Length),
                                    item3Parts.First & New String(" "c, lbs(2).Name.Length - item3Parts.First.Length)),
                                 If(lbs(3).Items.Count <= index,
                                    String.Empty & New String(" "c, lbs(3).Name.Length),
                                    item4Parts.First & New String(" "c, lbs(3).Name.Length - item4Parts.First.Length))))

           End If

           ' Write horizontal grid.
           sb.AppendLine(String.Format("{1}{0}{2}{0}{3}{0}{4}",
                         New String(" "c, spacing),
                         New String("-"c, lbs(0).Name.Length),
                         New String("-"c, lbs(1).Name.Length),
                         New String("-"c, lbs(2).Name.Length),
                         New String("-"c, lbs(3).Name.Length)))

       Next index

       File.WriteAllText(filaPath, sb.ToString, Encoding.Default)
       sb.Clear()
       Process.Start(filaPath)

   End Sub

   ' Split By Length
   ' By Elektro
   '
   ''' <summary>
   ''' Splits a string by the specified character length.
   ''' </summary>
   ''' <param name="str">The string to split.</param>
   ''' <param name="length">The character length.</param>
   ''' <returns>IEnumerable(Of System.String).</returns>
   Private Function SplitByLength(ByVal str As String,
                                  ByVal length As Integer) As IEnumerable(Of String)

       Dim stringParts As New List(Of String)

       If str.Length > length Then

           Do Until str.Length <= length
               stringParts.Add(str.Substring(0, length))
               str = str.Remove(0, length)
           Loop

           ' Add the last missing part (if any).
           If Not String.IsNullOrEmpty(str) Then
               stringParts.Add(str)
           End If

       Else
           stringParts.Add(str)

       End If

       Return stringParts

   End Function

End Class



Haberme leido la mente no hubiera sido tan asombrosamente . Mil puntos para ti tambien elektro  gracias menudo codigo :) Funciona de maravilla

Luis


#239
Cita de: seba123neo en  4 Febrero 2015, 19:13 PM
¿ tiene que quedar asi en ese formato si o si ?

porque si es grsabarlo y despues recuperarlo, podes usar simplemente un archivo .ini, es muy facil grabarlo y despues volver a recuperar los datos.

de gravarlo tiene que ser asi ya que debo imprimir el txt para otros menesteres pero con el codigo que me suministra  nuestro  amigo Elektro que por cierto es mas largo que mi propio programa jajajja me sobra :)

Gracias a todos

Luis

#240
 gracias seba123neo

Lo mirare y si no me vale tratare en la funcion que me restrinja las cantidades :)

luis