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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2012, 15:42   #1
Huruffus
Пользователь
 
Регистрация: 15.11.2012
Сообщений: 16
По умолчанию Процедцра без аргументов работает, а с ними - нет.

Всем здравствуйте.
Написал процедуру:
Код:
procedure CutStr();
begin
SetLength(Unit2.FNListBox, Length(Unit2.FNListBox)-4);
end;
Прописал в основную программу - работает.

Написал точно такую же, только с аргументами:
Код:
procedure CutStr(s:string;i:integer);
begin
SetLength(s, Length(s)-i);
end;
в программе прописана так:
Код:
CutStr(Unit2.FNListBox,4);
и не работает. Ошибку не выдаёт, но переменную не укорачивает.

Скажите пожалуйста, в чём дело?
Huruffus вне форума Ответить с цитированием
Старый 22.11.2012, 15:51   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Процедура то скорее всего работает, но это же процедура. Она ничего не возвращает. Сделайте функцию, которая будет возвращать укороченную строку, например так:
Код:
function CutStr(s:string;i:integer):string;
begin
result := SetLength(s, Length(s)-i);
end;
А в программе используйте так:
Код:
Ваша переменная := CutStr(Unit2.FNListBox,4);
FaTaL вне форума Ответить с цитированием
Старый 22.11.2012, 16:25   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Советую выучить тему "передача параметров в процедуры/функции/методы" из любого мануала по дельфи/паскалю, наперёд точно пригодится. В частности , ответ на Ваш вопрос касается модификатора передачи параметра var , т.е.
Код:
procedure CutStr(var s:string;i:integer);
Насчёт сетленса - сомневаюсь в способе предложенном Fatal ведь сетленс процедура. Но этот способ можно просто переписать так:
Код:
function CutStr(s:string;i:integer):string;
begin
SetLength(s, Length(s)-i);
result := s;
end;
phomm вне форума Ответить с цитированием
Старый 22.11.2012, 16:33   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Стесняюсь спросить, а зачем переменную укорачивать?
Кстати я тут свои пять копеек оставлю:
Код:
procedure CutStr(var s:string;i:integer);
begin
 s:=copy(s,1,Length(s)-i);
end;
И никакие Сетленцы тут не нужны.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.11.2012, 17:01   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

+1

а ещё есть "волшебная" системная процедура Delete

Код:
Delete(s, Length(s)-i, i)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.11.2012, 17:02   #6
Huruffus
Пользователь
 
Регистрация: 15.11.2012
Сообщений: 16
По умолчанию

Stilet,с помощью листБокса смотрю файлы, находящиеся в папке. Затем считываю строку из лист бокса и вставляю её в Едит.

phomm, FaTaL, Stilet, спасибо

Дабы не плодить темы, спрошу здесь.

в var объявил buf:string[80] (не знаю что это, но похоже на массив).

через buf считываю txt файлы в поле memo:
Код:
While not eof(a) do
   begin
     Readln(a,buf)
     Form1.Memo1.Lines.Add(buf); 
   end;
при последовательном прочтении двух и больше коротких файлов содержание предыдущих файлов остаётся в buf. Скажите пожалуйста, как почистить buf, чем он является, и можно ли сделать более простое чтение из файла?

Последний раз редактировалось Stilet; 22.11.2012 в 22:17.
Huruffus вне форума Ответить с цитированием
Старый 22.11.2012, 22:19   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А-а-а убрать завершающий слэш?
Тогда рекомендую стандартную функу ExcludeTrailingBackslash()
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.11.2012, 23:36   #8
Huruffus
Пользователь
 
Регистрация: 15.11.2012
Сообщений: 16
По умолчанию

причём тут слеш? я ни слова про него не сказал
Huruffus вне форума Ответить с цитированием
Старый 23.11.2012, 07:50   #9
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

А зачем тебе буфер строк вообще тут? Не проще сразу грузить в Мемо файл через TMemo.LoadFromFile ('Ваш файл'); или TMemo.Lines.LoadFromFile точно не помню.
FaTaL вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести строку, которая состоит из аргументов командной строки так, чтобы каждое слово выводилось без первого символа Mik2012 Общие вопросы C/C++ 1 31.10.2012 00:29
Изменение параметров конструктора без аргументов megadude000 Помощь студентам 0 20.04.2012 12:23
нет перегруженной функции, принимающей 2 аргументов Ghostik Visual C++ 2 10.04.2012 15:06
explicit конструктор без аргументов _-Re@l-_ Общие вопросы C/C++ 0 20.12.2011 20:29
Почему не работает тег align=right?valign работает а align нет! aviv HTML и CSS 5 21.01.2009 17:46