Text55. Дан текстовый файл. Создать символьный файл, содержащий все символы, встретившиеся в тексте, включая пробел и знаки препинания (без повторений). Символы располагать в порядке возрастания их кодов.
Решение:
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 |
program Text55; var F_in: Text; F_out: file of Char; Name:string; C:Char; Punctuation,Pout : set of char; i:integer; begin Write('File In name: '); Readln(Name); Assign(F_in,Name); Reset(F_in); Write('File Out name: '); Readln(Name); Assign(F_out,Name); Punctuation := ['’','`','[',']','(',')','{','}',':',',','-','!','.','?','"','<','>',';',' ']; Pout:=[]; While not eof(F_in) do begin While not eoln(F_in) do begin Read(F_in,C); if (C in Punctuation) then begin Punctuation:=Punctuation-[C]; Pout:=Pout+[c]; end; end; Readln(F_in); end; Close(F_in); Rewrite(F_out); for i:=0 to 255 do if (chr(i) in Pout) then begin C:=chr(i); Write(F_out,C); end; Close(F_out); end. |
Пояснение:
Создаём множество из знаков припинания:
1 |
Punctuation := ['’','`','[',']','(',')','{','}',':',',','-','!','.','?','"','<','>',';',' ']; |
Это множество в которое мы будем вносить знаки которые есть в тексте:
1 |
Pout:=[]; |
Бежим по всем символам в файле:
1 2 3 4 |
While not eof(F_in) do begin While not eoln(F_in) do begin |
—
1 |
Read(F_in,C); |
—
1 2 3 |
end; Readln(F_in); end; |
Если в тексте встречается символ, то мы заносим их в множество Pout
1 2 3 4 5 |
if (C in Punctuation) then begin Punctuation:=Punctuation-[C]; Pout:=Pout+[c]; end; |
Открываем символьный файл на запись:
1 |
Rewrite(F_out); |
Бежим по всей таблице ASCII
1 2 |
for i:=0 to 255 do if (chr(i) in Pout) then begin |
—
1 |
end; |
1 2 3 4 5 6 7 |
Rewrite(F_out); for i:=0 to 255 do if (chr(i) in Pout) then begin C:=chr(i); Write(F_out,C); end; Close(F_out); |
Другие задачи из раздела Text можно посмотреть здесь.
Комментарии: