I did it like this. And files of 500 megabytes in size do not process - lack of memory):
procedure TForm1.Button1Click(Sender: TObject); var t:TStringList; s: string; k,n,i: integer; begin n:=strtoint(Edit1.Text);//удалить в начале k:=strtoint(Edit2.Text);//удалить в конце t:=TStringList.Create; t.LoadFromFile('1.txt');//файл в папке с программой for i:=0 to t.Count-1 do begin s:=t[i]; if k>=length(s) then s:='' else delete(s,length(s)-k+1,k); if n>=length(s) then s:='' else delete(s,1,n); t[i]:=s; end; t.SaveToFile('2.txt'); t.Free; ShowMessage('Файл 1.txt преобразован и записан в файл 2.txt') end; How to remake through:
AsssignFile, Reset / Rewrite, CloseFile
That is, read in rows and not load into memory.
>>> I do this (What is my mistake?): <<<
procedure TForm2.Button1Click(Sender: TObject); var f1,f2:TextFile; s:string; k,n,i: integer; begin if OpenDialog1.Execute then begin AssignFile(f1,OpenDialog1.FileName); AssignFile(f2,ExtractFileDir(OpenDialog1.FileName)+'\out.txt'); {$i-} Reset(f1); Rewrite(f2); begin s:=f1[i]; if k>=length(s) then s:='' else delete(s,length(s)-k+1,k); if n>=length(s) then s:='' else delete(s,1,n); f2[i]:=s; end; CloseFile(f1); CloseFile(f2); end; end; end.