cahh74 Posted December 15, 2016 at 10:31 AM Report #601258 Posted December 15, 2016 at 10:31 AM Bom dia, Tenho um arquivo cps onde preciso copiar o valor value destas linhas: <setting name="authorization_username" value="789"/> <setting name="display_name" value="789"/> <setting name="username" value="789"/> E alterar pelo valor que o usuário insere no script. O Script que tenho é o seguinte: strInput = InputBox ("Digite seu ramal") Const FOR_READING = 1 Const FOR_WRITING = 2 Set wshShell = CreateObject( "WScript.Shell" ) strFileName = wshShell.ExpandEnvironmentStrings( "%userprofile%" ) & "\AppData\Local\CounterPath\RegNow Enhanced\default_user\settings.cps" Set objFS = CreateObject("Scripting.FileSystemObject") Set objTS = objFS.OpenTextFile(strFileName, FOR_READING) strContents = objTS.ReadAll objTS.Close Set objTS = objFS.OpenTextFile(strFileName, FOR_WRITING) strContents = Replace(strContents, "789", strInput) objTS.WriteLine strContents objTS.Close Até então ele funciona, porém ele deve rodar com mais usuários e o valor não vai ser sempre "789", deverá ser o valor que existe dentro daquele arquivo e naquela variável. Por exemplo se value for 1000 e o usuário inserir 500, o script deverá alterar no arquivo o valor de 1000 para 500. A minha dúvida é como alterar isso a partir do valor que possuo no arquivo, pois pelo replace eu consigo alterar a partir do valor que já estou passando no código. Alguém pode me ajudar?
He B TeMy Posted December 15, 2016 at 04:55 PM Report #601265 Posted December 15, 2016 at 04:55 PM Ou seja, se o usuário for Rui, queres só alterar onde diz "Rui" certo? O nome é único? Isto é, só há um Rui ou tens alguma forma de identificar cada um separadamente? Se sim, fazes, if "ID_único" then //Replace dos números . 1 Report
cahh74 Posted December 15, 2016 at 07:21 PM Author Report #601267 Posted December 15, 2016 at 07:21 PM 2 horas atrás, He B TeMy disse: Ou seja, se o usuário for Rui, queres só alterar onde diz "Rui" certo? O nome é único? Isto é, só há um Rui ou tens alguma forma de identificar cada um separadamente? Se sim, fazes, if "ID_único" then //Replace dos números . No value eu sempre vou ter um número, que é a identificação do respectivo Ramal. Porém eu não sei o valor dele. Acredito que teria que buscar este valor no arquivo txt e jogar para uma variável dentro do meu script, depois onde tivesse aquela variável poderia dar um replace. Porém não sei como faço para buscar o valor dentro de um txt e jogar numa variável no script. Esta é minha maior dúvida.
He B TeMy Posted December 15, 2016 at 08:32 PM Report #601268 Posted December 15, 2016 at 08:32 PM (edited) A minha questão foi, como identificas a linha no txt que queres retirar o valor? Dependendo da resposta podes fazer: for each linha in txt if linha.Contains("Rui") Then int index = linha.indexof("/"); int valor = 0 Int32.TryParse(string.substring(index -5,index-2), valor) Exit For End If Next Edited December 15, 2016 at 08:34 PM by He B TeMy 1 Report
cahh74 Posted December 15, 2016 at 08:36 PM Author Report #601269 Posted December 15, 2016 at 08:36 PM 2 minutos atrás, He B TeMy disse: A minha questão foi, como identificas a linha no txt que queres retirar o valor? Dependendo da resposta podes fazer: for each linha in txt if linha.Contains("Rui") Then int index = linha.indexof("/"); int valor = 0 Int32.TryParse(string.substring(index -5,index-2), valor) As linhas que quero retirar o valor são aquelas colocadas ali em cima, porém em cada máquina ela vai possuir um valor diferente. Como são ramais, cada máquina possui seu ramal. Assim gostaria de buscar o valor a partir do nome daquelas variáveis ali em cima se for possível, ou pela linha do arquivo txt. O que rodasse. Qual acha que ficaria melhor? Tentei rodar este e não funcionou.
He B TeMy Posted December 15, 2016 at 08:49 PM Report #601270 Posted December 15, 2016 at 08:49 PM Eu não sei o que são ramais, eu entendo que vai ter um valor diferente, perguntei se serão sempre 3 números ou podem ser 4, 2, 1 etc... se forem 3 a solução acima funciona. Substitui o 5 por 4 na solução acima e diz o valor da váriavel 'valor'.
cahh74 Posted December 19, 2016 at 05:49 PM Author Report #601380 Posted December 19, 2016 at 05:49 PM Em 15/12/2016 às 18:49, He B TeMy disse: Eu não sei o que são ramais, eu entendo que vai ter um valor diferente, perguntei se serão sempre 3 números ou podem ser 4, 2, 1 etc... se forem 3 a solução acima funciona. Substitui o 5 por 4 na solução acima e diz o valor da váriavel 'valor'. Desculpa minha ignorância, mas eu não consegui aplicar. Pode me mandar o código todo para que eu possa entender??
Kadov Posted December 20, 2016 at 01:05 PM Report #601420 Posted December 20, 2016 at 01:05 PM Acredito que possas tentar utilizar a leitura de node e alterar o seu valor. Como é feito com arquivos em xml. Não sei se funciona, mas é uma ideia. E torna extremamente simples de alterar os valores. 1 Report
cahh74 Posted December 20, 2016 at 06:01 PM Author Report #601427 Posted December 20, 2016 at 06:01 PM 4 horas atrás, Kadov disse: Acredito que possas tentar utilizar a leitura de node e alterar o seu valor. Como é feito com arquivos em xml. Não sei se funciona, mas é uma ideia. E torna extremamente simples de alterar os valores. Desculpe mas sou nova em VB, não entendi. Pode me dar um exemplo?
vikcch Posted December 21, 2016 at 01:11 AM Report #601432 Posted December 21, 2016 at 01:11 AM (edited) Os values nessas 3 linhas são sempre iguais? Podes fazer uma função deste tipo para achares o valor do value: Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim valorDoValue As String = GetValueOfValue("<setting name=""authorization_username"" value=""789""/> ") MessageBox.Show(valorDoValue) End Sub Private Function GetValueOfValue(ByVal str As String) As String Dim startAt As Integer = str.IndexOf("value=") + "value=".Length + 1 Dim finishAt As Integer = str.IndexOf("/>", startAt) - 1 Return str.Substring(startAt, finishAt - startAt) End Function End Class Depois fazes o replace Edited December 21, 2016 at 01:17 AM by vikcch
cahh74 Posted December 21, 2016 at 11:38 AM Author Report #601436 Posted December 21, 2016 at 11:38 AM 10 horas atrás, vikcch disse: Os values nessas 3 linhas são sempre iguais? Podes fazer uma função deste tipo para achares o valor do value: Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim valorDoValue As String = GetValueOfValue("<setting name=""authorization_username"" value=""789""/> ") MessageBox.Show(valorDoValue) End Sub Private Function GetValueOfValue(ByVal str As String) As String Dim startAt As Integer = str.IndexOf("value=") + "value=".Length + 1 Dim finishAt As Integer = str.IndexOf("/>", startAt) - 1 Return str.Substring(startAt, finishAt - startAt) End Function End Class Depois fazes o replace Nestas 3 linhas são iguais sim, porém vou executar o script em outras máquinas, em que apesar de o arquivo ser o mesmo tem um value diferente pra cada máquina. Então se eu não tenho o valor do value, como posso fazer pra este script funcionar? Pensei em sobrescrever a linha, mas não consegui encontrar como fazer isso.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now