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
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
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:
(http://img585.imageshack.us/img585/5396/9obi.jpg)
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:
(http://img690.imageshack.us/img690/3893/ymz2.jpg)
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:
(http://img716.imageshack.us/img716/1143/rie7.jpg)
Saludos