Alterar Linha em Arquivo
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!!
.......................................
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
Curtidas 0
Respostas
Amarildo
20/05/2006
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.
GOSTEI 0
Topetebg
20/05/2006
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!
GOSTEI 0
Bon Jovi
20/05/2006
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;
GOSTEI 0
Topetebg
20/05/2006
minha unit ta assim:
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?
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?
GOSTEI 0
Topetebg
20/05/2006
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
=***
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
=***
GOSTEI 0