Localizar e substituir palavra em arquivos txt

1. Localizar e substituir palavra em arquivos txt

Marcos Meira
oxroll

(usa Debian)

Enviado em 20/09/2008 - 12:43h

Pessoal, sou totalmente iniciante em Delphi, preciso saber como faço para que através do Delphi, eu possa criar um aplicativo onde ele abre um arquivo txt, localiza uma palavra tipo: 'gateway=192.168.2.1' e substitue por 'gateway=192.168.2.252', logo após ele salva o arquivo novamente. Já pesquisei muito do Google, em fóruns e sites dedicados a programação Delhpi, mas só encontrei como modificar a linha inteira, e assim não me serve, teria que ser somente 1 palavra de uma determinada linha ex: linha 70.
Agradeço muito a quem puder me ajudar!!
Vlw!!


  


2. Re: Localizar e substituir palavra em arquivos txt

Jefferson Diego
Diede

(usa Debian)

Enviado em 20/09/2008 - 14:52h

Finalmente! Alguém que ainda usa Pascal! hehe

Bem... é assim:

Acredito que você saiba definir ações e botões, etc, né?
Presumindo que sim, vou postar só o código. Seria assim:

var
ARQ: TStringList;
begin
ARG:=TStringList.Create;
ARG.LoadFromFile('C:\Arquivo.txt');
ARG.Text:=StringReplace(ARG.Text,'gateway=192.168.2.1','gateway=192.168.2.252',[rfReplaceAll]);
ARG.SavetoFile('C:\Arquivo.txt');
end;

Bem... quando você disse "Delphi", eu presumi que esta programando no Windows, por isso coloquei C:\Arquivo.txt no exemplo. Outra coisa: se for substituir uma frase por outra parecida, elimine as semelhanças e substitua só as diferenças, pois economiza memória.
Nesse caso, ao invés de:
ARG.Text:=StringReplace(ARG.Text,'gateway=192.168.2.1','gateway=192.168.2.252',[rfReplaceAll]);
Use:
ARG.Text:=StringReplace(ARG.Text,'192.168.2.1','192.168.2.252',[rfReplaceAll]);
(a não ser que isso atrapalhe o resultado final, como quando houver algo como dns=192.168.0.1, que seria erroneamente substituído)


Ah... outra coisa...
Para modificar uma linha específica, use assim:
ARQ[x]:=StringReplace(ARQ[x],'gateway=192.168.0.1','gateway=192.168.0.2',[rfReplaceall])

Onde x é o número da linha-1, exemplo, para a linha 70:
ARQ[69]:=StringReplace(ARQ[69],'gateway=192.168.0.1','gateway=192.168.0.2',[rfReplaceall])


3. Erro

Marcos Meira
oxroll

(usa Debian)

Enviado em 21/09/2008 - 11:16h

Olá amigo! Estou usando o Windows SIM, não é minha preferência mas sou forçado..rsrs. Bem, 1° lhe agradeço muito pela ajuda, tem tempo que procuro! VlW.
Olhá só, criei um botão usando o Delphi 7, e usei o script que vc me mandou, só q ta dando os seguintes ERROs:
[Error] Unit1.pas(30): Undeclared identifier: 'ARG'
[Error] Unit1.pas(31): Missing operator or semicolon
[Error] Unit1.pas(32): Missing operator or semicolon
[Error] Unit1.pas(32): Not enough actual parameters
[Error] Unit1.pas(35): '.' expected but ';' found
[Fatal Error] Project2.dpr(5): Could not compile used unit 'Unit1.pas'

Estou fazendo algo errado??

Aguardo...vlw mesmo!!


4. exemplo completo

Almir Bispo dos Santos Filho
[email protected]

(usa Lubuntu)

Enviado em 21/09/2008 - 11:22h

vai na minha pagina e entre em "documentos"
http://groups.msn.com/adlstrobeserver
valeu!!!


5. CONSEGUI!!

Marcos Meira
oxroll

(usa Debian)

Enviado em 21/09/2008 - 11:25h

Diede, observando o script que vc me enviou percebi que a linha:
ARQ: TStringList; onde "ARQ" estava diferente das outras onde contém "ARG", daí substitui o "G" pelo "Q" nas outras linhas e funcionou perfeitamente bem, era exatamente isso que eu estava precisando!!! CARA, lhe agradeço muito!! Vlw!