|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Разделение текста на строки
Народ, помогите разобраться в чем здесь ошибка:
Эту функцию я пишу для деления текста на заданное кол-во символов по строчкам, например длина строки 5, тогда для текста я вызываю эту функцию с параметром SymbCount=5), ну я думаю понятен вопрос, помогите пожалуйста, в чем ошибка ???(тут я ещё убрал подсчет отстатка, т.е. его добавление, но это пока не важно). Код:
Function DivText(Text:string;SymbCount:integer):string; var i,Len,DL,sl,el:integer; rText:string; begin rText:=''; Len:=Length(Text); if Len<=SymbCount then Result:=Text else begin dl:=Len div SymbCount; ost:=Len-dl*SymbCount; for i:=0 to dl-1 do begin sl:=(i*SymbCount)+1; el:=(sl+SymbCount)-1; rText:=rtext+#13+Copy(Text,sl,el); end; Result:=rText; end; end; Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей |
#2
|
||||
|
||||
Код:
Function DivText(Text:string;SymbCount:integer):string; var i,Len,DL,sl,el,ost:integer; rText:string; begin rText:=''; Len:=Length(Text); if Len<=SymbCount then Result:=Text else begin dl:=Len div SymbCount; ost:=Len mod SymbCount; for i:=0 to dl-1 do begin sl:=(i*SymbCount)+1; el:=(sl+SymbCount)-1; if rText = '' then rText:=Copy(Text,sl,SymbCount) else rText:=rtext+#13#10+Copy(Text,sl,SymbCount); end; Result:=rText; end; end; а можно так Код:
Function DivText(Text:string;SymbCount:integer):string; var i, Len:integer; begin Len:=Length(Text); Result := Copy(Text,1,SymbCount); i := SymbCount + 1; while i < Len do begin Result := Result + #13#10 + Copy(Text,i,SymbCount); i := i + SymbCount; end; end; |
#3
|
||||
|
||||
ты думаешь прям как и я, я просто пока удалил переменную ost У МЕНЯ БЫЛО ТАКОЕ ЖЕ НАЗВАНИЕ !!!(вот только я считал её так: (но разницы то нет, просто забыл про mod)
Код:
ost:=Len-dl*SymbCount; Всё, спасибо ещё раз, я понял свою ошибку, теперь функция выглядит так: Код:
Function TCallingText.DivText(Text:string;SymbCount:integer):string; var ost,i,Len,DL,sl,el:integer; rText:string; begin rText:=''; Len:=Length(Text); if Len<=SymbCount then Result:=Text else begin dl:=Len div SymbCount; ost:=Len-dl*SymbCount; for i:=0 to dl-1 do begin sl:=(i*SymbCount)+1; el:=(sl+SymbCount)-1; if rText = '' then rText:=Copy(Text,sl,SymbCount) else rText:=rtext+#13+Copy(Text,sl,SymbCount); end; if ost>0 then Result:=rText+#13+Copy(Text,Length(text)-ost+1,SymbCount) else Result:=rText; end; end; Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей Последний раз редактировалось Oleg, 23.03.2008 в 21:45. |
#4
|
||||
|
||||
если я не ошибаюсь ост совсем не нужен
в твоем варианте остаток два раза должен выйти он и так выходит на последнем цыкле (надеюсь я не ошибся - у меня выводилась вся строка) |
#5
|
||||
|
||||
Цитата:
Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей |
#6
|
||||
|
||||
Да, извини, ошибку заметил
(а говоришь одинаково мыслим) Мне ближе второй вариант он и выводит все, а в первом достаточно написать Код:
for i:=0 to dl do begin |