Помогите решить задачку!
Дано: текст на русском языке.
Задане: переформатировать текст так, чтобы длина любой строки не превосходила 40 символов.(Выравнивать по правому краю не требуется).
Спасибо заранее!
_JC_, поиском пользоваться когда-нибудь будем?
http://forum.pascal.net.ru/index.php?showtopic=3675&view=findpost&p=33020
Думаю, можно сделать так:
Открываем исходный файл для чтения, и новый - для записи (в конце старый удаляем, а новый переименовываем по имени старого). А дальше, считываем слова из исходного файла и записываем их в новый. Причем если при записи нового слова в очередную строку нового файла, длина строки превышает сорок, то НЕ дописываем это слово на этой строке - переносим на следующее.
Спасибо большое прости что не воспользовался поиском!
У меня появился вопрос, а можноли сделать так что бы вводишь текст с клавиатуры и он разбивается по 40 символов в строку? Если да то ты не мог бы сказать как это сделать???
объяви s : string[40], больше сорока ты в нее не запишеш, но все лишнее просто исчезнет, еще можешь вводить строку по символьно.
можно как-то на подобии вот этого, только наприер реализовать это как ф-ю, которая еще будет возвращать кол-во строк :
uses crt;
type
TText = array[1..50] of string[40];
var
T : TText;
ch: char;
i : integer;
Begin
clrscr;
i :=1 ;
repeat
ch := readkey;
write(ch);
if not(ch=#27) and not(ch=#0) then
T[i] := T[i]+ch;
if length(T[i])=40 then begin
inc(i);
writeln;
end;
until (i=51)or(ch=#27);
readln;
End.
klem4, а проверять на нажатие "расширенной" клавиши не надо? А то если юзер нажмет клавишу "Стрелка вверх", то в строке появятся символы #0 и "H" ...
исправил вроде
А почему каждый символ воспринимается только со 2-ого нажатия можно ли это исправить? И как сделать чтобы он переносил не на серидине слова а его целиком если оно не влазит в строку???
Volvo мщжет ты мне подскажешькак мне сделать эту задачу???
Да вероятно ты прав извини!
uses crt;
const
maxLen = 40;
delimit = [' ', '.', ','];
var
s, T: string;
ch: char;
begin
s := '';
repeat
ch := readkey;
case ch of
#0 : readkey;
#27: ; { ничего не делать ... }
else begin
write(ch);
s := s + ch;
if length(s) = maxLen then begin
T := '';
while not (s[length(s)] in delimit) do begin
T := s[length(s)] + T;
delete(s, length(s), 1);
gotoxy(wherex - 1, wherey); clreol;
end;
s := T;
writeln;
write(s);
end;
end;
end;
until ch = #27;
end.
Извиняюсь за то что беспокою, но этот Му.....ЖИК сказал что нужно что бы текст был загружен из файла! Вобщем задача звучит так : загруженый текст из файла разбить на строки не длиннее 40 символов! Поможите??? Спасибо!
_JC_, приводим задачу к уже решенной :D :
uses crt;
const
maxLen = 40;
delimit = [' ', '.', ','];
var
s, T: string;
ch: char;
f: text;
begin
assign(f, 'text.txt');
reset(f);
s := '';
while not eof(f) do begin
read(f, ch);
write(ch);
s := s + ch;
if length(s) = maxLen then begin
T := '';
while not (s[length(s)] in delimit) do begin
T := s[length(s)] + T;
delete(s, length(s), 1);
gotoxy(wherex - 1, wherey); clreol;
end;
s := T;
writeln;
write(s);
end;
end;
close(f);
end.