GARANTIR DESCONTO

Fórum Alterar Linha em Arquivo #321797

20/05/2006

0

Pesso ajuda ´Pelo Amor de Deus´
.......................................

No meu trabalho eu tenho q pegar um disquete colocar no drive
entrar no MS-DOS e entrar no edit para fazer umas alterações no
Arquivo do Disquete...

Exemplo:

C:\>edit xam20051.mns

dai dentro desse arquivos existem linhas como essas

000000810206125000506
025425510306125000506
152845810406125000506
254885510506125000506
369525710606125000506
477852510706125000506
568798810806125000506
511115610906125000506
532568411006125000506

dai eu vou em Procurar e depois em Substituir (ctrl+P , ctrl+S)
pois tenho q substituir parte dessas linhas
mais especifico, preciso alterar o valor que esta entre os números 1
vou detalhar a linha aqui abaixo para exclarecimentos:

0000008 1 0206 1 2500 0506
0254255 1 0306 1 2500 0506
1528458 1 0406 1 2500 0506
2548855 1 0506 1 2500 0506

esse exemplo é as linhas que mensionei mais acima é que agora eu
coloquei espaço entre os dados apenas para compreenção de vocês.

nas linhas temos:

0000008 - Que é a Matrícula do cara.
1 - indica onde começa minha alteração.
0206 - data do pagamento (tenho q alterar apenas esse valor para 200602).
1 - indica o final de onde devo alterar.
2500 - valor pago.
0506 - Data de Vencimento.


000000810206125000506 - Linha Normal (Antes da Alteração).
00000081200602125000506 - Linha Alterada.

caso a data fosse 0306 teria q ser alterado para 200603 e etc

Minha idéia... fazer um programa que altere os dados q estão entre o números 1 (Ex.: de 0206 para 200602).

Tem + uma coisinha por exemplo as vezes a data de pagamento q fica entre os numeros 1 se repetem na mesma linha so q na parte de data de vencimento:

Exemplo:

0000008 1 0506 1 2500 0506

eu so posso alterar o valor que esta entre os números 1

Sei q no Visual Basic tem o ´Modo de Acesso Aleatório´ que da pra mim fazer algo nesse estilo

porem no delphi não tenho a minima ideia de como fazer nem por onde começar...

alguem pode me ajudar?

desde já agradeço a todos pela paciência comigo...

abraço a todos irmãos!!


Topetebg

Topetebg

Responder

Posts

20/05/2006

Amarildo

Ola topetebg, nao sei se consegui enter tudo que voce descreveu, mas vamos lá, voce possui um arquivo tipo .txt identifcado por esta extensão, voce deseja alterar toda vez que voce recebe essas informações, mas voce esta tentando achar um outro meio para estar realizando essas operações, é isso sua dúvida? No aguardo por sua resposta.


Responder

Gostei + 0

20/05/2006

Topetebg

Ola topetebg, nao sei se consegui enter tudo que voce descreveu, mas vamos lá, voce possui um arquivo tipo .txt identifcado por esta extensão, voce deseja alterar toda vez que voce recebe essas informações, mas voce esta tentando achar um outro meio para estar realizando essas operações, é isso sua dúvida? No aguardo por sua resposta.



exatamente...

tenho bom conhecimento de delphi apesar de estar iniciando na programação

+ ate hoje todos aplicativos que desenvolvi eram relacionados a banco de dados Access

ou seja naum sei quase nada de manipulação de arquivos de dados

se puder me ajudar eu agradeço muito!!!

vlw irmão!


Responder

Gostei + 0

20/05/2006

Bon Jovi

No Delphi vc pode usar as funções Copy e Pos. Dê uma olhada no Help sobre elas. Vai aí um exemplo. Não validei, teste.

function TForm1.Altera(Linha: string): string;
var
  AnoMes: string;
  Ano, Mes: integer;
  ParteInicial, ParteFinal: string;
begin
  ParteInicial := Copy(Linha, 1, 8);
  ParteFinal := Copy(Linha, 13, Length(Linha));

  AnoMes := Copy(Linha, 9, 4);
  Ano := StrToInt(Copy(AnoMes, 3, 2));
  Mes := StrToInt(Copy(AnoMes, 1, 2));

  //Se for sempre ano 2000. Senao faça um if!
  Ano := Ano + 2000;

  Result := ParteInicial + FormatFloat(´0000´, Ano) + FormatFloat(´00´, Mes) + ParteFinal;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  Arquivo: TStringList;
begin
  Arquivo := TStringList.Create;
  try
    Arquivo.LoadFromFile(´c:\teste.txt´);
    for i := 0 to Arquivo.Count - 1 do
      Arquivo[i] := Altera(Arquivo[i]);
    Arquivo.SaveToFile(´c:\teste_alterado.txt´);
  finally
    Arquivo.Free;
  end;
end;



Responder

Gostei + 0

20/05/2006

Topetebg

minha unit ta assim:



unit ManutUnit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation function TForm1.Altera(Linha: string): string; var AnoMes: string; Ano, Mes: integer; ParteInicial, ParteFinal: string; begin ParteInicial := Copy(Linha, 1, 8); ParteFinal := Copy(Linha, 13, Length(Linha)); AnoMes := Copy(Linha, 9, 4); Ano := StrToInt(Copy(AnoMes, 3, 2)); Mes := StrToInt(Copy(AnoMes, 1, 2)); //Se for sempre ano 2000. Senao faça um if! Ano := Ano + 2000; Result := ParteInicial + FormatFloat(´0000´, Ano) + FormatFloat(´00´, Mes) + ParteFinal; end; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i: integer; Arquivo: TStringList; begin Arquivo := TStringList.Create; try Arquivo.LoadFromFile(´c:\teste.txt´); for i := 0 to Arquivo.Count - 1 do Arquivo[i] := Altera(Arquivo[i]); Arquivo.SaveToFile(´c:\teste_alterado.txt´); finally Arquivo.Free; end; end; end.


porem naum funcionou :(

[error]ManutUnit.pas(23): Undeclared identifier: ´Altera´
[error]ManutUnit.pas(29): Undeclared identifier: ´Linha´
[error]ManutUnit.pas(30): Incompatible types
[error]ManutUnit.pas(30): Incompatible types
[error]ManutUnit.pas(32): Incompatible types
[error]ManutUnit.pas(39): Undeclared identifier: ´Result´
[error]ManutUnit.pas(52): Undeclared identifier: ´Altera´
[error]ManutUnit.pas(32): Incompatible types


o q pode ser?


Responder

Gostei + 0

20/05/2006

Topetebg

Desculpa...

era uma coisinha muito simples

em
function form1.Altera(.....

so tirei o form1 ficou

function Altera(...


funcionou perfeitamente


vlw amigo...

vou estudar o Algoritimo que me enviou pra me aprofundar +


vlwwwwwwwwwwww


=***


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar