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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2012, 20:14   #1
Chikoy
Пользователь
 
Регистрация: 30.04.2012
Сообщений: 11
Вопрос Функция возвращает пустую строку

Помогите пожалуйста разобраться с проблемой? Файл OID.txt содержит информацию названий моделей принтеров, а в OID_Model.txt содержатся значения OID всех принтеров, эта функции предназначена для опроса сетевого принтера по его ip адресу. Из файла OID_Model.txt считывается строка со значением OID для опроса принтера по протоколу snmp, Затем полученное значение сравнивается со строками в файле OID.txt, как значения совпадут функция должна содержать строку с именем принтера, но она возвращает мне пустую строку, подскажите пожалуйста где ошибка ?
Код:
Function PoiskModel (ip: string) : string;
var
i, j, fk, hk: integer;
marka, bufer, stroka, strokaModel: string;
f, h: TstringList;
begin
 f:= TstringList.create();
 f.loadFromFile('OID.txt');
 fk:= f.count;
 h:= TstringList.create();
 h.loadFromFile('OID_model.txt');
 hk:= h.count;
 i:=0;
 repeat
  stroka:= h.Strings[i];
  bufer:= Copy(stroka,1,Pos(' ', stroka)-1);
  marka:= SNMPQuery (ip, bufer);
  j:=0;
  repeat
   strokaModel:= f.Strings[j];
   j:= j+1;
  until (marka = strokaModel) or (j = fk);
  i:= i+1;
 until (marka = strokaModel) or (i = hk);
 f.Free;
 H.Free;
end;


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 17.05.2012 в 23:27.
Chikoy вне форума Ответить с цитированием
Старый 17.05.2012, 21:23   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Давненько не сидел за Дельфями потому прошу показать мне строку где функция вообще что-то возвращает .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 17.05.2012, 22:48   #3
googl
Форумчанин
 
Регистрация: 05.06.2010
Сообщений: 154
По умолчанию

Все, что нужно вывести:
Цитата:
Result:=
googl вне форума Ответить с цитированием
Старый 17.05.2012, 22:59   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,881
По умолчанию

Так и есть, ничего не возвращает, ну по логике можно потыкаться - поставить в конце result := marka; - т.е. вернуть строку с найденной в циклах маркой, но в функции надо ещё обернуть вариант ненахождения строки вообще - я бы сделал булеву переменную , например Found, и из until убрал бы проверку на найденность строки, а положил в цикл, присваивая эту проверку в Found и брякая циклы если она истинна. в конце если found истинна то result := marka; иначе пустая строка.
phomm вне форума Ответить с цитированием
Старый 17.05.2012, 23:06   #5
googl
Форумчанин
 
Регистрация: 05.06.2010
Сообщений: 154
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Так и есть, ничего не возвращает, ну по логике можно потыкаться - поставить в конце result := marka; - т.е. вернуть строку с найденной в циклах маркой, но в функции надо ещё обернуть вариант ненахождения строки вообще - я бы сделал булеву переменную , например Found, и из until убрал бы проверку на найденность строки, а положил в цикл, присваивая эту проверку в Found и брякая циклы если она истинна. в конце если found истинна то result := marka; иначе пустая строка.
или я не понял или все же: с помощью ф-ции возвтратится первый подходящий? не легче тогда действительно ф-цию сделать логической и записывать данные в глобальный массив. потом опрашивать массив, если тру
googl вне форума Ответить с цитированием
Старый 18.05.2012, 06:29   #6
Chikoy
Пользователь
 
Регистрация: 30.04.2012
Сообщений: 11
По умолчанию

А все не надо сам уже разобрался, но все равно спасибо тем кто хотел мне помочь!
Я сделал вот так, добавил в конец функции условие:
Код:
if marka = strokaModel then PoiskModel:=strokaModel
  else showmessage('Модель не найдена');
 f.Free;
 H.Free;
end;
И Функция возвращает мне наименование модели из файла OID.txt

Последний раз редактировалось Stilet; 18.05.2012 в 07:14.
Chikoy вне форума Ответить с цитированием
Старый 18.05.2012, 07:18   #7
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Цитата:
if marka = strokaModel then PoiskModel:=strokaModel
else showmessage('Модель не найдена');
f.Free;
H.Free;
end;
Не очень хорошо сделано. Лучше так
Цитата:
if marka <> strokaModel then
begin
ShowMessage('Модель не найдена');
Result:='-1';
end;
else result:=strokaModel;
Если первый вызов завершится удачно, а второй ошибочно, то переменная, которая принимает значение функции будет содержать ложную информацию, что в дальнейшем приведет к ошибкам.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
mysql_query("select * ...) возвращает пустую таблицу dutch92 PHP 2 16.03.2011 08:36
Копировать строку фильтрованного списка в другую книгу, на последнюю пустую строку Gvaridos Microsoft Office Excel 11 24.11.2010 00:48
Преобразование даты в пустую строку insense БД в Delphi 6 02.07.2010 09:13
Запрос возвращает пустую таблицу, если один из подзаросов возвращает пустую таблицу ArtInt SQL, базы данных 9 12.05.2010 15:40
если поле Patr пусто или null то пустую строку возвращает azat БД в Delphi 5 01.02.2008 13:05