PDA

Ver la Versión Completa : ayuda con un txt


yue20023
24-10-2007, 20:54:37
tengo una aplicacion que elabore y me deja limpiar archivos txt el problema es que quiero que no me borre 2 lineas y no puendo encontrar la solucion el archivo original es el siguiente


http://usuarios.lycos.es/yuehang/Copia de uv8922304275aa.txt (http://usuarios.lycos.es/yuehang/Copia%20de%20uv8922304275aa.txt)

quiero dejar la linea en donde dice oficinas y la linea en donde dice siniestro pero no me queda mi codigo es el siguiente :


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
fsarchivoaleer : TextFile;
fsarchivosalida :TextFile;
s,s1:string;
begin
if fileExists(Edit1.Text) then begin
AssignFile(fsarchivoaleer,Edit1.Text);
rReset(fsarchivoaleer);
AssignFile(fsarchivosalida,Edit1.Text+'o');
Rewrite(fsarchivosalida);
while not eof(fsarchivoaleer) do begin
readln(fsarchivoaleer,s);
if length(trim(s))>0 then begin
if s[1] in ['O','-','_','S'] then begin
s:=''
end else begin
if s[1]='0' then begin
if length(trim(s1))>0 then
writeln(fsarchivosalida,s1);
s1 := s;
end else
if s[1]<> '-' then begin
if s[1]='R' then begin
if s[67]='' then
s := copy(s,1,66);
s1 := s1+' '+s;
end;
end else
if s[64] in ['0','1','2','3','4','5','6','7','8','9'] then
s1 := s1+ ' '+ copy(s,62,67);
end;

end;
end;
CloseFile(fsarchivosalida);
CloseFile(fsarchivoaleer);
end;

end;

end.


por favor ayudenmeeeeeeeee!!!!!!!!!! :eek:

cHackAll
24-10-2007, 21:06:23
No entiendo eso de "...me deja limpiar archivos txt...", que tal si subes un archivo de salida para entender mejor?

aeff
24-10-2007, 21:17:37
de donde sacaste la funcion *rReset*??

cHackAll
24-10-2007, 21:48:50
procedure TForm1.Button1Click(Sender: TObject);
var Input, Output: TextFile; Line: string;
begin
AssignFile(Input, Edit1.Text);
{$i-}Reset(Input);{$i+}
if IoResult <> 0 then Exit;
AssignFile(Output, Edit1.Text + 'o');
ReWrite(Output);
while not EOF(Input) do
begin
ReadLn(Input, Line);
while (Line <> '') and (Line[1] = ' ') do
Delete(Line, 1, 1);
if (Line <> '') and
(((Line[3] in ['0'..'9']) and (Line[11] = ' ')) or
((Copy(Line, 1, 9) = 'OFICINA: ') or (Copy(Line, 1, 9) = 'SINIESTRO'))) then
WriteLn(Output, Line);
end;
CloseFile(Output);
CloseFile(Input);
end;

Me tome la libertad de optimizarlo un poquito :cool:; creo que tu función no tomaba en cuenta la última línea.

Espero te sea de utilidad.
Saludos

yue20023
25-10-2007, 00:53:06
asi se limpia el archivo le quita los demas encabezados y le quita los espacios

http://usuarios.lycos.es/yuehang/uvo.txt lo que quiero haces es deja el primer encabezado y todo lo demas dejarlo como esta aquien el final launica diferencia es que quiero que el primer encabezado salga y los demas los borre (http://usuarios.lycos.es/yuehang/uvo.txt)

cHackAll
25-10-2007, 01:25:54
amigo yue20023; no se qué función usar para crear los nombres... son los que están en "oficinas" o "siniestro" ¿?¿?¿?

Me parece que si elaboras tal reporte de una BD te será mil y un veces más sencillo realizar tu "reporte final" desde allí, ademas que no fue muy clara tu pregunta, tomate unos minutos adicionales en formularla.

Saludos (http://www.clubdelphi.com/foros/guiaestilo.php)