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

Delphi Sources



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

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

Народ, помогите разобраться в чем здесь ошибка:
Эту функцию я пишу для деления текста на заданное кол-во символов по строчкам, например длина строки 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  
Старый 23.03.2008, 21:06
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Код:
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  
Старый 23.03.2008, 21:19
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Радость

ты думаешь прям как и я, я просто пока удалил переменную ost У МЕНЯ БЫЛО ТАКОЕ ЖЕ НАЗВАНИЕ !!!(вот только я считал её так: (но разницы то нет, просто забыл про mod)
Код:
ost:=Len-dl*SymbCount;
Кстати, ost не используется у тебя, но это я доделаю, спасибо за помощь !
Всё, спасибо ещё раз, я понял свою ошибку, теперь функция выглядит так:
Код:
  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
По умолчанию

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


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter