Programación General > Visual Basic 6.0 e inferiores
Datos de Archivo repetidos o Duplicados en el encabezado de
Metodos Numericos:
Hola a todos
realice un programa con la ayuda de ustedes
mi pregunta es que cargo el archivo que contiene los siguientes datos
75
75
59
43
27
11
10
24
38
52
66
50
34
18
2
1
y el codigo es asi
Private Sub Command5_Click()
Dim FSO As New FileSystemObject
Dim tst As TextStream
Dim n As String
Dim c As Integer
Set tst = FSO.OpenTextFile("C:archivo.txt", ForReading, True)
Me.Picture5.Cls
Do Until tst.AtEndOfStream
n = tst.ReadLine
If CInt(n) >= 60 And CInt(n) <= 75 Then
g = g + 1
Me.Picture5.Print n
If g = 5 Then
Exit Do
End If
End If
Loop
tst.Close
Set FSO = Nothing
End Sub
no hay problema con el
El codigo no genera el archivo
pero en el archivo me muestra solo numeros repetidos/Duplicados en el encabezado del archivo, como ejemplo el 75
yo solo quiero que muestre un solo un numero que en este caso es 75
el archivo lo importo de una base de datos
agradesco sus valiosas ayudas
Exitos a ustedes
Nebire:
Tu problema es que quieres aprender a base de preguntas y ese modo de aprender puede costarte años, por qué, porque hasta que no te sueceda un problema no tendrás necesidad de preguntar, más aún si tienes un problema intentarás resolverlo por tu cuenta, si se soluciona ya no preguntarás por lo que no profundizas en la raíz de las cuestiones. Esto ocasiona un aprendizaje lleno de lagunas.
Respecto de los que estamos en la 'otra parte', nos fastidia que alguien 'basuree' el foro con preguntas que no son técnicas y cuyo respuesta es básica y se encuentra en los fundamentos sea de la programación o del lenguaje.
Entonces por favor, tómate un manual de programación y estúdialo, pero ya ni siquiera de VB si no de principios de la programación. Tienes carencias tales como que no sabes lo que es un bucle ni un condicional. El foro no está pensado para atender 'programadores de parvulario', hay que tener una base mínima, simepre se podrá responder a una cuestión tonta, pero sólo si es puntual, si se convierte en la norma será mejor emigrar a otro lugar...
Tu dices que quieres obtener 1 único valor pero que te aparecen varios, entonces porque le dices 'if g= 5 then exit do', en que quedamos quieres tomar 1 o 5 (si 'aparecen')... ???????
p.d.:
Por otro lado tampoco sabes preguntar, releyendo tu pregunta me hace dudad de si lo que quieres no es un '1 sólo número', sino que '1 número sólo aparezca 1 vez'... Si no eres capaz de ordenar tus pensamientos para solicitar lo que necesitas será bastante más difícil que otros entiendan lo que tu quieres decir si tú mismo no sabes lo que quieres preguntar.
en el supuesto de que fuere este caso (tenemos que hablar con hipótesis en situaciones así), lo que tienes que hacer es primero recoger los elementos que cumplen el patrón y luego filtrarlos para que no haya repetidos. en este caso si se trataría de una cuestión técnica, pués aunque la solución es relativamente fácil, la gente no suele encontrarla. Trataré esta resolución en el siguiente mensaje...
Por favor aprende los principios básicos de programación, no puedes pretender correr sin saber primero andar.
Nebire:
Filtrar una lista de modo que sólo quede una copia de cada elemento sin repetición... (este o algo parecido es la idea que debería ser el título del mensaje).
Sea una lista de elementos (en el ejemplo consideramos números y más concretamente usaremos byte), dicha lista contiene una cantidad arbitraria de elementos, se desea obtener una lista que incluya única copia de cada eleemnto.
Para crear elcódigo y una demostración visual, vamos a necesitar 2 listbox y 2 botones.
* El lis1 contendrá un volcado con la lista de elementos original,
* El lis2 tendrá un volcado cion la lista de elementos ya filtrados.
* El btn1 crea una lista de elementos aleatoria (nos aseguramos que existan repetidos) y presenta la listas en lis1
* El btn2 lama a la función que filtra la lista y presenta el resultado en el lis2
Código previo:
--- Código: Visual Basic --- ' nótese la declaración de la matriz a nivel de formulario...Dim ElemOrig(0 To 9999) As Byte Private Sub Form_Load() ' queremos usar el generador aleatorio de números, implantamos una semilla diferente en cada uso. Randomize Timer End Sub
Código del boton 1:
* El btn1 crea una lista de elementos aleatoria (nos aseguramos que existan repetidos) y presenta la listas en lis1
--- Código: Visual Basic --- Private Sub Btn1_Click() Dim k As Integer Lis1.Clear ' vaciamos elcontenido actual ' un byte tiene un valor cuyo rango oscila entre 0 y 255, si proveemos más de 256 valores ' tenemos la certeza de que habrá repetidos. ' usamos 10.000 elemntos debe haber alrededor de 40 repeticiones de cada elemento For k = 0 To 9999 ElemOrig(k) = Int((255 + 1) * Rnd) Lis1.AddItem (ElemOrig(k)) NextEnd Sub Debe notarse que el generador aleatorio, porporciona realmente valores pseudo-aleatorios.
Código del botón 2: * El btn2 lama a la función que filtra la lista y presenta el resultado en el lis2
--- Código: Visual Basic --- Private Sub Btn2_Click() Dim k As Integer, n As Integer Dim ElemFil() As Byte ' vaciamos elcontenido previo Lis2.Clear ' ejecutamos el filtrado ElemFil = FiltrarUnicos(n) ' volcamos la matriz obtenida en el listbox For k = 0 To n - 1 Lis2.AddItem (ElemFil(k)) Next Erase ElemFil ' liberamos memoria ... ' indicamos cuantos elementos únicos se ha hallado. MsgBox "se han encontrado " & n & " elementos únicos sonre los 10.000 originales."End Sub
Código de la función que realiza el filtrado.
--- Código: Visual Basic --- ' devuelve el número de elementos únicosPrivate Function FiltrarUnicos(ByRef n As Integer) As Byte() Dim k As Integer Dim ls() As Integer Dim ElemFil() As Byte ' Hacemos que la lista de devolución tenga el mismo tamaño que la original ReDim ls(0 To 9999) ReDim ElemFil(0 To 999) ' vamos recreando en una lista intermedia, la cantidad de apariciones de cada elemento For k = 0 To 9999 ls(ElemOrig(k)) = ls(ElemOrig(k)) + 1 Next ' si la lista intermedia tiene un valor mayor que 0 ese elemnto existe en la lista original, lo tomamos For k = 0 To 9999 If ls(k) > 0 Then ElemFil(n) = k n = n + 1 End If Next Erase ls ' la lista definitiva, tiene espacio no usado lo retiramos ReDim Preserve ElemFil(0 To n - 1) ' devolvemos la lista filtrada ordenada de menor a mayor. FiltrarUnicos = ElemFil Erase ElemFilEnd Function
Como verás sólo podrás aplicarlo a tu código si logras entenderlo y por tanto sabes como implementarlo... esto es, no te voy a dar el código exacto a tu problema, el objetivo es que aprendas para resolver por tí mismo los problemas que se presenten no resolver un problema puntual a base copiar y pegar.
Esta solución tiene algunos inconvenientes que detallo.
Utiliza memoria adicional por loque si una lista tiene pongamos 100 millones de elementos puede suponer un gran consumo de memoria en el equipo. Debe tenerse en cuenta...
No vale para casos donde los elementos tienen valores decimales (se puede modificar para lograr que valga, pero la memoria a usar se dispara * 10 por cada decimal usado, es decir si tienes una matriz de 10.000 elementos la matriz intermedia para 4 decimales (por ejemplo un tipo de datos currency) usaría 10.000 * (10^4) elemntos es decir : 10.000.000 (10 millones). Este valor se duplica por que la matriz de salida inicalmente debe contemplar el mismo número de elemtnos que la matriz intermedia.
En definitiva sólo es útil para números enteros y atendiendo al tamaño de la matriz para vigilar la memoria usada. Tiene a favor que es el más rápido.
Este algoritmo es una implementación del algoritmo conocido como 'counting', que se utiliza para ordenar números (que tiene las mismas limitaciones descritas), sólo que en este caso hay una modificación dirigida a filtrar elementos repetidos.
Metodos Numericos:
Bueno peimero que todo señor estoy preguntado una cosa que si YO NOSE Y ES CIERTO
Y SABEN QUE SEÑORES MIS PREGUNTAS FUERON PARA QUE RESOLVIERAN A SE SEAN SIMPLES Y UNA COSA PARA LOS MIENBROS NO DOY MAS A ESTE FORO
Y USTED SEÑOR RESPECTE A LAS PERSONAS A SI SE QUE USTED SEA EL MEJOR DE ESTE MUNDO EN PROGRAMACION PERO COMO PERSONA ES UNA PERSONA DESPOTA EN MI PAIS PARA RESUMIRLO USTED EN UNA PROQUERIA Y RESPESTE SEÑOR
QUE SOLO PEDI UNA PREGUNTA SI SE PARECIO MUY ABURRIDA ERA MEJOR QUE NO LA CONTESTARA Y NO MIRE BIEN SU CODIGO PORQUE NO MEGUSTO LA FORMA DE DIRIGIR A UNA PERSONA QUE NECESITABA AYUDA NO REGAÑOS
NO NO NO SERE MAS MIEMBRO DE ESTE FORO asi que al moderador le envio un correo para no ser mas de este miembro y perdone por lo demas
GRACIAS
Nebire:
Si, así se hace.
Insultar a quien no ha hecho otra cosa que darte consejos (no verás que te haya insultado en ninguna parte) y despreciar el tiempo que te he dedicado... y todo sólo porque tu orgullo es más grande que tu entusiasmo por la programación. La programación la tendrás a un nivel bajo, pero el orgullo está al tope. Una palabra que no te gusta y rebosas y eso que sólo te doy consejos y te lo pido por favor.
Sé noble e inteligente: toma la ayuda que te he ofrecido para resolver tu problema, tómate un manual y tiempo al menos para leerlo (siempre se queda algo) y no sueltes espumarajos por la boca... careces de ambas, ni nobleza ni inteligencia, pero lleno de ego ...Vaya lobo enfundado en piel de cordero...
Tú mismo...
Navegación
[#] Página Siguiente
Ir a la versión completa