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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  como se puede contar numero por numero
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: como se puede contar numero por numero  (Leído 3,226 veces)
luis456


Desconectado Desconectado

Mensajes: 548



Ver Perfil
como se puede contar numero por numero
« en: 9 Febrero 2014, 16:31 pm »

Hola
tengo un txt que tiene solo números en orden descendente  de cuatro en cuatro

asi
1 2 3 4
5 7 8 6
10 15 88 90
15 25 77 85....etc y para de contar

Como puedo contar numero por numero y me lo muestre en otro txt

Ejemplo
01= 25
02= 45
03=88

Consegui este codigo aca mismo pero cuenta es el total y ademas letras


Código
  1. Imports System.IO
  2. Public Class Form1
  3.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  4.  
  5.        Dim palabras As Integer = 0
  6.        Dim letras As Integer = 0
  7.        Dim numeros As Integer = 0
  8.  
  9.        Dim lineas As String() = File.ReadAllLines("C:\1.txt")
  10.        For Each linea As String In lineas
  11.            For Each palabra As String In linea.Split(" ")
  12.                If (palabra.Length > 0) Then
  13.                    palabras = palabras + 1
  14.                    For Each letra As Char In palabra.ToCharArray()
  15.                        If (Asc(letra.ToString()) > 47 And Asc(letra.ToString()) < 58) Then
  16.                            numeros = numeros + 1
  17.                        ElseIf (Asc(letra.ToString()) > 64 And Asc(letra.ToString()) < 123) Then
  18.                            letras = letras + 1
  19.                        End If
  20.                    Next
  21.                End If
  22.            Next
  23.        Next
  24.  
  25.        Label1.Text = "Palabras: " & palabras & Microsoft.VisualBasic.vbNewLine & "Letras: " & letras & Microsoft.VisualBasic.vbNewLine & "Numeros: " & numeros
  26.  
  27.    End Sub
  28. End Class

Gracias
Luis







En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.788



Ver Perfil
Re: como se puede contar numero por numero
« Respuesta #1 en: 9 Febrero 2014, 17:21 pm »

compila este Form a ver si es lo que necesitas:
Código
  1. Imports System.IO
  2. Imports System.Text
  3. Imports System.Threading
  4.  
  5. Public Class Form1
  6.  
  7.    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Shown
  8.  
  9.        ' El archivo de texto que contiene las filas de números.
  10.        Dim OldTextFile As String = "C:\Users\Administrador\Desktop\1.txt"
  11.  
  12.        ' El nuevo archivo de texto que se escribirá con el formato.
  13.        Dim NewTextFile As String = "C:\Users\Administrador\Desktop\nuevo.txt"
  14.  
  15.        ' El formato de la cadena.
  16.        Dim strFormat As String = "{0:00}={1}"
  17.  
  18.        ' Esta variable la usaré para incrementar el índice (01=n, 02=n, 03=n, etc...)
  19.        Dim Index As Integer = 0
  20.  
  21.        ' Obtengo cada número del archivo de texto, y los meto en un Array.
  22.        ' Ej: {5, 6, 7, 8 , 9, etc...}
  23.        Dim Items As Integer() =
  24.          (From Number As Integer In File.ReadAllText(OldTextFile, Encoding.ASCII).
  25.                                     Split({" "c, vbCrLf}, StringSplitOptions.RemoveEmptyEntries)
  26.           Select Number).ToArray
  27.  
  28.        ' Creo un nuevo array con los elementos del array anterior pero añadiéndole el formato deseado.
  29.        ' Ej: {01=5, 02=6, 03=7, 04=8, 05=9, etc...}
  30.        Dim FormattedItems As String() =
  31.            (From Number As Integer In Items
  32.            Select String.Format(strFormat,
  33.                                 Interlocked.Increment(Index), Number)).ToArray
  34.  
  35.        ' Muestro los resultados y si está todo bien los escribo en el nuevo archivo de texto...
  36.        Select Case MessageBox.Show(String.Join(Environment.NewLine, FormattedItems.ToArray),
  37.                                    "¿ Quieres reintentar ?", MessageBoxButtons.YesNo)
  38.  
  39.            Case DialogResult.No
  40.                File.WriteAllLines(NewTextFile, FormattedItems, Encoding.ASCII)
  41.                Application.Exit()
  42.  
  43.            Case DialogResult.Yes
  44.                Application.Restart()
  45.  
  46.        End Select
  47.  
  48.    End Sub
  49.  
  50. End Class

El archivo de texto contenia:
Código:
1 2 3 4
5 7 8 6
10 15 88 90
15 25 77 85

Y el resultado es este:


saludos












Bueno ya me has explicado que eso no era lo que tu necesitas, lo que quieres es contar la cantidad de veces que cada número se repite, y escribirlo en un archivo de texto.

En el código de arriba, símplemente reemplaza la orden de LINQ que uso para el Array 'FormattedItems ', por este otro:

Código
  1.        ' Creo un nuevo array con los elementos del array anterior pero añadiéndole el formato deseado;
  2.        ' Que es poner delante el número de veces que se repite cada número.
  3.        ' Ej: {03=5, 01=6, 05=7, etc...}
  4.        Dim FormattedItems As String() =
  5.            (From Number As Integer
  6.             In Items
  7.             Group By Number Into Count()
  8.             Select String.Format(strFormat, Count, Number)).ToArray

Texto con el que he probado:
Código:
5 7 8 25
66 25 1 2
3 4 3 3 2
99 4 12 13

Resultado:


Edito:
Si quieres ordenar por los más repetidos primero, entonces:
Código
  1.        Dim FormattedItems As String() =
  2.            (From Number As Integer
  3.             In Items
  4.             Group By Number Into Count()
  5.             Order By Count Descending
  6.             Select String.Format(strFormat, Count, Number)).ToArray

(Para ordenarlos al revés pues usas 'Ascending'...)

EDITO: O bien puedes crear un Type anónimo para manejar cada número a tu antojo de mejor forma (esta es la opción por la que yo me decantaría ...para tener mayor control sobre cada objeto):

Código
  1.        Dim FormattedItems =
  2.            (From Value As Integer In Items
  3.             Group By Value Into Count()).ToArray
  4.  
  5.        Dim StrBuilder As New StringBuilder
  6.        For Each Item In (From fItem In FormattedItems Order By fItem.Count Descending)
  7.            StrBuilder.AppendLine(String.Format("Número: {0}", Item.Value))
  8.            StrBuilder.AppendLine(String.Format("Veces Repetido: {0}", Item.Count))
  9.            StrBuilder.AppendLine()
  10.        Next Item
  11.  
  12.        MsgBox(StrBuilder.ToString)

Texto:
Código:
5 7 8 25
66 25 1 2
3 4 3 3 2
1 2 1 4 5
99 4 12 13

Resultado:



Saludos


« Última modificación: 9 Febrero 2014, 18:28 pm por Eleкtro » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines