cahh74 Posted December 15, 2016 at 10:31 AM Report Share #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? Link to comment Share on other sites More sharing options...
He B TeMy Posted December 15, 2016 at 04:55 PM Report Share #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 Link to comment Share on other sites More sharing options...
cahh74 Posted December 15, 2016 at 07:21 PM Author Report Share #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. Link to comment Share on other sites More sharing options...
He B TeMy Posted December 15, 2016 at 08:32 PM Report Share #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 Link to comment Share on other sites More sharing options...
cahh74 Posted December 15, 2016 at 08:36 PM Author Report Share #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. Link to comment Share on other sites More sharing options...
He B TeMy Posted December 15, 2016 at 08:49 PM Report Share #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'. Link to comment Share on other sites More sharing options...
cahh74 Posted December 19, 2016 at 05:49 PM Author Report Share #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?? Link to comment Share on other sites More sharing options...
Kadov Posted December 20, 2016 at 01:05 PM Report Share #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 Link to comment Share on other sites More sharing options...
cahh74 Posted December 20, 2016 at 06:01 PM Author Report Share #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? Link to comment Share on other sites More sharing options...
vikcch Posted December 21, 2016 at 01:11 AM Report Share #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 Link to comment Share on other sites More sharing options...
cahh74 Posted December 21, 2016 at 11:38 AM Author Report Share #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. Link to comment Share on other sites More sharing options...
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