File66. Дан строковый файл. Создать новый строковый файл, в котором строки из исходного файла располагались бы в лексикографическом порядке, то есть по возрастанию кодов их символов, начиная с первого символа.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
program File66; type st = String[100]; var S,Name_in,Name_out: St; F_in,F_out: file of st; len:integer; Function DelLineInFile(S,Name:String):integer; var F,F_temp:Text; TempS:String; len:Integer; begin Assign(F,Name); Reset(F); Assign(F_temp,'~'+Name); Rewrite(F_temp); len:=0; if not eof(F) then begin Readln(F,TempS); inc(len); end; while (not eof(F)) and (S<>TempS) do begin Writeln(F_temp,TempS); Readln(F,TempS); inc(len); end; while not eof(F) do begin Readln(F,TempS); Writeln(F_temp,TempS); inc(len); end; Close(F); Close(F_temp); Erase(F); Rename(F_temp,Name); DelLineInFile:=len; end; Function SearchMinString(Name:String):String; var minS,tempS:String; F:Text; begin Assign(F,Name); Reset(F); if not eof(F) then Readln(F,minS); while not eof(F) do begin Readln(F,TempS); if TempS<minS then minS:=TempS; end; Close(F); SearchMinString:=minS; end; begin Write('File In: '); Readln(Name_in); Assign(F_in,Name_in); Reset(F_in); Write('File Out: '); Readln(Name_out); Assign(F_out,'~'+Name_out); Rewrite(F_out); while (not eof(F_in)) do begin Read(F_in,S); Write(F_out,S); end; Close(F_out); Close(F_in); Assign(F_out,Name_out); Rewrite(F_out); While len>1 do begin S:=SearchMinString('~'+Name_out); len:=DelLineInFile(S,'~'+Name_out); Write(F_out,S); end; Assign(F_in,'~'+Name_out); Erase(F_in); Close(F_out); end. |
Другие задачи из раздела File можно посмотреть здесь.
Комментарии: