Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2020, 11:56   #1
IvaNoff2020
Пользователь
 
Регистрация: 09.12.2020
Сообщений: 30
По умолчанию длина не пустых строк Memo

Туплю. Дан частично заполненый Memo. Посчитать число заполненных строк. Выводит 0. А не должен. Что делаю не правильно?

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  count_str: integer;
begin

   count_str := 0;
   for i := 0 to (Memo1.Lines.Count - 1) do;
   begin
     if ( (UTF8Length(Memo1.Lines.Strings[i])) > 0 ) then
     begin
        count_str += UTF8Length(Memo1.Lines.Strings[i]);
     end;
   end;

   Edit1.Text := inttostr(count_str);

end;

Последний раз редактировалось IvaNoff2020; 11.12.2020 в 11:58. Причина: ..
IvaNoff2020 вне форума Ответить с цитированием
Старый 11.12.2020, 11:59   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
for i := 0 to (Memo1.Lines.Count - 1) do;
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 11.12.2020, 12:07   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,037
По умолчанию

В переводе это значит: "В этом цикле не делать ничего"
А count_str += вроде бы из другой оперы (Си) . И begin end при одном операторе не нужен. Смешение "французского с нижегородским" Си - Паскаль.
Код:
   for i := 0 to (Memo1.Lines.Count - 1) do
     if ( (UTF8Length(Memo1.Lines.Strings[i])) > 0 ) then 
        count_str := count_str + UTF8Length(Memo1.Lines.Strings[i]);
В смысл я не вникал - чисто синтаксически.

Последний раз редактировалось digitalis; 11.12.2020 в 12:15.
digitalis вне форума Ответить с цитированием
Старый 11.12.2020, 12:08   #4
IvaNoff2020
Пользователь
 
Регистрация: 09.12.2020
Сообщений: 30
По умолчанию

Aleksandr H., А что в этой строке неверно? Ну, объединил в скобки. Отладчик говорит Memo1.Lines.Count-1 = 136. 136 = число строк в файле. Из которого подгружается в Memo
Код:
file1.LoadFromFile('D:\1\test_str.txt');
Memo1.Text := file1.Text;

Последний раз редактировалось IvaNoff2020; 11.12.2020 в 12:09. Причина: ..
IvaNoff2020 вне форума Ответить с цитированием
Старый 11.12.2020, 12:11   #5
IvaNoff2020
Пользователь
 
Регистрация: 09.12.2020
Сообщений: 30
По умолчанию

IvaNoff2020, получается второй цикл надо. от 1 до длины каждой строки

Последний раз редактировалось IvaNoff2020; 11.12.2020 в 12:12. Причина: ..
IvaNoff2020 вне форума Ответить с цитированием
Старый 11.12.2020, 12:12   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,398
По умолчанию

for i := 0 to (Memo1.Lines.Count - 1) do begin end ;
так понятнее ???

to digitals
Цитата:
А count_str += вроде бы из другой оперы (Си)
Lazarus такое умеет.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 11.12.2020 в 12:16.
evg_m вне форума Ответить с цитированием
Старый 11.12.2020, 12:15   #7
IvaNoff2020
Пользователь
 
Регистрация: 09.12.2020
Сообщений: 30
По умолчанию

evg_m, полагаю, первый цикл сколько строк в файле = столько проходов. второй саму текущую строку проверяет и если условие соответствует счетчик увеличиваем. так чтоли?
IvaNoff2020 вне форума Ответить с цитированием
Старый 11.12.2020, 12:18   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,037
По умолчанию

Цитата:
Lazarus такое умеет.
С Лазарем я меньше работал, не обратил внимания, что это он.
digitalis вне форума Ответить с цитированием
Старый 11.12.2020, 12:29   #9
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от IvaNoff2020 Посмотреть сообщение
Посчитать число заполненных строк
?это точно так считается
Код:
count_str += UTF8Length(Memo1.Lines.Strings[i]);
а не
Код:
inc(count_str);
Или "число" ето длина, а не количество?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 11.12.2020, 12:30   #10
IvaNoff2020
Пользователь
 
Регистрация: 09.12.2020
Сообщений: 30
По умолчанию

IvaNoff2020, ; Не обратил внимание что поставилась.

И в count_str длину зачем-то добавлял.

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  count_str: integer;
begin

   count_str := 0;
   for i := 0 to Memo1.Lines.Count - 1 do
   begin
     if ( (Length(Memo1.Lines.Strings[i])) <> 0 ) then
     begin
        count_str += 1;
     end;
   end;

   Edit1.Text := inttostr(count_str);

end;
Всем спасибо навели! А то сижу туплю))
IvaNoff2020 вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление пустых строк Dessz_de_Laerre Microsoft Office Excel 7 24.08.2016 13:07
количество пустых строк Ernest027 БД в Delphi 2 20.08.2015 15:14
Delphi.Чтение файла в Memo, вычисление, добавление строк в Memo antonio_sk Помощь студентам 0 26.04.2013 18:01
Delphi. как добавить в Memo 5 строк, длина каждой 10 символов. Nostalgia Помощь студентам 3 21.03.2010 12:31
Заполнение пустых строк.. Balina Microsoft Office Excel 9 02.12.2009 11:49