Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.03.2008, 18:12
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Вопрос Разделение текста на строки

Народ, помогите разобраться в чем здесь ошибка:
Эту функцию я пишу для деления текста на заданное кол-во символов по строчкам, например длина строки 5, тогда для текста я вызываю эту функцию с параметром SymbCount=5), ну я думаю понятен вопрос, помогите пожалуйста, в чем ошибка ???(тут я ещё убрал подсчет отстатка, т.е. его добавление, но это пока не важно).
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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  
Старый 23.03.2008, 21:06
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Function DivText(Text:string;SymbCount:integer):string;
var
  i,Len,DL,sl,el<b><font color="Magenta">,ost</font></b>:integer;
  rText:string;
begin
  rText:='';
  Len:=Length(Text);
  if Len<=SymbCount then Result:=Text else begin
    dl:=Len div SymbCount;
    ost:=Len <font color="Blue"><b>mod</b></font> 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<font color="Blue"><b>#10</b></font>+Copy(Text,sl,<font color="Magenta"><b>SymbCount</b></font>);
    end;
    Result:=rText;
  end;
end;

а можно так
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
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  
Старый 23.03.2008, 21:19
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Радость

ты думаешь прям как и я, я просто пока удалил переменную ost У МЕНЯ БЫЛО ТАКОЕ ЖЕ НАЗВАНИЕ !!!(вот только я считал её так: (но разницы то нет, просто забыл про mod)
Код:
1
ost:=Len-dl*SymbCount;
Кстати, ost не используется у тебя, но это я доделаю, спасибо за помощь !
Всё, спасибо ещё раз, я понял свою ошибку, теперь функция выглядит так:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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  
Старый 24.03.2008, 01:49
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

если я не ошибаюсь ост совсем не нужен
в твоем варианте остаток два раза должен выйти
он и так выходит на последнем цыкле
(надеюсь я не ошибся - у меня выводилась вся строка)
Ответить с цитированием
  #5  
Старый 24.03.2008, 13:07
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Радость

Цитата:
Сообщение от s0Creator
если я не ошибаюсь ост совсем не нужен
Да нет, у меня всё правильно и остаток нужен, иначе не весь текст делится и остаются не все символы.
__________________
Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей
Ответить с цитированием
  #6  
Старый 24.03.2008, 15:32
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Да, извини, ошибку заметил
(а говоришь одинаково мыслим)
Мне ближе второй вариант он и выводит все,
а в первом достаточно написать
Код:
1
for i:=0 to <font color="Blue"><b>dl</b></font> do begin
(и не возится с остатком)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:27.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025