Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2021, 15:42   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 603
По умолчанию Последний элемент цикла for

Вопрос такой

Края цикла for заданы сложными формулами
Вопрос: можно ли изнутри цикла знать номер последнего элемента, так чтобы не нужно было заново проводить все вычисление

Собственно задача такая: есть цикл на огромное число действий, но одно действие нужно выполнить на всех итерациях, кроме последней
Kronos913 вне форума Ответить с цитированием
Старый 02.06.2021, 15:59   #2
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
можно ли изнутри цикла знать номер последнего
сделайте любую переменную счётчик и знайте себе на здоровье количество итераций.

кроме всего циклом For вы сразу задаёте количество итераций, почему

For i:=1 to номер последней итерации Do

))

Цитата:
одно действие нужно выполнить на всех итерациях
А после цикла это действие указать не возможно? ))
Он как раз выполнится на/после последней итерации
Alar на форуме Ответить с цитированием
Старый 02.06.2021, 17:20   #3
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 603
По умолчанию

Вот код, который я пытаюсь улучшить =)

Суть задачи такая: кусок текста есть в буфере, надо превратить его в строку. При этом
1. Игнорировать пустые строки

2. Следить за тем, чтобы итоговая строка не превысила 255 символов. Если дошли до 255 символов, на этом надо остановиться

3. !!! Разделять строки элементом c. Тип string[1], а не char имеет потому что может он быть, а может и не быть. То есть может быть нужно разделять чем-то строки, а может и нет.

Код:
{Возвращает  строку сделанную из текстового буфера обмена.
s - переменная, в которую сохраняется текст
с - символ разделяющий строки}
Function ClipboardToString(var s:string; const c:string1): boolean;
var
 ss:TStrings;
 st, i:word;
 j: byte;

begin
 ss:=TstringList.Create;
 ss.Text:=Clipboard.asText;
 s:='';

 If ss.Count>0 then begin
   {Убираем пустые строки в начале}
   st:=0;
   while ss[st]='' do begin
     inc(st);
     If not(st<ss.Count) then begin
       ss.Free;
       Result:=false;
       Exit;
     end;
   end;
   {Проверяем, не превышает ли 255 первая строка}
   If length(ss[st])>255 then begin
     For j:=1 to 255 do s:=s+ss[st][j];
   end else begin
     {Добавляем первую строку}
     s:=ss[st];
     {Добавляем остальные строки через разделитель}
     For i:=st+1 to ss.Count-1 do begin
       If length(s)+length(c)<256 then begin
         If length(ss[i])>0 then begin
           s:=s+c;
           If length(s)+length(ss[i])>255 then begin
             For j:=1 to 255-length(s) do s:=s+ss[i][j];
             ss.Free;
             Result:=true;
             Exit;
           end else s:=s+ss[i];
         end;
       end else begin
         ss.Free;
         Result:=true;
         Exit;
       end;
     end;
   end;
   Result:=(length(s)>0);
 end else Result:=false;
 ss.Free;
end;

Последний раз редактировалось Kronos913; 02.06.2021 в 17:23.
Kronos913 вне форума Ответить с цитированием
Старый 02.06.2021, 19:23   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

А если так?
Код:
function ClipboardToString(var s: string; const c: string1): boolean;
var
  ss: TStringList;
  i: Integer;
begin
  ss := TStringList.Create;
  ss.Text := Clipboard.asText;
  s := '';
  for i := 0 to ss.Count - 1 do
    if Length(ss[i]) > 0 then
    begin
      s := s + c + ss[i];
      if Length(s) > 255 then
        Break;
    end;
  s := Copy(s, 1 + Length(c), 255);
  Result := (Length(s) > 0);
  ss.Free;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 02.06.2021, 19:45   #5
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 603
По умолчанию

Я, кстати, не совсем понимаю, когда строка может быть больше 255, а когда нет
Kronos913 вне форума Ответить с цитированием
Старый 03.06.2021, 00:25   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Эм, ну скопировали большой текст, вот и получилось в буфере обмена много длинных строк.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.06.2021, 01:32   #7
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 603
По умолчанию

Я имею в виду переменная типа string в каком случае ограничена 255 символами, а в каком - нет?
Kronos913 вне форума Ответить с цитированием
Старый 03.06.2021, 01:37   #8
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

Мануалы нужно читать

http://www.delphibasics.ru/String.php
http://www.delphibasics.ru/ShortString.php
Alar на форуме Ответить с цитированием
Старый 03.06.2021, 03:25   #9
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Я имею в виду переменная типа string в каком случае ограничена 255 символами, а в каком - нет?
Переменная типа string ограничена 255 только если это переменная явно объявлена как ShortString.
Но есть еще одно ограничение размером 255. Текстовая константа в строке кода в исходнике не должна превышать 255 символов.
P.S.
Имхо вы дурью маетесь по причине незнания основ Дельфи и Паскаля.

Последний раз редактировалось northener; 03.06.2021 в 03:31.
northener вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как удалить последний элемент? Александр121 Python 4 25.08.2018 10:50
создать массив по формуле,найти максимальный элемент. отсортировать по уменьшению,последний отрицательн элемент заменить наиболшим сергей-верига Помощь студентам 2 16.01.2014 15:25
удаляем последний элемент дерева Madmaxisss Паскаль, Turbo Pascal, PascalABC.NET 7 07.08.2012 15:16
Одномерный массив. Необходимо заменить последний положительный элемент на второй элемент массива кумитэ Паскаль, Turbo Pascal, PascalABC.NET 1 19.12.2011 16:44
последний элемент очереди zhenya.ya Помощь студентам 0 31.03.2010 21:20