En tu caso tenes 2 cosas mas.. reabris siempre el archivo... (en cada loop)
y despues le haces un NEXT.. a nada!!
tendrias que poner DATA.NEXT
y por ultimo cerrar el archivo..
PAra Tratar los caracteres lo que podes hacer es assigarlos a una variable de TEXTO, en vez de al archivo.. y ahi modificarlo!! (cambiar lo que quieras y por ultimo guardarlo)
Tambien podrias hacerlo con un TSTringList
y te olvidas del problema de writeLn yWrite and Close y todo eso!!!
Quedaria mas o menos asi.
Código Delphi
[-]
var
i : integer;
a: Integer;
archivo : TStringList;
Data : TDataSet;
s:String;
begin
Archivo:=TStringList.Create;
Data:=DBGRID1.DataSource.DataSet;
Data.First;
while not(Data.eof) do
begin
s:='';
for i := 0 to dbgrid1.Columns.Count-1 do
begin
s:=s+(Data.FieldByName(DBGrid1.Columns[i].FieldName).asString+'|');
end;
archivo.Add(s);
data.Next;
end;
if FileExists('Test.txt') then DeleteFile('Test.txt');
archivo.SaveToFile('Test.txt') ;
end;