|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
eduardo.serqueira@outlook Novato
Registrado: Terça-Feira, 28 de Março de 2017 Mensagens: 6
|
Enviada: Ter Mar 28, 2017 1:23 pm Assunto: Como salvar um arquivo txt |
|
|
Olá, sou novo em programação e estou com uma problema, estou desenvolvendo um programa em Delphi que deve para procurar a linha que contem a tag <ModoObserver> e ajustar o conteúdo da mesma essa tag esta dentro do bloco <START> o ajuste deverá ser feito no mesmo arquivo de entrada não é para gerar um novo, eu fiz boa parte só não estou conseguindo salvar o arquivo e ele esta dando um erro de index out of bounds, alguém pode me ajudar, segue o código.
Código: |
procedure TForm1.Button1Click(Sender: TObject);
var
arq : TextFile;
linha, conteudo, campo, tag1, tag2, str, tag: string;
i, j : Integer;
Parte : TStringList;
begin
Memo1.Clear;
linha := '';
Parte := TStringList.Create;
AssignFile(arq, 'C:\Users\EDU\Desktop\ProjetoDaruma\DarumaFrameWork.xml');
{$I-}
Reset(arq);
{$I+}
//Append(arq);
if (IOResult <> 0) then
begin
Memo1.Lines.Add('Erro na abertura do arquivo');
end
else
begin
while (not Eof(arq)) do
begin
Readln(arq, linha);
Parte.Add(linha);
end;
//Memo1.Lines.Add(IntToStr(Parte.Count));
for I := 0 to Parte.Count - 1 do
begin
Memo1.Lines.Add(Parte[i]);
if (Parte[i] = Parte[4]) then
begin
Parte.Delete(i);
campo := Edit1.Text;
linha := Parte[i];
tag1 := Copy(linha, 5, 14);
conteudo := Copy(linha, 19, 1);
tag2 := Copy(linha, 20, 15);
tag := tag1+campo+tag2;
Parte.Insert(5, tag);
end;
end;
//Parte.SaveToFile('C:\Users\EDU\Desktop\ProjetoDaruma\DarumaFrameWork.xml');
end;
CloseFile(arq);
end;
|
Editado pela última vez por eduardo.serqueira@outlook em Ter Mar 28, 2017 1:44 pm, num total de 1 vez |
|
Voltar ao Topo |
|
|
leo_cj Colaborador
Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Ter Mar 28, 2017 1:28 pm Assunto: |
|
|
eu uso o seguinte código:
Código: | Assign(Arq, FFileLogName);
{$I-}
Reset(Arq); // open file in read only mode
{$I+}
if (IOResult <> 0) then
begin
Rewrite(Arq); // create file
end
else
begin
CloseFile(Arq);
Append(Arq); // open file in edit mode and set cursor to last position
end; |
|
|
Voltar ao Topo |
|
|
eduardo.serqueira@outlook Novato
Registrado: Terça-Feira, 28 de Março de 2017 Mensagens: 6
|
Enviada: Ter Mar 28, 2017 1:50 pm Assunto: |
|
|
Dessa forma me retorna um erro I/O Error 103. porque eu já tenho esse arquivo e eu preciso editar somente uma linha desse arquivo e salvar no mesmo local. |
|
Voltar ao Topo |
|
|
leo_cj Colaborador
Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Ter Mar 28, 2017 3:26 pm Assunto: |
|
|
estranho, como está seu código?
esse código que postei, utilizo numa classe de logs, ele tenta abrir o arquivo em modo de leitura (Reset), caso o arquivo não exista, ao usar o reset, o IOResult ficará <> 0 e então a aplicação sabe que o arquivo deverá ser criado (Rewrite) e caso não de nenhum erro no Reset, a aplicação entende que o arquivo já existe e deve apenas ser editado, por isso fechamos o arquivo aberto pelo Reset e então abrimos ele novamente em modo de edição (Append)
Testei aqui e funcionou normalmente, caso o arquivo não exista no caminho passado ele cria e caso já exista, apenas adiciona linhas novas |
|
Voltar ao Topo |
|
|
eduardo.serqueira@outlook Novato
Registrado: Terça-Feira, 28 de Março de 2017 Mensagens: 6
|
Enviada: Qua Mar 29, 2017 10:58 am Assunto: |
|
|
Devo estar fazendo algo de errado, veja meu código! pode me ajudar??
Código: |
procedure TForm1.Button1Click(Sender: TObject);
var
arq : TextFile;
linha,
conteudo,
campo,
tag1,
tag2,
tag : string;
i : Integer;
Parte : TStringList;
begin
Memo1.Clear;
linha := '';
conteudo := '';
campo := '';
tag1 := '';
tag2 := '';
tag := '';
Parte := TStringList.Create;
AssignFile(arq, 'C:\Users\EDU\Desktop\ProjetoDaruma\DarumaFrameWork.xml');
{$I-}
Reset(arq);
{$I+}
if (IOResult <> 0) then
begin
while (not Eof(arq)) do
begin
Rewrite(arq);
Readln(arq, linha);
Parte.Add(linha);
end;
for I := 0 to Parte.Count - 1 do
begin
Memo1.Lines.Add(Parte[i]);
if (Parte[i] = Parte[4]) then
begin
Parte.Delete(i);
campo := Edit1.Text;
linha := Parte[i];
tag1 := Copy(linha, 5, 14);
conteudo := Copy(linha, 19, 1);
tag2 := Copy(linha, 20, 15);
tag := tag1+campo+tag2;
Parte.Insert(5, tag);
end;
end;
end
else
begin
CloseFile(arq);
Append(arq);
end;
end;
|
Editado pela última vez por eduardo.serqueira@outlook em Qua Mar 29, 2017 11:25 am, num total de 1 vez |
|
Voltar ao Topo |
|
|
leo_cj Colaborador
Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Qua Mar 29, 2017 11:21 am Assunto: |
|
|
Tente assim:
Código: | procedure TForm1.Button1Click(Sender: TObject);
var
arq : TextFile;
linha,
conteudo,
campo,
tag1,
tag2,
tag : string;
i : Integer;
Parte : TStringList;
begin
Memo1.Clear;
linha := '';
conteudo := '';
campo := '';
tag1 := '';
tag2 := '';
tag := '';
Parte := TStringList.Create;
AssignFile(arq, 'C:\Users\EDU\Desktop\ProjetoDaruma\DarumaFrameWork.xml');
{$I-}
Reset(arq); // Abre o arquivo APENAS para LEITURA
{$I+}
if (IOResult <> 0) then
begin
ShowMessage('Falha na abertura do arquivo!');
end;
while (not EOF(Arq)) do
begin
Readln(Arq, Linha);
Parte.Add(Linha);// Carregamos o conteúdo do arquivo para Parte
end;
for I := 0 to Parte.Count - 1 do
begin
Memo1.Lines.Add(Parte[i]);
if (Parte[i] = Parte[4]) then
begin
Parte.Delete(i);
campo := Edit1.Text;
linha := Parte[i];
tag1 := Copy(linha, 5, 14);
conteudo := Copy(linha, 19, 1);
tag2 := Copy(linha, 20, 15);
tag := tag1+campo+tag2;
Parte.Insert(5, tag);
end;
end;
CloseFile(Arq); // Fechamos o arquivo apenas para leitura
Rewrite(Arq); // Abrimos o arquivo para edição (O conteúdo antigo será apagado, por isso devemos reescrever o arquivo inteiro)
for I := 0 to Parte.Count - 1 do
WriteLn(Arq, Parte[I]); // pegamos o conteúdo de Parte e inserimos no arquivo
CloseFile(Arq); // fechamos o arquivo
end; |
|
|
Voltar ao Topo |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qua Mar 29, 2017 11:27 am Assunto: |
|
|
Se puder, poste como está seu xml para que possamos analisar melhor. _________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
|
eduardo.serqueira@outlook Novato
Registrado: Terça-Feira, 28 de Março de 2017 Mensagens: 6
|
Enviada: Qua Mar 29, 2017 11:31 am Assunto: |
|
|
Cara não sei nem como te agradecer deu certo, salvou quase como o esperado rsrs só ficou um pequeno detalhe ele não apagou a linha que eu preciso editar, no primeiro loop ele edita corretamente porém se eu tento editar novamente ele da um erro acredito que é por causa da forma como eu montei a função copy(), se puder me ajudar em mais esse problema eu agradeço.
segue meu for:
Código: |
for I := 0 to Parte.Count - 1 do
begin
Memo1.Lines.Add(Parte[i]);
if (Parte[i] = Parte[5]) then
begin
campo := Edit1.Text;
linha := Parte[i];
tag1 := Copy(linha, 5, 14);
conteudo := Copy(linha, 19, 1);
tag2 := Copy(linha, 20, 15);
novaTag := tag1+campo+tag2;
Parte.Delete(5);
Parte.Insert(5, novaTag);
Memo1.Lines.Add(novaTag);
end;
end;
|
segue o xml:
Código: |
<DARUMAFRAMEWORK>
<START>
<LocalArquivos>C:\</LocalArquivos>
<LocalArquivosRelatorios>C:\</LocalArquivosRelatorios>
<LogTamMaxMB>5</LogTamMaxMB>
<ModoObserver>0</ModoObserver> <-- esta linha
<ModoObserver>Edit1</ModoObserver> <-- manter a editada
<PathBibliotecasAuxiliares>.\</PathBibliotecasAuxiliares>
<Produto>ECF</Produto>
<ThreadAoIniciar>0</ThreadAoIniciar>
<TipoRegistro>2</TipoRegistro>
<TokenEncurtadorUrl>0</TokenEncurtadorUrl>
</START>
<DUAL>
<AguardarProcesso>1</AguardarProcesso>
<Auditoria>0</Auditoria>
<TamanhoBobina>48</TamanhoBobina>
<CodePageAutomatico>0</CodePageAutomatico>
<ControleAutomatico>0</ControleAutomatico>
<EnterFinal>1</EnterFinal>
<Inicializou>0</Inicializou>
<LinhasGuilhotina>0</LinhasGuilhotina>
<ModoGaveta>0</ModoGaveta>
<PortaComunicacao>COM1</PortaComunicacao>
<EndPortaParalela></EndPortaParalela>
<Tabulacao>05,10,15,20,30,40</Tabulacao>
<Margem>00;00</Margem>
<TempoEsperaLeitura>10</TempoEsperaLeitura>
<Termica>1</Termica>
<Velocidade>9600</Velocidade>
<ZeroCortado>0</ZeroCortado>
<Rota1>COM1>000.000.000.000:0000</Rota1>
<Rota2>COM2>000.000.000.000:0000</Rota2>
<Rota3>COM3>000.000.000.000:0000</Rota3>
<Rota4>COM4>000.000.000.000:0000</Rota4>
<Rota5>COM5>000.000.000.000:0000</Rota5>
<AtivaRota>0</AtivaRota>
<CaracterSeparador>;</CaracterSeparador>
<FormataTexto>IMP</FormataTexto>
<Wine>0</Wine>
</DUAL>
<ECF>
<AguardarBitmapRZ>0</AguardarBitmapRZ>
<AguardarImpressao>0</AguardarImpressao>
<AjustaDATAM>0</AjustaDATAM>
<AlteraFPGTO>1</AlteraFPGTO>
<ArquivoLeituraX>LeituraX.ser</ArquivoLeituraX>
<ArredondarTruncar>A</ArredondarTruncar>
<Auditoria>0</Auditoria>
<CaracterSeparador>;</CaracterSeparador>
<ControleAutomatico>0</ControleAutomatico>
<DelayEntreBytes>010</DelayEntreBytes>
<EncontrarECF>1</EncontrarECF>
<EmErroBuscarPorta>0</EmErroBuscarPorta>
<EnviarAvisoAoUsuario>0</EnviarAvisoAoUsuario>
<EnviarErroAoUsuario>0</EnviarErroAoUsuario>
<FarmaciaPopular>0</FarmaciaPopular>
<GerandoRelatorio>0</GerandoRelatorio>
<HabilitaNFCe>0</HabilitaNFCe>
<NumeroECFCompativel>001</NumeroECFCompativel>
<HabilitaNotificacaoWS>0</HabilitaNotificacaoWS>
<HorarioVeraoInicio></HorarioVeraoInicio>
<HorarioVeraoFim></HorarioVeraoFim>
<LegendaInmetro>0</LegendaInmetro>
<LMFCompleta>0</LMFCompleta>
<MaxFechamentoAutomatico>0</MaxFechamentoAutomatico>
<MensagemApl1></MensagemApl1>
<MensagemApl2></MensagemApl2>
<MensagemAviso>AVISO: [O PAPEL ESTA ACABANDO!!]. INSIRA NOVA BOBINA DE PAPEL.</MensagemAviso>
<ModoGaveta>0</ModoGaveta>
<NaoAvisarPoucoPapel>0</NaoAvisarPoucoPapel>
<NomeUltimoCMD>eInterpretarRetorno_ECF_Daruma</NomeUltimoCMD>
<PortaSerial>COM1</PortaSerial>
<ReceberAvisoEmArquivo>0</ReceberAvisoEmArquivo>
<ReceberDescricaoAvisoEmArquivo>0</ReceberDescricaoAvisoEmArquivo>
<ReceberDescricaoErroEmArquivo>0</ReceberDescricaoErroEmArquivo>
<ReceberErroEmArquivo>0</ReceberErroEmArquivo>
<ReceberInfoEstendida>1</ReceberInfoEstendida>
<ReceberInfoEstendidaEmArquivo>0</ReceberInfoEstendidaEmArquivo>
<ReducaoZAutomatica>0</ReducaoZAutomatica>
<RetornarAvisoErro>0</RetornarAvisoErro>
<SangriaMensagem></SangriaMensagem>
<SangriaValor>100</SangriaValor>
<SerialByteAByte>0</SerialByteAByte>
<SinalSonoroIniciar>1</SinalSonoroIniciar>
<SuprimentoMensagem></SuprimentoMensagem>
<SuprimentoValor>100</SuprimentoValor>
<TipoUltimoDocumento>5</TipoUltimoDocumento>
<TituloMensagem>[DarumaFramework]</TituloMensagem>
<Velocidade>9600</Velocidade>
<VelocidadeAntiga>9600</VelocidadeAntiga>
<VelocidadeGeracaoRelatorio>1</VelocidadeGeracaoRelatorio>
<Wine>0</Wine>
<CF>
<BMP>0</BMP>
<CupomAdicionalDllConfig>111111111100000000000</CupomAdicionalDllConfig>
<CupomAdicionalDllTitulo>Cupom Adicional</CupomAdicionalDllTitulo>
<CupomMania>0</CupomMania>
<FormaPgto>Dinheiro</FormaPgto>
<IdentificaConsumidorFormatado></IdentificaConsumidorFormatado>
<MascaraIdentificaConsumidor>0</MascaraIdentificaConsumidor>
<MensagemFormaPagamento></MensagemFormaPagamento>
<MensagemPromocional></MensagemPromocional>
<MinasLegal>0</MinasLegal>
<ModoPreVenda>0</ModoPreVenda>
<NotaLegal>0</NotaLegal>
<Quantidade>1</Quantidade>
<TamanhoMinimoDescricao>15</TamanhoMinimoDescricao>
<TipoDescAcresc>D%</TipoDescAcresc>
<TorpedoPremiadoParaiba>0</TorpedoPremiadoParaiba>
<UnidadeMedida>un</UnidadeMedida>
<ValorDescAcresc>0.00</ValorDescAcresc>
</CF>
<CCD>
<DocOrigem>036305</DocOrigem>
<FormaPgto>Cartao</FormaPgto>
<LinhasTEF>20</LinhasTEF>
<SaltarLinhasTEF>0</SaltarLinhasTEF>
<Parcelas>01</Parcelas>
<Valor>000000019074</Valor>
</CCD>
<CHEQUE>
<XLinha1>10</XLinha1>
<XLinha2>10</XLinha2>
<XLinha3>10</XLinha3>
<YLinha1>10</YLinha1>
<YLinha2>20</YLinha2>
<YLinha3>30</YLinha3>
<TimeOutEjetarCheque>20</TimeOutEjetarCheque>
</CHEQUE>
<LEI12741>
<ColunasIBPT>0;4;5;1;6;7</ColunasIBPT>
<LocalArquivoNCM>./IBPTAX.csv</LocalArquivoNCM>
<LocalMSG>0</LocalMSG>
<MSG>Val Aprox Tributos | Fonte:IBPT</MSG>
<SeparadorIBPT>;</SeparadorIBPT>
</LEI12741>
<REDUCAOZ>
<AvisarOperacoesReducaoZ>0</AvisarOperacoesReducaoZ>
<AvisarReducaoZ>0</AvisarReducaoZ>
<Relatorios></Relatorios>
<PeriodoInicial></PeriodoInicial>
<PeriodoFinal></PeriodoFinal>
<ChavePrivada></ChavePrivada>
<ExecutarAntesOuDepois>1</ExecutarAntesOuDepois>
<MensagemAviso>Geracao de relatorio sera executada automaticamente apos a reducao Z, favor nao desligar a impressora</MensagemAviso>
<RetornarInformacao></RetornarInformacao>
<TimeOutReducaoZ>30</TimeOutReducaoZ>
</REDUCAOZ>
<SINTEGRA>
<Bairro>Bairro</Bairro>
<CEP>12345.123</CEP>
<Cod_Convenio>1</Cod_Convenio>
<Cod_Finalidade>1</Cod_Finalidade>
<Cod_Natureza>1</Cod_Natureza>
<Complemento>Complemento</Complemento>
<Contato_Nome>Nome Contato</Contato_Nome>
<Contato_Telefone>(12) 1234-1234</Contato_Telefone>
<Fax>(12) 1234-1234</Fax>
<Logradouro>Logradouro</Logradouro>
<Municipio>Municipio</Municipio>
<Numero>12345</Numero>
<RateioSubTotal>0</RateioSubTotal>
<UF>XX</UF>
</SINTEGRA>
<MOVIMENTOPORECF>
<SOFTWAREHOUSE>
<CNPJ></CNPJ>
<IE></IE>
<IM></IM>
<Denominacao></Denominacao>
<NomePAFECF></NomePAFECF>
<VersaoPAFECF></VersaoPAFECF>
<MD5PAFECF></MD5PAFECF>
<VersaoERPAFECF></VersaoERPAFECF>
</SOFTWAREHOUSE>
</MOVIMENTOPORECF>
<ATOCOTEPE>
<Automatico>0</Automatico>
</ATOCOTEPE>
</ECF>
<TA2000>
<Auditoria>0</Auditoria>
<MensagemBoasVindasLinha1>**********Daruma Automacao**************</MensagemBoasVindasLinha1>
<MensagemBoasVindasLinha2>********MicroTerminal TA2000************</MensagemBoasVindasLinha2>
<Porta>LPT0</Porta>
</TA2000>
<MODEM>
<Apn>XXXXX</Apn>
<Auditoria>0</Auditoria>
<BandejaInicio>SIM1</BandejaInicio>
<CaptionWinAPP>MODEM - MIN100/MIN200</CaptionWinAPP>
<ControleAutomatico>0</ControleAutomatico>
<ConfirmaEntregaSMS>0</ConfirmaEntregaSMS>
<IpCliente>XXX.XXX.XXX.XXX</IpCliente>
<IpServidor>XXX.XXX.XXX.XXX</IpServidor>
<LerApagar>FALSE</LerApagar>
<ListarSms>0</ListarSms>
<ListarSmsSIM>0</ListarSmsSIM>
<NumeroTentativas>0</NumeroTentativas>
<Porta>COM1</Porta>
<PortaGPRS>1001</PortaGPRS>
<PortaTimeOut>5</PortaTimeOut>
<Profile>1</Profile>
<ReceberNumeroChamada>0</ReceberNumeroChamada>
<SalvarRetornoSMS>0</SalvarRetornoSMS>
<Senha>XXXXX</Senha>
<SmsClasse0>0</SmsClasse0>
<Tecla>F10</Tecla>
<TempoAlertar>4000</TempoAlertar>
<TotalSmsEnviados>0</TotalSmsEnviados>
<Thread>FALSE</Thread>
<Usuario>XXXXX</Usuario>
<Velocidade>115200</Velocidade>
</MODEM>
<DSP>
<Auditoria>0</Auditoria>
<PortaSerial>COM5</PortaSerial>
<Velocidade>9600</Velocidade>
<Mascara></Mascara>
<MENSAGEMABERTURA>
<Linha1>Urmet Daruma</Linha1>
<Linha2>DarumaFramework</Linha2>
</MENSAGEMABERTURA>
<MENSAGEMENCERRAMENTO>
<Linha1></Linha1>
<Linha2></Linha2>
</MENSAGEMENCERRAMENTO>
<MENSAGEMPROMOCIONALDSP>
<Animacao></Animacao>
<Linha1></Linha1>
<Linha2></Linha2>
</MENSAGEMPROMOCIONALDSP>
</DSP>
<OBSERVER>
<PathEntrada>c:\Daruma.cmd</PathEntrada>
<PathSaida>c:\Daruma.ret</PathSaida>
<Latencia>25</Latencia>
<Log_Path>OBSERVER.LOG</Log_Path>
<Separador>;</Separador>
<Gravar_Log>0</Gravar_Log>
</OBSERVER>
<WSWIN8>
<NomeFantasia></NomeFantasia>
<SyncAssync>0</SyncAssync>
<IndiceSegmento>0</IndiceSegmento>
</WSWIN8>
<NFCE>
<AjustarDataHora>0</AjustarDataHora>
<AvisoContingencia>0</AvisoContingencia>
<Auditoria>0</Auditoria>
<EmissaoCtg>0</EmissaoCtg>
<EncontrarImpressora>2</EncontrarImpressora>
<EnderecoServidor></EnderecoServidor>
<EntradaCtg>0</EntradaCtg>
<NaoReenviarCtg>0</NaoReenviarCtg>
<PathArquivosCtgOffline>.\</PathArquivosCtgOffline>
<TempoCtg>0</TempoCtg>
<TimeOutWS>10</TimeOutWS>
<IMPRESSORA>
<ControleAutomatico>0</ControleAutomatico>
<MarcaImpressora>0</MarcaImpressora>
<PortaComunicacao>COM1</PortaComunicacao>
<TamanhoBobina>48</TamanhoBobina>
<Velocidade>9600</Velocidade>
<ConfAnterior>0</ConfAnterior>
</IMPRESSORA>
</NFCE>
<NFE>
<Auditoria>0</Auditoria>
<EnderecoServidor></EnderecoServidor>
</NFE>
</DARUMAFRAMEWORK>
|
|
|
Voltar ao Topo |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qua Mar 29, 2017 5:10 pm Assunto: |
|
|
Uma alternativa mais simples para se alterar o valor de uma tag do XML é com XMLDocument.
Adicione XMLDoc na uses do form.
Código: | var
XMLDocument1: TXMLDocument;
begin
XMLDocument1 := TXMLDocument.Create(Self);
try
XMLDocument1.LoadFromFile('C:\Users\EDU\Desktop\ProjetoDaruma\DarumaFrameWork.xml');
XMLDocument1.Active := True;
XMLDocument1.ChildNodes['DARUMAFRAMEWORK'].ChildNodes['START'].ChildNodes['ModoObserver'].Text:= Edit1.Text;
XMLDocument1.SaveToFile('C:\Users\EDU\Desktop\ProjetoDaruma\DarumaFrameWork.xml');
finally
XMLDocument1.Free;
end;
end; |
_________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
|
eduardo.serqueira@outlook Novato
Registrado: Terça-Feira, 28 de Março de 2017 Mensagens: 6
|
Enviada: Qua Mar 29, 2017 8:15 pm Assunto: |
|
|
Cara agradeço muito este exemplo com o xmlDoc vou guardá-lo para futuras implementações ... é bem mais simples, mas para este projeto não posso usar componentes, eu descobri o erro no meu código mas não estou conseguindo resolvê-lo. o problema é que o xml antes da edição está da forma correta todo identado, após a edição a linha que eu editei sai da identação com isso quebra a função copy que está desta forma -> tag1 := Copy(linha, 5, 14);
trecho do xml antes da edição
Código: |
<DARUMAFRAMEWORK>
<START>
<LocalArquivos>C:\</LocalArquivos>
<LocalArquivosRelatorios>C:\</LocalArquivosRelatorios>
<LogTamMaxMB>5</LogTamMaxMB>
<ModoObserver>0</ModoObserver> //ok
<PathBibliotecasAuxiliares>.\</PathBibliotecasAuxiliares>
<Produto>ECF</Produto>
<ThreadAoIniciar>0</ThreadAoIniciar>
<TipoRegistro>2</TipoRegistro>
<TokenEncurtadorUrl>0</TokenEncurtadorUrl>
</START>
</DARUMAFRAMEWORK>
|
trecho do xml na primeira edição
aqui digitei o número 9 na tag <ModoObserver>
Código: |
<DARUMAFRAMEWORK>
<START>
<LocalArquivos>C:\</LocalArquivos>
<LocalArquivosRelatorios>C:\</LocalArquivosRelatorios>
<LogTamMaxMB>5</LogTamMaxMB>
<ModoObserver>9</ModoObserver> //quebra a função copy
<PathBibliotecasAuxiliares>.\</PathBibliotecasAuxiliares>
<Produto>ECF</Produto>
<ThreadAoIniciar>0</ThreadAoIniciar>
<TipoRegistro>2</TipoRegistro>
<TokenEncurtadorUrl>0</TokenEncurtadorUrl>
</START>
</DARUMAFRAMEWORK>
|
trecho do xml na segunda edição
aqui digitei o número 7 na tag <ModoObserver>
Código: |
<DARUMAFRAMEWORK>
<START>
<LocalArquivos>C:\</LocalArquivos>
<LocalArquivosRelatorios>C:\</LocalArquivosRelatorios>
<LogTamMaxMB>5</LogTamMaxMB>
oObserver>9</M7doObserver> //quebra a função copy
<PathBibliotecasAuxiliares>.\</PathBibliotecasAuxiliares>
</START>
</DARUMAFRAMEWORK>
|
Código completo
Código: |
procedure TForm1.Button1Click(Sender: TObject);
var
arq : TextFile;
linha,
conteudo,
campo,
tag1,
tag2,
tag,
novaTag : string;
i : Integer;
Parte : TStringList;
begin
Memo1.Clear;
linha := '';
conteudo := '';
campo := '';
tag1 := '';
tag2 := '';
tag := '';
novaTag := '';
Parte := TStringList.Create;
AssignFile(arq, 'C:\Users\EDU\Desktop\ProjetoDaruma\DarumaFrameWork.xml');
{$I-}
Reset(arq); // Abre o arquivo APENAS para LEITURA
{$I+}
if (IOResult <> 0) then
begin
memo1.Lines.Add('Falha na abertura do arquivo!');
end;
while (not EOF(Arq)) do
begin
Readln(Arq, Linha);
Parte.Add(Linha);// Carregamos o conteúdo do arquivo para Parte
end;
// Início do trecho com problema
for I := 0 to Parte.Count - 1 do
begin
Memo1.Lines.Add(Parte[i]);
if (Parte[i] = Parte[5]) then
begin
campo := Edit1.Text;
linha := Parte[i];
tag1 := Copy(linha, 5, 14);
conteudo := Copy(linha, 19, 1);
tag2 := Copy(linha, 20, 15);
novaTag := tag1+campo+tag2;
Parte.Delete(5);
Parte.Insert(5, novaTag);
Memo1.Lines.Add(novaTag);
end;
end;
// Fim do trecho com problema
CloseFile(Arq); // Fechamos o arquivo apenas para leitura
Rewrite(Arq); // Abrimos o arquivo para edição (O conteúdo antigo será apagado, por isso devemos reescrever o arquivo inteiro)
for I := 0 to Parte.Count - 1 do
WriteLn(Arq, Parte[I]); // pegamos o conteúdo de Parte e inserimos no arquivo
CloseFile(Arq); // fechamos o arquivo
end;
end.
|
segue o xml completo:
Código: |
<DARUMAFRAMEWORK>
<START>
<LocalArquivos>C:\</LocalArquivos>
<LocalArquivosRelatorios>C:\</LocalArquivosRelatorios>
<LogTamMaxMB>5</LogTamMaxMB>
<ModoObserver>0</ModoObserver>
<PathBibliotecasAuxiliares>.\</PathBibliotecasAuxiliares>
<Produto>ECF</Produto>
<ThreadAoIniciar>0</ThreadAoIniciar>
<TipoRegistro>2</TipoRegistro>
<TokenEncurtadorUrl>0</TokenEncurtadorUrl>
</START>
<DUAL>
<AguardarProcesso>1</AguardarProcesso>
<Auditoria>0</Auditoria>
<TamanhoBobina>48</TamanhoBobina>
<CodePageAutomatico>0</CodePageAutomatico>
<ControleAutomatico>0</ControleAutomatico>
<EnterFinal>1</EnterFinal>
<Inicializou>0</Inicializou>
<LinhasGuilhotina>0</LinhasGuilhotina>
<ModoGaveta>0</ModoGaveta>
<PortaComunicacao>COM1</PortaComunicacao>
<EndPortaParalela></EndPortaParalela>
<Tabulacao>05,10,15,20,30,40</Tabulacao>
<Margem>00;00</Margem>
<TempoEsperaLeitura>10</TempoEsperaLeitura>
<Termica>1</Termica>
<Velocidade>9600</Velocidade>
<ZeroCortado>0</ZeroCortado>
<Rota1>COM1>000.000.000.000:0000</Rota1>
<Rota2>COM2>000.000.000.000:0000</Rota2>
<Rota3>COM3>000.000.000.000:0000</Rota3>
<Rota4>COM4>000.000.000.000:0000</Rota4>
<Rota5>COM5>000.000.000.000:0000</Rota5>
<AtivaRota>0</AtivaRota>
<CaracterSeparador>;</CaracterSeparador>
<FormataTexto>IMP</FormataTexto>
<Wine>0</Wine>
</DUAL>
<ECF>
<AguardarBitmapRZ>0</AguardarBitmapRZ>
<AguardarImpressao>0</AguardarImpressao>
<AjustaDATAM>0</AjustaDATAM>
<AlteraFPGTO>1</AlteraFPGTO>
<ArquivoLeituraX>LeituraX.ser</ArquivoLeituraX>
<ArredondarTruncar>A</ArredondarTruncar>
<Auditoria>0</Auditoria>
<CaracterSeparador>;</CaracterSeparador>
<ControleAutomatico>0</ControleAutomatico>
<DelayEntreBytes>010</DelayEntreBytes>
<EncontrarECF>1</EncontrarECF>
<EmErroBuscarPorta>0</EmErroBuscarPorta>
<EnviarAvisoAoUsuario>0</EnviarAvisoAoUsuario>
<EnviarErroAoUsuario>0</EnviarErroAoUsuario>
<FarmaciaPopular>0</FarmaciaPopular>
<GerandoRelatorio>0</GerandoRelatorio>
<HabilitaNFCe>0</HabilitaNFCe>
<NumeroECFCompativel>001</NumeroECFCompativel>
<HabilitaNotificacaoWS>0</HabilitaNotificacaoWS>
<HorarioVeraoInicio></HorarioVeraoInicio>
<HorarioVeraoFim></HorarioVeraoFim>
<LegendaInmetro>0</LegendaInmetro>
<LMFCompleta>0</LMFCompleta>
<MaxFechamentoAutomatico>0</MaxFechamentoAutomatico>
<MensagemApl1></MensagemApl1>
<MensagemApl2></MensagemApl2>
<MensagemAviso>AVISO: [O PAPEL ESTA ACABANDO!!]. INSIRA NOVA BOBINA DE PAPEL.</MensagemAviso>
<ModoGaveta>0</ModoGaveta>
<NaoAvisarPoucoPapel>0</NaoAvisarPoucoPapel>
<NomeUltimoCMD>eInterpretarRetorno_ECF_Daruma</NomeUltimoCMD>
<PortaSerial>COM1</PortaSerial>
<ReceberAvisoEmArquivo>0</ReceberAvisoEmArquivo>
<ReceberDescricaoAvisoEmArquivo>0</ReceberDescricaoAvisoEmArquivo>
<ReceberDescricaoErroEmArquivo>0</ReceberDescricaoErroEmArquivo>
<ReceberErroEmArquivo>0</ReceberErroEmArquivo>
<ReceberInfoEstendida>1</ReceberInfoEstendida>
<ReceberInfoEstendidaEmArquivo>0</ReceberInfoEstendidaEmArquivo>
<ReducaoZAutomatica>0</ReducaoZAutomatica>
<RetornarAvisoErro>0</RetornarAvisoErro>
<SangriaMensagem></SangriaMensagem>
<SangriaValor>100</SangriaValor>
<SerialByteAByte>0</SerialByteAByte>
<SinalSonoroIniciar>1</SinalSonoroIniciar>
<SuprimentoMensagem></SuprimentoMensagem>
<SuprimentoValor>100</SuprimentoValor>
<TipoUltimoDocumento>5</TipoUltimoDocumento>
<TituloMensagem>[DarumaFramework]</TituloMensagem>
<Velocidade>9600</Velocidade>
<VelocidadeAntiga>9600</VelocidadeAntiga>
<VelocidadeGeracaoRelatorio>1</VelocidadeGeracaoRelatorio>
<Wine>0</Wine>
<CF>
<BMP>0</BMP>
<CupomAdicionalDllConfig>111111111100000000000</CupomAdicionalDllConfig>
<CupomAdicionalDllTitulo>Cupom Adicional</CupomAdicionalDllTitulo>
<CupomMania>0</CupomMania>
<FormaPgto>Dinheiro</FormaPgto>
<IdentificaConsumidorFormatado></IdentificaConsumidorFormatado>
<MascaraIdentificaConsumidor>0</MascaraIdentificaConsumidor>
<MensagemFormaPagamento></MensagemFormaPagamento>
<MensagemPromocional></MensagemPromocional>
<MinasLegal>0</MinasLegal>
<ModoPreVenda>0</ModoPreVenda>
<NotaLegal>0</NotaLegal>
<Quantidade>1</Quantidade>
<TamanhoMinimoDescricao>15</TamanhoMinimoDescricao>
<TipoDescAcresc>D%</TipoDescAcresc>
<TorpedoPremiadoParaiba>0</TorpedoPremiadoParaiba>
<UnidadeMedida>un</UnidadeMedida>
<ValorDescAcresc>0.00</ValorDescAcresc>
</CF>
<CCD>
<DocOrigem>036305</DocOrigem>
<FormaPgto>Cartao</FormaPgto>
<LinhasTEF>20</LinhasTEF>
<SaltarLinhasTEF>0</SaltarLinhasTEF>
<Parcelas>01</Parcelas>
<Valor>000000019074</Valor>
</CCD>
<CHEQUE>
<XLinha1>10</XLinha1>
<XLinha2>10</XLinha2>
<XLinha3>10</XLinha3>
<YLinha1>10</YLinha1>
<YLinha2>20</YLinha2>
<YLinha3>30</YLinha3>
<TimeOutEjetarCheque>20</TimeOutEjetarCheque>
</CHEQUE>
<LEI12741>
<ColunasIBPT>0;4;5;1;6;7</ColunasIBPT>
<LocalArquivoNCM>./IBPTAX.csv</LocalArquivoNCM>
<LocalMSG>0</LocalMSG>
<MSG>Val Aprox Tributos | Fonte:IBPT</MSG>
<SeparadorIBPT>;</SeparadorIBPT>
</LEI12741>
<REDUCAOZ>
<AvisarOperacoesReducaoZ>0</AvisarOperacoesReducaoZ>
<AvisarReducaoZ>0</AvisarReducaoZ>
<Relatorios></Relatorios>
<PeriodoInicial></PeriodoInicial>
<PeriodoFinal></PeriodoFinal>
<ChavePrivada></ChavePrivada>
<ExecutarAntesOuDepois>1</ExecutarAntesOuDepois>
<MensagemAviso>Geracao de relatorio sera executada automaticamente apos a reducao Z, favor nao desligar a impressora</MensagemAviso>
<RetornarInformacao></RetornarInformacao>
<TimeOutReducaoZ>30</TimeOutReducaoZ>
</REDUCAOZ>
<SINTEGRA>
<Bairro>Bairro</Bairro>
<CEP>12345.123</CEP>
<Cod_Convenio>1</Cod_Convenio>
<Cod_Finalidade>1</Cod_Finalidade>
<Cod_Natureza>1</Cod_Natureza>
<Complemento>Complemento</Complemento>
<Contato_Nome>Nome Contato</Contato_Nome>
<Contato_Telefone>(12) 1234-1234</Contato_Telefone>
<Fax>(12) 1234-1234</Fax>
<Logradouro>Logradouro</Logradouro>
<Municipio>Municipio</Municipio>
<Numero>12345</Numero>
<RateioSubTotal>0</RateioSubTotal>
<UF>XX</UF>
</SINTEGRA>
<MOVIMENTOPORECF>
<SOFTWAREHOUSE>
<CNPJ></CNPJ>
<IE></IE>
<IM></IM>
<Denominacao></Denominacao>
<NomePAFECF></NomePAFECF>
<VersaoPAFECF></VersaoPAFECF>
<MD5PAFECF></MD5PAFECF>
<VersaoERPAFECF></VersaoERPAFECF>
</SOFTWAREHOUSE>
</MOVIMENTOPORECF>
<ATOCOTEPE>
<Automatico>0</Automatico>
</ATOCOTEPE>
</ECF>
<TA2000>
<Auditoria>0</Auditoria>
<MensagemBoasVindasLinha1>**********Daruma Automacao**************</MensagemBoasVindasLinha1>
<MensagemBoasVindasLinha2>********MicroTerminal TA2000************</MensagemBoasVindasLinha2>
<Porta>LPT0</Porta>
</TA2000>
<MODEM>
<Apn>XXXXX</Apn>
<Auditoria>0</Auditoria>
<BandejaInicio>SIM1</BandejaInicio>
<CaptionWinAPP>MODEM - MIN100/MIN200</CaptionWinAPP>
<ControleAutomatico>0</ControleAutomatico>
<ConfirmaEntregaSMS>0</ConfirmaEntregaSMS>
<IpCliente>XXX.XXX.XXX.XXX</IpCliente>
<IpServidor>XXX.XXX.XXX.XXX</IpServidor>
<LerApagar>FALSE</LerApagar>
<ListarSms>0</ListarSms>
<ListarSmsSIM>0</ListarSmsSIM>
<NumeroTentativas>0</NumeroTentativas>
<Porta>COM1</Porta>
<PortaGPRS>1001</PortaGPRS>
<PortaTimeOut>5</PortaTimeOut>
<Profile>1</Profile>
<ReceberNumeroChamada>0</ReceberNumeroChamada>
<SalvarRetornoSMS>0</SalvarRetornoSMS>
<Senha>XXXXX</Senha>
<SmsClasse0>0</SmsClasse0>
<Tecla>F10</Tecla>
<TempoAlertar>4000</TempoAlertar>
<TotalSmsEnviados>0</TotalSmsEnviados>
<Thread>FALSE</Thread>
<Usuario>XXXXX</Usuario>
<Velocidade>115200</Velocidade>
</MODEM>
<DSP>
<Auditoria>0</Auditoria>
<PortaSerial>COM5</PortaSerial>
<Velocidade>9600</Velocidade>
<Mascara></Mascara>
<MENSAGEMABERTURA>
<Linha1>Urmet Daruma</Linha1>
<Linha2>DarumaFramework</Linha2>
</MENSAGEMABERTURA>
<MENSAGEMENCERRAMENTO>
<Linha1></Linha1>
<Linha2></Linha2>
</MENSAGEMENCERRAMENTO>
<MENSAGEMPROMOCIONALDSP>
<Animacao></Animacao>
<Linha1></Linha1>
<Linha2></Linha2>
</MENSAGEMPROMOCIONALDSP>
</DSP>
<OBSERVER>
<PathEntrada>c:\Daruma.cmd</PathEntrada>
<PathSaida>c:\Daruma.ret</PathSaida>
<Latencia>25</Latencia>
<Log_Path>OBSERVER.LOG</Log_Path>
<Separador>;</Separador>
<Gravar_Log>0</Gravar_Log>
</OBSERVER>
<WSWIN8>
<NomeFantasia></NomeFantasia>
<SyncAssync>0</SyncAssync>
<IndiceSegmento>0</IndiceSegmento>
</WSWIN8>
<NFCE>
<AjustarDataHora>0</AjustarDataHora>
<AvisoContingencia>0</AvisoContingencia>
<Auditoria>0</Auditoria>
<EmissaoCtg>0</EmissaoCtg>
<EncontrarImpressora>2</EncontrarImpressora>
<EnderecoServidor></EnderecoServidor>
<EntradaCtg>0</EntradaCtg>
<NaoReenviarCtg>0</NaoReenviarCtg>
<PathArquivosCtgOffline>.\</PathArquivosCtgOffline>
<TempoCtg>0</TempoCtg>
<TimeOutWS>10</TimeOutWS>
<IMPRESSORA>
<ControleAutomatico>0</ControleAutomatico>
<MarcaImpressora>0</MarcaImpressora>
<PortaComunicacao>COM1</PortaComunicacao>
<TamanhoBobina>48</TamanhoBobina>
<Velocidade>9600</Velocidade>
<ConfAnterior>0</ConfAnterior>
</IMPRESSORA>
</NFCE>
<NFE>
<Auditoria>0</Auditoria>
<EnderecoServidor></EnderecoServidor>
</NFE>
</DARUMAFRAMEWORK>
|
|
|
Voltar ao Topo |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qui Mar 30, 2017 10:56 am Assunto: |
|
|
Entendi. Faça um teste com o código abaixo:
Código: | procedure TForm1.button1Click(Sender: TObject);
var
arq: TextFile;
linha, campo, novaTag: string;
i: Integer;
Parte: TStringList;
begin
Memo1.Clear;
linha := EmptyStr;
campo := EmptyStr;
novaTag := EmptyStr;
Parte := TStringList.Create;
AssignFile(arq, 'C:\Users\EDU\Desktop\ProjetoDaruma\DarumaFrameWork.xml');
{$I-}
Reset(arq); // Abre o arquivo APENAS para LEITURA
{$I+}
if (IOResult <> 0) then
Memo1.Lines.Add('Falha na abertura do arquivo!');
while (not EOF(arq)) do
begin
Readln(arq, linha);
Parte.Add(linha); // Carregamos o conteúdo do arquivo para Parte
end;
// Início do trecho com problema
for i := 0 to Parte.Count - 1 do
if (Parte[i] = Parte[5]) then
begin
campo := Edit1.Text;
linha := Parte[i];
novaTag := '<ModoObserver>' + campo + '</ModoObserver>';
Parte.Delete(5);
Parte.Insert(5, novaTag);
Memo1.Lines.Add(novaTag);
end
else
Memo1.Lines.Add(Parte[i]);
// Fim do trecho com problema
CloseFile(arq); // Fechamos o arquivo apenas para leitura
Rewrite(arq);
// Abrimos o arquivo para edição (O conteúdo antigo será apagado, por isso devemos reescrever o arquivo inteiro)
for i := 0 to Parte.Count - 1 do
WriteLn(arq, Parte[i]); // pegamos o conteúdo de Parte e inserimos no arquivo
CloseFile(arq); // fechamos o arquivo
end; |
_________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qui Mar 30, 2017 11:30 am Assunto: |
|
|
Uma outra maneira mais simples usando apenas StringList:
Código: | procedure TForm1.Button4Click(Sender: TObject);
var
campo: string;
i: Integer;
Parte: TStringList;
begin
Memo1.Clear;
Parte := TStringList.Create;
try
campo := Edit1.Text;
Parte.LoadFromFile('C:\Users\EDU\Desktop\ProjetoDaruma\DarumaFrameWork.xml');
Parte[5] := '<ModoObserver>' + campo + '</ModoObserver>';
Parte.SaveToFile('C:\Users\EDU\Desktop\ProjetoDaruma\DarumaFrameWork.xml');
Memo1.Text := Parte.Text;
finally
Parte.Free;
end;
end; |
_________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
|
eduardo.serqueira@outlook Novato
Registrado: Terça-Feira, 28 de Março de 2017 Mensagens: 6
|
Enviada: Qui Mar 30, 2017 11:55 am Assunto: |
|
|
Nossa muito mais simples, galera muito obrigado pela ajuda vou encerrar este tópico porque foi resolvido, agradeço mesmo pela força! |
|
Voltar ao Topo |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|