Hola amigos, he estado un buen rato buscando con mi amigo Google y no he encontrado la respuesta a mi problema, os explico. Tengo el siguiente texto en un textbox:
"RAIZ": {
"alerts": {
"alert": true
},
}
Y esto es lo que quiero conseguir añadiendo un texto en una posición especifica(me vale con insertarlo despues de "RAIZ": {)
"RAIZ": {
"alerts": {
"alert": true
},
//TEXTO AÑADIDO
"alerts2": {
"alert2": true
},
//FIN TEXTO AÑADIDO
}
Parece algo sencillo pero no lo consigo :-\
Saludos y gracias.
No lo entiendo muy bien, ¿Puedes ser más específico?.
Si sólo se tarata básicamente de insertar "X" texto en "Y" posición de un String, entonces puedes usar el método "Substring".
No sé si esto te servirá de ayuda porque no entiendo del todo la forma en la que lo intentas hacer, pero bueno, aquí tienes:
Public Class Form1
Dim [String] As String = String.Empty
Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
[String] = <a><![CDATA[
"RAIZ": {
"alerts": {
"alert": true
},
}
]]></a>.Value
'Output:
'
' "RAIZ": {
'"alerts": {
' "alert": true
' },
'}
[String] = [String].Substring(0, [String].LastIndexOf(",")) & _
<a><![CDATA[
"alerts2": {
"alert2": true
},
]]></a>.Value & (Environment.NewLine & "}")
'Output:
'
' "RAIZ": {
'"alerts": {
' "alert": true
' }
'"alerts2": {
' "alert2": true
' },
'}
MsgBox([String])
End Sub
End Class
EDITO: Si lo que quieres es poner (restringir) el cursor en una posición específica del textbox puedes usar el mismo método:
TextBox1.Select(TextBox1.Text.LastIndexOf(",") + 1, 0)
Hola EleKtro H@cker,
No me sirve por varios motivos, el primero es que no puedo usar <a><![CDATA[ debido a que trabajo con .net 2.0 y no contiene linq (pero bueno se inserta el texto en una variable y problema resuelto), y la otra cuestión es que si existe mas texto debajo desaparece.
Perdona por no ser mas claro, lo que estoy haciendo exactamente es editar el archivo preferences de google chrome, para que mi extensión se añada a este. Debo de modificar esta parte:
"extensions": {
"alerts": {
"initialized": true
},
"autoupdate": {
"last_check": "***************",
"next_check": "***************"
},
"blacklistupdate": {
"lastpingday": "**********",
"version": "0.0.0.***"
},
"chrome_url_overrides": {
"bookmarks": [ "chrome-extension://*************************/main.html" ]
},
"last_chrome_version": "27.0.1453.116",
"settings": {
"aakhlmakppmkkmfkoibponkmmpgpmjgl": {
"blacklist": true
},
"aandpgohbohmlknpjbblpmoladhoochg": {
"blacklist": true
},
La parte de texto que quiero añadir por ejemplo es esta:
"jandpgohbohmlknpjbblpmoladhoochg": {
"blacklist": true
},
Esta debe añadirse despues de "settings": { y deberia de hacerse en orden alfabético aun que eso da igual ya que me he dado cuenta de que Google Chrome los ordena solo. He pensado en mirar las lineas 1 por 1 y cuando encuentre "settings": { que se añada 1 linea debajo pero tampoco se como.
Saludos y gracias de nuevo.
JSON
Saludos
Ahora está todo mucho más claro, podrías haber comentado lo de Google desde el principio xD.
Puedes hacerlo a lo experto como lo haría Novlucker usando alguna librería para manejar JSON, o también puedes usar esta alternativa que hice:
Dim MyExtension As String, GoogleFile As String, Preferences() As String
MyExtension = """aakhlmakppmkkmfkoibponkmmpgpmjgl"": {""blacklist"": true},"
GoogleFile = "C:\Program Files\Google Chrome\Data\profile\Default\Preferences"
Preferences = IO.File.ReadAllLines(GoogleFile)
For X As Int32 = 0 To Preferences.Length - 1
If Preferences(X).Trim = """settings"": {" Then
Preferences(X) &= MyExtension
IO.File.WriteAllText(String.Join(Environment.NewLine, Preferences), GoogleFile)
Exit For
End If
Next
Saludos
Eso también sirve :P
Creo que para un virus alcanza :rolleyes:
Saludos
muy bueno el code, MUCHAS GRACIAS!! le he añadido bien la ruta pero me da el siguiente error
"Caracteres no validos en la ruta de acceso" en la linea:
IO.File.WriteAllText(String.Join(Environment.NewLine, Preferences), GoogleFile)
Dim MyExtension As String, GoogleFile As String, Preferences() As String
MyExtension = """aakhlmakppmkkmfkoibponkmmpgpmjgl"": {""blacklist"": true},"
GoogleFile = Environment.GetFolderPath(SpecialFolder.LocalApplicationData) & "\Google\Chrome\User Data\Default\Preferences"
Preferences = IO.File.ReadAllLines(GoogleFile)
For X As Int32 = 0 To Preferences.Length - 1
If Preferences(X).Trim = """settings"": {" Then
Preferences(X) &= MyExtension
IO.File.WriteAllText(String.Join(Environment.NewLine, Preferences), GoogleFile)
Exit For
End If
Next
Era demasiado bonito para ser verdad xD
Saludos.
Vale ahora si que es 100% funcional:
Dim MyExtension As String, GoogleFile As String, Preferences() As String
Dim TextBoxChrome As New TextBox()
TextBoxChrome.Multiline = True
Dim lines As String() = {
" ""aakhlmakppmkkmfkoibponkmmpgpmjgl"": {",
" ""blacklist"": true},"
}
MyExtension = Join(lines, vbCrLf)
GoogleFile = Environment.GetFolderPath(SpecialFolder.LocalApplicationData) & "\Google\Chrome\User Data\Default\Preferences"
Preferences = IO.File.ReadAllLines(GoogleFile)
For X As Int32 = 0 To Preferences.Length - 1
If Preferences(X).Trim = """settings"": {" Then
Preferences(X) &= Environment.NewLine + MyExtension
TextBoxChrome.Text = String.Join(Environment.NewLine, Preferences)
Dim EscritorChrome As New StreamWriter(GoogleFile)
EscritorChrome.Write(TextBoxChrome.Text)
EscritorChrome.Close()
EscritorChrome.Dispose()
Exit For
End If
Next
Saludos y gracias por la ayuda. ;D
Cita de: .:Weeds:. en 8 Julio 2013, 23:14 PM
le he añadido bien la ruta pero me da el siguiente error
"Caracteres no validos en la ruta de acceso" en la linea:
IO.File.WriteAllText(String.Join(Environment.NewLine, Preferences), GoogleFile)
Lo escribí al vuelo sin testearlo, lo que ocurre es que por confusión intercambié la posición los parámetros aquí:
IO.File.WriteAllText(String.Join(Environment.NewLine, Preferences), GoogleFile)
Así si:
IO.File.WriteAllText(GoogleFile, String.Join(Environment.NewLine, Preferences))
Este ya funciona (con la ruta correcta para tu PC):
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim MyExtension As String, GoogleFile As String, Preferences() As String
MyExtension = """aakhlmakppmkkmfkoibponkmmpgpmjgl"": {""blacklist"": true},"
GoogleFile = IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Google\Chrome\User Data\Default\Preferences")
Preferences = IO.File.ReadAllLines(GoogleFile)
For X As Int32 = 0 To Preferences.Length - 1
If Preferences(X).Trim = """settings"": {" Then
Preferences(X) &= MyExtension
IO.File.WriteAllText(GoogleFile, String.Join(Environment.NewLine, Preferences))
Exit For
End If
Next
End Sub
PD: No es necesario identar las lineas del JSON (Google chrome lo ordena por si mismo), pero bueno, si prefieres hacer un string multilinea como en tu ultimo code es tu decisión.
Saludos.
Cita de: EleKtro H@cker en 9 Julio 2013, 09:36 AM
Este ya funciona (con la ruta correcta para tu PC):
Tu mensaje me ha dejado intrigado xD, llevo tiempo testeando donde se guarda ese archivo de configuración e independientemente de que windows utilice siempre se guarda en la ruta que yo puse. Hay algún caso donde se guarde en la ruta que tu especificaste? Por que de ser asi estoy fallando en lo mas básico :rolleyes:
Saludos.
Cita de: .:Weeds:. en 9 Julio 2013, 13:41 PMHay algún caso donde se guarde en la ruta que tu especificaste?
Claro, es porque uso
Chrome portable. -> http://portableapps.com/apps/internet/google_chrome_portable
Pero no le des muchas vueltas a eso, poca gente usa portables, pero si quieres que tu aplicación séa lo más funcional pues deberías añadir como mínimo un control de errores por si el usuario no tiene el archivo de preferencias en la ruta a la que estás accediendo...
EDITO: Los programadores muchas veces se olvidan y no tienen en cuenta que existen las instalaciones desatendidas y los portables... en los programas que me permiten cambiar el directorio de guardado por defecto (%programdata% o %appdata%) siempre se lo cambio por otro directorio, y eso es una protección adicional anti-viral :).
Saludos!
Interesante, no me habia dado por pensar eso. Gracias por la info.
Citarpero si quieres que tu aplicación séa lo más funcional pues deberías añadir como mínimo un control de errores por si el usuario no tiene el archivo de preferencias en la ruta a la que estás accediendo...
Hombre claro unos cuantos if file.exist y además todo en un try-catch-end try que en cualquier fallo tonto el programa peta xD, mi código final es muy distinto al posteado aqui.
Tema finalizado. Saludos y gracias, me has sido de mucha ayuda.