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

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - 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