Jump to content

Substituir valor de uma linha


cahh74

Recommended Posts

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

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

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 by He B TeMy
  • Vote 1
Link to comment
Share on other sites

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

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

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 by vikcch
Link to comment
Share on other sites

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.