compila este Form a ver si es lo que necesitas:
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:
' 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:
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):
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