como se puede contar numero por numero

Iniciado por luis456, 9 Febrero 2014, 16:31 PM

0 Miembros y 1 Visitante están viendo este tema.

luis456

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 (vbnet) [Seleccionar]
Imports System.IO
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim palabras As Integer = 0
        Dim letras As Integer = 0
        Dim numeros As Integer = 0

        Dim lineas As String() = File.ReadAllLines("C:\1.txt")
        For Each linea As String In lineas
            For Each palabra As String In linea.Split(" ")
                If (palabra.Length > 0) Then
                    palabras = palabras + 1
                    For Each letra As Char In palabra.ToCharArray()
                        If (Asc(letra.ToString()) > 47 And Asc(letra.ToString()) < 58) Then
                            numeros = numeros + 1
                        ElseIf (Asc(letra.ToString()) > 64 And Asc(letra.ToString()) < 123) Then
                            letras = letras + 1
                        End If
                    Next
                End If
            Next
        Next

        Label1.Text = "Palabras: " & palabras & Microsoft.VisualBasic.vbNewLine & "Letras: " & letras & Microsoft.VisualBasic.vbNewLine & "Numeros: " & numeros

    End Sub
End Class


Gracias
Luis





Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#1
compila este Form a ver si es lo que necesitas:
Código (vbnet) [Seleccionar]

Imports System.IO
Imports System.Text
Imports System.Threading

Public Class Form1

   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Shown

       ' El archivo de texto que contiene las filas de números.
       Dim OldTextFile As String = "C:\Users\Administrador\Desktop\1.txt"

       ' El nuevo archivo de texto que se escribirá con el formato.
       Dim NewTextFile As String = "C:\Users\Administrador\Desktop\nuevo.txt"

       ' El formato de la cadena.
       Dim strFormat As String = "{0:00}={1}"

       ' Esta variable la usaré para incrementar el índice (01=n, 02=n, 03=n, etc...)
       Dim Index As Integer = 0

       ' Obtengo cada número del archivo de texto, y los meto en un Array.
       ' Ej: {5, 6, 7, 8 , 9, etc...}
       Dim Items As Integer() =
         (From Number As Integer In File.ReadAllText(OldTextFile, Encoding.ASCII).
                                    Split({" "c, vbCrLf}, StringSplitOptions.RemoveEmptyEntries)
          Select Number).ToArray

       ' Creo un nuevo array con los elementos del array anterior pero añadiéndole el formato deseado.
       ' Ej: {01=5, 02=6, 03=7, 04=8, 05=9, etc...}
       Dim FormattedItems As String() =
           (From Number As Integer In Items
           Select String.Format(strFormat,
                                Interlocked.Increment(Index), Number)).ToArray

       ' Muestro los resultados y si está todo bien los escribo en el nuevo archivo de texto...
       Select Case MessageBox.Show(String.Join(Environment.NewLine, FormattedItems.ToArray),
                                   "¿ Quieres reintentar ?", MessageBoxButtons.YesNo)

           Case DialogResult.No
               File.WriteAllLines(NewTextFile, FormattedItems, Encoding.ASCII)
               Application.Exit()

           Case DialogResult.Yes
               Application.Restart()

       End Select

   End Sub

End Class


El archivo de texto contenia:
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 (vbnet) [Seleccionar]
        ' Creo un nuevo array con los elementos del array anterior pero añadiéndole el formato deseado;
        ' Que es poner delante el número de veces que se repite cada número.
        ' Ej: {03=5, 01=6, 05=7, etc...}
        Dim FormattedItems As String() =
            (From Number As Integer
             In Items
             Group By Number Into Count()
             Select String.Format(strFormat, Count, Number)).ToArray


Texto con el que he probado:
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 (vbnet) [Seleccionar]
        Dim FormattedItems As String() =
            (From Number As Integer
             In Items
             Group By Number Into Count()
             Order By Count Descending
             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 (vbnet) [Seleccionar]
        Dim FormattedItems =
            (From Value As Integer In Items
             Group By Value Into Count()).ToArray

        Dim StrBuilder As New StringBuilder
        For Each Item In (From fItem In FormattedItems Order By fItem.Count Descending)
            StrBuilder.AppendLine(String.Format("Número: {0}", Item.Value))
            StrBuilder.AppendLine(String.Format("Veces Repetido: {0}", Item.Count))
            StrBuilder.AppendLine()
        Next Item

        MsgBox(StrBuilder.ToString)


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


Resultado:



Saludos