wenas, toy creando una consola y se me ocurrio empezar a añadirle ya comandos.
Mi pregunta es como puedo hacer esto:
Comando: RD /S /Q, bien al poner eso en la consola no soy capaz de hacer que interprete los modificadores /S /Q y encima tampoco reconoce RD ya que despues hay mas palabras.
mi idea esque cada vez que haya un espacio la palabra que siga sea una variable(ahora mismo lo tengo todo en una variable):
A=ConsoleReadLine asi es como funciona, y entonces una vez hecho eso ¿como puedo hacer que reconozca los espacios? EJ:
Clean _ /e _ /r (comandos fantasiosos)
| | |
v v v
Var1 Var2 Var3
_ = espacio
Por cada espacio seguido de una letra que lo identifique como una variable..
espero que se haya entendido...un saludo y grax de antemano
Utiliza la función Split para separar el comando de los argumentos.
Saludos.
Con la función Split.
Dim A As String
Dim v As Variant
A = "Clean /e /r"
v = Split(A, " ")
'v(0) = Clean
'v(1) = /e
'v(2) = /r
'Ejemplo:
Dim i As Integer
For i = 0 To 2
MsgBox v(i) & " es el parámetro " & i
Next
Saludos!
aaronduran2 ha posteado mientras lo hacia yo, pero bueno ya te dejo el ejemplo
grax!! :laugh: voy a probarlo yaaaa ;D
No entiendo bien el code :(, lo he intentado poner en un form nuevo para probarlo pero me saltan errores.
si puedes poner un ejemplo mas explicado o algo asi...:xD
un saludo y grax ;D
PD:cuando poneis un code sale con colores y muy bonito, ¿como lo haceis xD?(los q pongo yo noo :¬¬) ;)
Imagínate que tienes una variable con el texto "Hola /a /b /c".
Pues para separarlo utilizas Split, de forma que quedaría así:
Option Explicit
Dim i As Integer
Dim s_Texto As String
Dim v_Argumentos As Variant
s_Texto = "Hola /a /b /c"
v_Argumentos = Split(s_Texto, " ")
For i = 0 To 2
MsgBox "Argumento: " & v_Argumentos(i)
Next
Es lo mismo que puso Spider-Net. El error posiblemente se deba a que tienes Option Explicit y no se declara la variable i.
Para poner el código coloreado, utiliza las etiquetas GeSHi. Cuando posteas algo, arriba a la derecha tienes un menú desplegable que te permite añadir las etiquetas para los diferentes lenguajes.
Saludos.
Grax a los dos ;), ok lo he puesto y me detecta el primer argumento clear, pero al poner en la consola clear /q /u no me salta el mensaje, sera porq teng que declarar los parametros no?
xD donde los declaro¿?
If a = "clear" Then
v = Split(a, " ")
For i = 0 To 2
MsgBox "Argumento: " & v(i)
Next
End If
asi es como detecta la consola los comandos que pongo, esta bien asi o creeis que hay mejores formas XD?
un saludo
Bueno amigo, la cadena "clear" es diferente de la cadena "clear /q /u", en este caso lo que puedes hacer es buscar la cadena "clear" dentro de la cadena que recibes "Instr".
Y te sale hacer uso de "UBound".
Saludos!!
wenas, ya se q es diferente ajaja :xD :xD , voy a hacer eso q has dicho de buscar la palabra dentro de la cadena y una vez encontrado que busque los modificadores ;) es buena
por ciero lo de "UBound" lo he buscado en el vb y no me sale ninguna referencia
un saludo
wenas de nuevo, he estado mirando y no tengo nada para buscar palabras (me sonaba que tenia alguna funcion en un modulo...) pero nose si no la tengo o esta perdida por alguna parte :-\
alguien tiene algo a mano?
un saludo
:huh: :huh: :huh: :huh: :huh:
InStr
wenas, ya Spider-Net pero nunca he usado la funcion que has puesto, y he estado mirando la msdn online pero no soy capaz de hacerlo funcionar en la consola..
ttp://msdn.microsoft.com/es-es/library/8460tsh1(VS.80).aspx (http://ttp://msdn.microsoft.com/es-es/library/8460tsh1(VS.80).aspx) le falta una H al principio.
si me pones un pequeño ejemplo (q no parecido el de la pag, q ademas no me funciona xDD) te lo agradeceria ;)
bueno venga un saludo
Hola WestOn todas esas dudas Instr ,Ubound estan en un manual de visual basic...esa pagina es de visual basic .NET...digamos que es lo mismo..pero algunas funciones cambian y por eso es mejor mirar algo de visual basic 6...
saludos.
ya decia yo :-X, ok voy a mirar el tuto del guille que seguro estaran esas funciones.. ahora cuando lo haga dejare un pequeño ejemplo por si alguien lo quiere
un saludoo
wenas, haber he hecho este ejemplo bien sencillo pero me salta un error ("se esperaba =")
Option Explicit
Dim a As String
Private Sub Command1_Click()
InStr(a, "clear", vbTextCompare) 'Aqui salta el error
End Sub
Private Sub Form_Load()
a = "dgh ttdx tnh ck bd tbs xjthm cn clear rgtfc txvhtxv"
End Sub
si no entendi mal InStr lee desde el inicio la variable, busca la palabra 'clear', y la ultima opcion es para comparar texto, ¿que me falla?
un saludo y grax de antemano
pues claro..el Instr se le tiene qeu pasar a una variable o lo tenes que comparar con un if o con un msgbox lo podes mostrar..no lo podes poner asi nomas...el Instr devuelve un integer ..si es 0 no encontro la palabra y si es desigual a 0 te devuelve la posicion en la que la cadena que buscaste se encuentra..mira:
Option Explicit
Dim a As String
Private Sub Command1_Click()
MsgBox InStr(a, "clear")
End Sub
Private Sub Form_Load()
a = "dgh ttdx tnh ck bd tbs xjthm cn clear rgtfc txvhtxv"
End Sub
ahi te devuelve 33 qeu es la posicion de la palabra "Clear" que buscas...en vez de un msgbox podes poner una variable y hacer un if asi:
Option Explicit
Dim a As String
Dim i As Integer
Private Sub Command1_Click()
i = InStr(a, "clear")
If i = 0 Then
MsgBox "no se encontro la palabra"
Else
MsgBox "se encontro la palabra en la posicion " & i
End If
End Sub
Private Sub Form_Load()
a = "dgh ttdx tnh ck bd tbs xjthm cn clear rgtfc txvhtxv"
End Sub
saludos.
grax seba123neo, yo creo que ya con esto puedo seguir con lo de la consola ;D
un saludo
Wenas, aqui esta este ejemplo q funciona :xD, poner 1 commandbotton & un text :
Option Explicit
Dim a As String, z
Dim i As Integer
Private Sub Command1_Click()
a = Text1
z = 0
If z = 0 Then
i = InStr(a, "clean /s")
If i = 0 Then
'no ta
Else
i = InStr(a, "/q")
If i = 0 Then
MsgBox "Clean /S", vbInformation, "info"
Else
MsgBox "Clean /S /Q", vbInformation, "info"
End If
End If
End If
End Sub
el problema esque no es capaz de reconocer el comando /q solo, ¿alguna idea?
saludoss
¿Pero por qué no usas el split que es mucho más fácil? Y un consejo compañero, acostúmbrate a tabular (indentar) tu código porque es más fácil de comprender:
A ver, un ejemplo:
'Ejemplo de uso de Split para separar comandos
'Por Auron
'Espero que lo entiendas bien esta vez
Option Explicit
Dim a, resultado As String
Dim i, contador As Integer
Dim v As Variant
Private Sub Command1_Click()
a = Text1.Text 'Se almacena en a la cadena
v = Split(a, " ") 'Se separa cada parametro con un split
'v(0) = primer parametro
'v(1) = segundo parametro
'v(2) = tercer parametro... etc
'Se cuenta el numero de espacios que hay en el texto, así sabremos
'cuantos parámetros hay, porque entre cada parámetro ha de haber un espacio
For i = 1 To Len(a)
If Mid(a, i, 1) = " " Then
contador = contador + 1 'contador almacena el número de espacios
End If
Next
'Si el primer parametro es el comando clean entramos
If LCase(v(0)) = "clean" Then
resultado = "clean" 'asignamos el resultado clean
'Si contador es mayor o igual que 1 es que hay uno o más parámetros
If contador >= 1 Then
If LCase(v(1)) = "/q" Then
resultado = resultado & " /q" 'Si el parámetro 1 es /q se almacena en resultado
ElseIf LCase(v(1)) = "/s" Then
resultado = resultado & " /s" 'Si el parámetro 1 es /s se almacena en resultado
End If
End If
'Si contador es mayor o igual que 2 es que hay dos o más parametros
If contador >= 2 Then
If LCase(v(2)) = "/q" Then
resultado = resultado & " /q" 'Si el parámetro 2 es /q se almacena en resultado
ElseIf LCase(v(2)) = "/s" Then
resultado = resultado & " /s" 'Si el parámetro 2 es /s se almacena en resultado
End If
End If
'Mostramos el resultado
MsgBox "El comando resultante es: " & resultado, vbInformation, "Resultado"
End If
End Sub
wenas, esque lo del split tampoco lo he usado nunca y tenia que mirar tambien lo del InStr... :P
Lo de identar el code me ha sido imposible...(tenia otra idea en la cabeza, primer post) pero lo q vosotros decis esq esta mejor, voy a probar el ejemplo grax Spider-Net
Cita de: WestOn en 18 Octubre 2008, 22:29 PM
wenas, esque lo del split tampoco lo he usado nunca y tenia que mirar tambien lo del InStr... :P
Lo de identar el code me ha sido imposible...(tenia otra idea en la cabeza, primer post) pero lo q vosotros decis esq esta mejor, voy a probar el ejemplo grax Spider-Net
Identar es tabularlo, sólo poner tabuladores para saber que instrucciones se ejecutan dentro de cada procedimiento.
Saludos
aaaaaa :laugh:...pensaba q decias idear,crear o algo asi
Esta perfecto el code ::)
Un saludo ;D
Como ya te dijeron, léete un manual básico sobre todo el manejo de cadenas (que te hace mucha falta) o caerás acá preguntando lo mismo una y otra vez.
Para lo que hacías, yo lo haría así:
Option Explicit
Dim sCadena As String
Dim sCacho() As String
Dim sResultado As String
Dim I As Integer
Private Sub Cmd_Click()
sCadena = Trim$(Text1.Text)
sCacho = Split(sCadena, " ")
sResultado = ""
For I = 0 To UBound(sCacho)
Select Case (LCase$(sCacho(I)))
Case "clean": sResultado = sResultado & sCacho(I) & " "
Case "/q": sResultado = sResultado & sCacho(I) & " "
Case "/s": sResultado = sResultado & sCacho(I) & " "
End Select
Next
MsgBox sResultado
End Sub
Y hay, más case para más parámetros y dentro de los case las rutinas o funciones que se requieran.
http://www.elguille.info/vb/vb6/stringFunctions.htm (http://www.elguille.info/vb/vb6/stringFunctions.htm)
http://www.recursosvisualbasic.com.ar/htm/tutoriales/tutorial-basico5.htm (http://www.recursosvisualbasic.com.ar/htm/tutoriales/tutorial-basico5.htm)
saludos!!
El ejemplo de cΔssiΔnі está mucho mejor que el mío. Además usó la función Trim para eliminar posibles espacios al final o al principio del comando introducidos por error.Así que te recomiendo que uses su ejemplo.
Un saludo!
wenas, esta bien el code, voy a ver como lo uso en el proyecto y cuando termine cuelgo el proyecto para que le echeis una ojeada (ya q el 'motor' del exe es vuestro ajajaj) aver si no tengo mas contratiempos y lo posteo hoy. un saludo y grax ;)
PD:los enlaces son bastante buenos (el de recursosvisualbasic no lo conocia)
Wenas, estuve cambiando el motor del proyecto por esto:
Esto es para que cambie la variable a 1 (todas estan en 0 desde el principio) y la que este en 1 se abre:
Public Sub A1()
Dim x As String, z
Dim i As Integer
i = InStr(a, "clean")
If i = 0 Then
'no ta
Else
E = 1 'la cambia si se encuentra clean
End If
i = InStr(a, "jo")
If i = 0 Then
Else
F = 1
End If
End Sub
Hasta ahi todo perfecto(si se pone solo no funciona bien xDD) pero si dentro del if ponemos lo que puso cΔssiΔnі funciona mejor!! pero algo esta mal y solo detecta el comando solo (clean, jo) los modificadores no:
If E = 1 Then 'comando clean
Dim sCacho() As String
Dim sResultado As String
Trim$ (a) ' quita espacios al principio-final
sCacho = Split(a, " ")
sResultado = ""
For i = 0 To UBound(sCacho)
Select Case (LCase$(sCacho(i)))
Case "clean": sResultado = sResultado & sCacho(i) & " "
MsgBox "indicar parametro"
Case "clean /q": sResultado = sResultado & sCacho(i) & " "
MsgBox "clean /q"
Case "clean /s": sResultado = sResultado & sCacho(i) & " "
MsgBox "clean /S"
End Select
Next
MsgBox sResultado
End If
haber si se me ha entendido.. :laugh: un saludo y grax de antemano
De entrada, muchas gracias por NO hacerme caso con lo de indentar tu código :¬¬, ya te lamentarás cuando programes códigos largos... en fin.
Estás muy perdido. Así en principio, deberías de leerte un manual de Visual Basic antes de intentar cosas más complicadas, porque te damos cosas hechas y que funcionan y te las cargas. xD
De entrada, no sé para que quieres esta parte del código:
Public Sub A1()
Dim x As String, z
Dim i As Integer
i = InStr(a, "clean")
If i = 0 Then
'no ta
Else
E = 1 'la cambia si se encuentra clean
End If
i = InStr(a, "jo")
If i = 0 Then
Else
F = 1
End If
End Sub
¿Para saber si está clean?. Eso ya lo hace tanto el código de cΔssiΔnі como el mío. Comprueban si existe el comando clean con if o con select case pero ambos lo comprueban, no necesitas ningún if antes.
Y esto ya...
If E = 1 Then 'comando clean
Dim sCacho() As String
Dim sResultado As String
Trim$ (a) ' quita espacios al principio-final
sCacho = Split(a, " ")
sResultado = ""
For i = 0 To UBound(sCacho)
Select Case (LCase$(sCacho(i)))
Case "clean": sResultado = sResultado & sCacho(i) & " "
MsgBox "indicar parametro"
Case "clean /q": sResultado = sResultado & sCacho(i) & " "
MsgBox "clean /q"
Case "clean /s": sResultado = sResultado & sCacho(i) & " "
MsgBox "clean /S"
End Select
Next
MsgBox sResultado
End If
¿Pero qué lío has hecho ahí?. ¿Un msgbox para cada resultado? Por qué modificas el código de cΔssiΔnі si funcionaba bien?
Private Sub Cmd_Click()
sCadena = Trim$(Text1.Text)
sCacho = Split(sCadena, " ")
sResultado = ""
For I = 0 To UBound(sCacho)
Select Case (LCase$(sCacho(I)))
Case "clean": sResultado = sResultado & sCacho(I) & " "
Case "/q": sResultado = sResultado & sCacho(I) & " "
Case "/s": sResultado = sResultado & sCacho(I) & " "
End Select
Next
MsgBox sResultado
End Sub
El Msgbox sResultado va sólo al final, no uno por cada case, el case lo que hace es ir añadiendo los parámetros si se los encuentra y sino no añade nada, no tienes que poner un msgbox por cada case. Eso sobra.
Case "clean": sResultado = sResultado & sCacho(i) & " "
MsgBox "indicar parametro"
Y eso tampoco tengo idea para que lo has puesto. Si ese case lo que hace es si encuentra la cadena clean la almacena en sResultado, sobra ahí msgbox, igual que todos los demás, un msgbox al final y listo.
Por último decirte que no pegues todo el código, queda mucho más claro tabulado y con saltos de línea para separar algunas cosas tal y como lo tenemos cΔssiΔnі y yo. Así como tú lo pones no sé si es que lo ves más claro, pero lo que haces es hacerlo más ilegible. Quitando todo lo que tú pones y dejando sólo y exclusivamente lo de cΔssiΔnі el código funciona perfectamente. Así que no lo modifiques mejor. Y sobre todo intenta leer y aprender a programar en Visual Basic antes de meterte en proyectos que te vienen grandes, es sólo un consejo.
Saludos!
wenas, lo he tabulado un poco(lo tabulare mas el proximo ;)), me dejado alguna cosa porq pense que se entenderia, error mio :rolleyes:.La idea esta pues era porque con un code esta bien, pero ya cuando pongo mas de diez me parece un poco abultado y me lio yo solo con tanto code, de todas formas voy a usar lo de cΔssiΔnі y pondre todos los code dentro.
Lo de los mensajes lo puse por poner algo (en vez de poner consolewrite puse msgbox para que os fuera mas facil :P) y no me cargo el code jajaja pero no funciona cuando hago eso :xD va es broma, venga un saludo y grax
PD:Lo modifique porq la variable era a, entonces sCadena sobraba no?(aver si toy metiendo la pata..) y luego lo de Trim$ a mas de lo mismo.
A bueno y lo de split tambien puse a.
enfin a sido una rayada mia xD
Wenas, tengo un problema con la consola, os cuento:
Cuando estoy con la consola ejecutandose, si escribo mas de 9 caracteres en la misma linea y presiono enter, se salta 1 linea(por darle a enter) + otra linea(por superar 9 caracteres)...
Nose si se me ha entendido bien, en ese caso decirmelo y posteo alguna foto voy a seguir mirando aver si lo arreglo.
PD:Bueno ya que estoy con este post comento:
Ya una vez solucionado ese problema lo he aumentado para que acepte como maximo 1000 (pero en realidad son 999 xD), pues bueno tengo ya 999 caracteres para pegarlos y probarlo, pero jeje q sorpresa que no vale usar el Control+V para pegarlos, y escribirlos es muy pesado ajajaj :laugh:, ¿como puedo añadir en la consola la opcion de pegar y copiar?
un saludo ;)