Visual Basic para Aplicaciones - Gracias The emulator

Life is soft - evento anual de software empresarial
 
Vista:

Gracias The emulator

Publicado por Eduardo (6 intervenciones) el 02/11/2006 00:49:54
Hola a todos, primero de todo dar las gracias a the emulator por la respuesta que me dio acerca de sustituir caracteres en un archivo de texto, y segundo otra duda, esta aplicacion, la de sustituir caracteres la hice con la funcion Replace, con lo que me sustituye todos los caracteres por lo que yo quiero, por ejemplo me cambia los 5 por L, pero si yo tengo un 55 me escribe LL, pero el 55 no lo quiero cambiar, ni ningun otro que contenga un 5, solo los 5 solos, como lo hago??
Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Gracias The emulator

Publicado por The Emulator (29 intervenciones) el 02/11/2006 01:26:19
Bueno pues simplemente tienes que cambiar el criterio de busqueda.

tu estas buscando todo lo que tenga 5 para remplazar por L si solo quieres remplazar donde aparesca unicamente el 5 usa esto

Texto=Replace(Texto," 5 "," L ")
Nota que hay un espacio antes del 5 y despues del 5 asi que buscara donde aparesca solo el cinco, tambien nota que hay un espacio antes de la L y despues de la L.

Aqui tendriamos un problema y es que si la cadena epieza con 5 no la ba a remplazar porque estamos buscando _5_ y al comenzar la cadena no hay espacios, asi que para que sirva hay que concatenar un espacio al inicio y uno al final de la cadena antes de remplazar el texto osea
'Lo que esta entre comillas es un epacio.
Texto=" " & Texto & " "
Texto=Replace(Texto," 5 "," L ")

Saludos
http://www.theemulator.tk
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Gracias The emulator

Publicado por EDUARDO (6 intervenciones) el 02/11/2006 15:30:54
Pero me suma el espacio al principio y al final del texto no al principio y al final de cada linea, entonces esto no me vale porque no me cambia nada
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Gracias The emulator

Publicado por The Emulator (29 intervenciones) el 02/11/2006 21:12:18
Hola

JEJEJE tienes razon no habia caido en cuenta de eso ya que se me paso por completo lo de que el texto puede estar en varias lineas.

Bueno le hize un pequeño cambio al codigo (en realidad lo cambia todo).

Este seria el codigo que ya probe y sirvio

'--------------------------Codigo--------------------------------
Dim Pos As Integer
Dim Ultimo As Integer
Dim Texto As String

Texto = " " & Text1 & " "

Pos = -1
Ultimo = 1

While Pos <> 0
Pos = InStr(Ultimo, Texto, "5")
If Pos <> 0 Then
If Mid(Texto, Pos - 1, 1) = " " Or Mid(Texto, Pos - 1, 1) = Chr(13) Then
If Mid(Texto, Pos + 1, 1) = " " Or Mid(Texto, Pos + 1, 1) = Chr(10) Then
Texto = Mid(Texto, 1, Pos - 1) & "L" & Mid(Texto, Pos + 1, Len(Texto))
End If
End If
End If

Ultimo = Pos + 1
Wend
Texto = Mid(Texto, 2, Len(Texto) - 1)
Text1 = Texto
'--------------------------Fin Codigo--------------------------------

Te explico por enciam que hace el codigo.
Lo primero que hacemos es concatenar un espacio al inicio y al final de la cadea(Para ahorrarnos unas cuantas lineas de codigo)
lo segundo es empezar a buscar donde hay un 5 eso lo hacemos con la funcion InStr la cual busca un texto dentro de una cadena y nos devuelve la posicion donde la encontro uhna vez que encuentra el 5 tenemos que mirar si esta solo osea mirar que no tenga nada a los lados es por eso que buscamos si hantes de ese 5 hay un espacio o el caracter 13 que es el que equivale al retorno de carro(un enter esta conformado por dos caracteres salto de linea=10 y retorno de carro=13) si se encontro uno de estos dos caracteres sabemosque el 5 no tiene nada extraño a la izquierda, luego hacemos la misma conparacion al lado derecho miramos si hay un espacio o el caracter 10 que es el que equivale al salto de linea si esta uno de estos caracteres ya sabemos que el 5 esta solito y procedemos a remplazarlo.

Una vez que se revisa todo el texto quitamos los espacios que agregamos al principio y lo mostramos otravez en la caja de texto original

Todo eso esta dentro de un ciclo while del cual no sale hasta que no recorra toda la cadena de texto

Espero esta vez sea lo correcto.

Saludos
http://www.theemulator.tk
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Gracias The emulator

Publicado por Eduardo (6 intervenciones) el 03/11/2006 00:17:16
Uff ahora lo que me hace es que me copia el archivo de texto tal y como esta originalmente, sin hacerme ningun cambio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Gracias The emulator

Publicado por The Emulator (29 intervenciones) el 03/11/2006 00:40:05
Bueno pues hay algo raro porque ese codigo lo hize y lo probe y me funciono.

no lo pruebes todo desde tu programa, simplemente coloca una caja de texto en un formulario y escribe algun texto en ella y coloca el codigo fuente que te coloque en un boton y pruebalo.

Por ejemplo escribe esto en la cajade texto

5 555 sdd5df5 5sd
df5 dfdsfd fdjhh dfg 5
sdf dsfd 5 5 dsf55
5
5
sdf 5

preciona el boton y veras que todos los 5(5 solito) fueron remplazados por L

asi veras que si sirve solo faltaria revisar porque no funciona con lo que ya tienes del programa

Saludos
http://www.theemulator.tk
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Gracias The emulator

Publicado por Eduardo (6 intervenciones) el 03/11/2006 00:57:51
Continuo teniendo el mismo problema. Me suma un espacio al principio y al final del texto y no al principio y al final de cada linea, entonces me sustituye el primer y ultimo 5 y los otros 5 que estan entre espacios pero los dos 5 que estan en medio no me los cambia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Codigo completo (carga, remplazo y guardado)

Publicado por The Emulator (29 intervenciones) el 03/11/2006 01:30:45
Bueno aqui esta todo el codigo completo desde cuando se carga el archivo, cuando se remplaza y luego cuando lo guarda.

YA LO PROBE Y TODO FUNCIONO OK
Lo probe con estos datos en el archivo de texto (C:\TuArchivo.txt)

5 555 sdd5df5 5sd
df5 dfdsfd fdjhh dfg 5
sdf dsfd 5 5 dsf55
5
5
sdf 5

'-------------------------------Inicio Codigo------------------------
Option Explicit

Private Sub btnAbrir_Click()
Dim Linea As String
Dim Texto As String

Open "C:\TuArchivo.txt" For Input As 1
While Not EOF(1)
Line Input #1, Linea
Texto = Texto & Linea & vbCrLf
Wend
Close 1

txtDatos = Texto
End Sub

Private Sub btnGuardar_Click()
Dim Texto As String

Texto = txtDatos
Open "C:\TuArchivo.txt" For Output As 1
Print #1, Texto
Close 1
End Sub

Private Sub btnRemplazar_Click()
Dim Pos As Integer
Dim Ultimo As Integer
Dim Texto As String
Dim blnRemplazar As Boolean

Texto = " " & txtDatos & " "

Pos = -1
Ultimo = 1

While Pos <> 0
blnRemplazar = False
Pos = InStr(Ultimo, Texto, "5")
If Pos <> 0 Then
If Mid(Texto, Pos - 1, 1) = " " Or Mid(Texto, Pos - 1, 1) = Chr(10) Then
blnRemplazar = True
Else
blnRemplazar = False
End If

If (Mid(Texto, Pos + 1, 1) = " " Or Mid(Texto, Pos + 1, 1) = Chr(13)) And blnRemplazar = True Then
blnRemplazar = True
Else
blnRemplazar = False
End If

If blnRemplazar = True Then
Texto = Mid(Texto, 1, Pos - 1) & "L" & Mid(Texto, Pos + 1, Len(Texto))
End If
End If
Ultimo = Pos + 1
Wend
Texto = Mid(Texto, 2, Len(Texto) - 1)
txtDatos = Texto
End Sub
'-------------------------------Fin Codigo------------------------

Saludos
http://www.theemulator.tk
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Codigo completo (carga, remplazo y guardado)

Publicado por Eduardo (6 intervenciones) el 06/11/2006 00:15:27
Bueno, este codigo si me ha funcionado, pero ahora tengo un par de problemillas mas jeje. Este codigo sustituye solo una cifra, cuando el 5 es un 12 por ejemplo no lo coge, que tendria que cambiar para que lo cogiese??

Y otra cosa, si ademas tengo esto:
+500+200+30+50

Y quiero convertirlo en:
X+50.0Y+20.0I+3.0J+5.0

Que tengo que hacer??

Los numeros podran cambiar

Un saludo y muchisimas gracias por tu ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Codigo completo (carga, remplazo y guardado)

Publicado por The Emulator (29 intervenciones) el 06/11/2006 15:20:32
Que tal Eduardo

Que bien quie te funcionara ya.

Bueno con respecto a tu primera inquietud ya esta cuadrado el codigo para remplazar, le hize unos pequeños cambios para que funcionen sin importa que texto buscas puedes buscar por ejemplo 5,12,1000 o cualquier otra cosa y te lo remplaza por lo que tu quieras.

Lo unico que tienes que cambiar es lo que quieres buscar y por lo que vas a remplazar esos valores estan almacenados en las variables TextoBuscar y Texto Remplazar.

Por ejemplo
TextoBuscar="12"
TextoRemplazar="L"
Eso buscaria donde encuentre un 12 y lo remplaza por una L

Tambien prodria se asi:

TextoBuscar="12"
TextoRemplazar="LACASA"

'-----------------------------Inicio codigo boton Remplazar------------------------------
Private Sub btnRemplazar_Click()
Dim Pos As Integer
Dim Ultimo As Integer
Dim Texto As String
Dim TextoBuscar As String
Dim TextoRemplazar As String
Dim blnRemplazar As Boolean

'Texto que se usara para buscar
TextoBuscar = "12"
TextoRemplazar = "LALA"

Texto = " " & txtDatos & " "

Pos = -1
Ultimo = 1

While Pos <> 0
blnRemplazar = False
Pos = InStr(Ultimo, Texto, TextoBuscar)
If Pos <> 0 Then
If Mid(Texto, Pos - 1, 1) = " " Or Mid(Texto, Pos - 1, 1) = Chr(10) Then
blnRemplazar = True
Else
blnRemplazar = False
End If

If (Mid(Texto, Pos + Len(TextoBuscar), 1) = " " Or Mid(Texto, Pos + Len(TextoBuscar), 1) = Chr(13)) And blnRemplazar = True Then
blnRemplazar = True
Else
blnRemplazar = False
End If

If blnRemplazar = True Then
Texto = Mid(Texto, 1, Pos - 1) & TextoRemplazar & Mid(Texto, Pos + Len(TextoBuscar), Len(Texto))
End If
End If
Ultimo = Pos + Len(TextoBuscar) + 1
Wend
Texto = Mid(Texto, 2, Len(Texto) - 1)
txtDatos = Texto
End Sub
'-----------------------------Fin codigo boton Remplazar------------------------------


Con respecto a tu segunda duda eso si esta enrredado porque no entiendo que es lo que haces con +500+200+30+50 para que te de X+50.0Y+20.0I+3.0J+5.0 osea que logica hay que aplicar para llegar a ese resultado.

Saludos
http://www.theemulator.tk
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Codigo completo (carga, remplazo y guardado)

Publicado por eduardo (6 intervenciones) el 07/11/2006 00:25:12
Bueno, realmente en esta parte del programa solo se debera añadir X Y I J delante de cada simbolo de + siempre en ese orden, los numeros pueden variar pero los simbolos + siempre apareceran y se tendra que colocar siempre X Y I J en el mismo orden.
Ademas en todos los numeros tengo que colocar una coma antes del ultimo numero (vienen en milimetros y tengo que ponerlos en centimetros)

Un saludo, y perdona por todas las molestias que causamos los que intentamos aprender
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar