IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Текст, порубить на 40-символьные строки
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской
Реальное имя: Макс

Репутация: -  0  +


Помогите решить задачку!
Дано: текст на русском языке.
Задане: переформатировать текст так, чтобы длина любой строки не превосходила 40 символов.(Выравнивать по правому краю не требуется).
Спасибо заранее!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






_JC_, поиском пользоваться когда-нибудь будем? angry.gif
Разбить текст на строки
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 136
Пол: Мужской
Реальное имя: Александр

Репутация: -  -2  +


Думаю, можно сделать так:
Открываем исходный файл для чтения, и новый - для записи (в конце старый удаляем, а новый переименовываем по имени старого). А дальше, считываем слова из исходного файла и записываем их в новый. Причем если при записи нового слова в очередную строку нового файла, длина строки превышает сорок, то НЕ дописываем это слово на этой строке - переносим на следующее.


--------------------
Старайтесь восполнять пробелы в области незнания! ;-D
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской
Реальное имя: Макс

Репутация: -  0  +


Спасибо большое прости что не воспользовался поиском!
У меня появился вопрос, а можноли сделать так что бы вводишь текст с клавиатуры и он разбивается по 40 символов в строку? Если да то ты не мог бы сказать как это сделать???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


объяви 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 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






klem4, а проверять на нажатие "расширенной" клавиши не надо? А то если юзер нажмет клавишу "Стрелка вверх", то в строке появятся символы #0 и "H" ...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


исправил вроде unsure.gif


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской
Реальное имя: Макс

Репутация: -  0  +


А почему каждый символ воспринимается только со 2-ого нажатия можно ли это исправить? И как сделать чтобы он переносил не на серидине слова а его целиком если оно не влазит в строку??? huh.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата(_JC_ @ 13.10.2005 17:01)
А почему каждый символ воспринимается только со 2-ого нажатия можно ли это исправить? И как сделать чтобы он переносил не на серидине слова а его целиком если оно не влазит в строку??? huh.gif


не заню, у меня воспринимает с первого нажатия нормально, а поповоду второго ... мне кажется ты не понял, тут осуществляется ввод текста следующим образом : начинаешь ввод, если ввел 40 символов, то начинается заполнение второй строчки , после ее заполнения следует третья и т.д. или же весь процесс останавливается при нажатии ESC.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской
Реальное имя: Макс

Репутация: -  0  +


Volvo мщжет ты мне подскажешькак мне сделать эту задачу???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
переносил не на серидине слова а его целиком


и как ты себе это представляешь при твоей постановке задачи ?!? ты же сказал что тебе нужено сокращать строку до 40 символов !? В этом случае вполне вероятно что какое-либо слово обрубится...

Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской
Реальное имя: Макс

Репутация: -  0  +


Да вероятно ты прав извини!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Цитата(_JC_ @ 13.10.2005 15:01)
как сделать чтобы он переносил не на серидине слова а его целиком если оно не влазит в строку??? huh.gif

Вот так:
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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской
Реальное имя: Макс

Репутация: -  0  +


Извиняюсь за то что беспокою, но этот Му.....ЖИК сказал что нужно что бы текст был загружен из файла! Вобщем задача звучит так : загруженый текст из файла разбить на строки не длиннее 40 символов! Поможите??? Спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






_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.


P.S. Это будет работать, когда весь текст забит в файле в одну строку. Если есть символы #13 (перевод строки), то нужно будет их соответствующим образом обрабатывать... Тестировалось на файле:
Цитата
start finish end begin end begin start finish end begin end begin start finish end begin end begin start finish end begin end begin
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 16.04.2024 14:14
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name