{ JAN DOGGEN > I have already written the parts that open and read the File and find the > Record I need to update. Now I want to replace part of the String of > Characters which comprise this Record, With the Record remaining in its > location in the File. No, if you use a Text File (Var T: Text) it's either read or Write. 1. if you only replace 'n' Characters With another 'n' Characters, it is no big problem, although hardly an elegant solution: you can Type it as a File of Byte, then read /Write each String using something like: } Procedure BlockWriteStr(Var F : File; S : String); Var L, Written : Word; begin L := Length(S) + 1; BlockWrite(File(F), S[0], L, Written); Assert(L = Written, 'Error writing to disk (disk full ?)'); end; Procedure BlockReadStr(Var F : File; Var S : String); Var ReadIn : Word; begin BlockRead(File(F), S[0], SizeOf(Byte)); BlockRead(File(F), S[1], Ord(S[0]), ReadIn); Assert(Ord(S[0]) = ReadIn, 'Error reading from disk'); end; { Of course, you'll have to remember your FilePos(). 2. if you replace With a different number of Chars, I cannot help you, other than suggesting you use an input and output Text File, and reWrite the whole thing. Not very elegant either. BTW, as I am still in my editor, I might as well copy this too: } Function SubstituteStr(Original, Part1, Part2 : String): String; (* Replaces all subStrings in String With . * * Example: * SubstituteStr('Abracadabra','ra','rom') ==> 'Abromcadabrom' * The Function does not work recursively, so: * SubstituteStr('Daaaaaaaar','aa','a') returns 'Daaaar', not 'Dar'.*) Var S : String; P, L, T : Byte; begin if Original = '' then begin SubstituteStr := ''; Exit; end; S := ''; L := Length(Part1); T := 1; P := Pos(Part1,Copy(Original,T,255)); While P <> 0 DO begin S := S + Copy(Original, T, P - 1) + Part2; T := T + P + L - 1; P := Pos(Part1, Copy(Original, T, 255)); end; SubstituteStr := S + Copy(Original, T, 255); end; Function SubstituteStrX(Original, Part1, Part2 : String) : String; (* Like SubstituteStr, but now the Function works recursively, so * SubstituteStrX('Daaaaaaaar','aa','a') returns 'Dar'. *) Var S : String; P, L, T : Byte; begin if Original = '' then begin SubstituteStrX := ''; Exit; end; S := Original; T := 1; L := Length(Part1); P := Pos(Part1,S); While P <> 0 DO begin S := Copy(S, 1, P - 1) + Part2 + Copy(S, P + L, 255); P := Pos(Part1, S); end; SubstituteStrX := S; end;