Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.12.2007, 18:57
AlexVMK111 AlexVMK111 вне форума
Прохожий
 
Регистрация: 18.12.2007
Сообщения: 4
Репутация: 10
По умолчанию Функция не возвращает значение.

Создал свой модуль MyUnit.

В нем две функции:
function FindCharInStr(Str: string; Ch: char):Integer;
Function GetStrValue(Str : String; Index : Integer):String;

1) Вызываю функцию FindCharInStr из главного модуля программы:
i:= FindCharInStr(Str, ',');
После чего i равно 7. Так и должно быть.

2) Вызываю функцию FindCharInStr из функции GetStrValue:
i:= FindCharInStr(Str, ',');
После чего i равно 0. А должно быть 7!

В чем может быть моя ошибка?
Ответить с цитированием
  #2  
Старый 19.12.2007, 04:08
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Покажите текст unit`а.
Ответить с цитированием
  #3  
Старый 19.12.2007, 12:28
AlexVMK111 AlexVMK111 вне форума
Прохожий
 
Регистрация: 18.12.2007
Сообщения: 4
Репутация: 10
По умолчанию

unit MyForexUnit;
interface
function GetStrValue(Str : String; Index : Integer):String;
implementation

function FindCharInStr(Str: string; Ch: char):Integer;
Var i: Integer;
Begin

For i:=0 to Length(Str)-1 do
Begin
if Str.Chars[i] = Ch then
Begin
Result:=i;
Exit;
End;
End;
Result:= 0;
End;


Function GetStrValue(Str : String; Index : Integer):String;
Var i: Integer;
Begin
i:= FindCharInStr(Str, ',');
Result:= 'Alex';
End;


end.
Ответить с цитированием
  #4  
Старый 19.12.2007, 16:04
VIR VIR вне форума
Прохожий
 
Регистрация: 19.12.2007
Сообщения: 8
Репутация: 10
По умолчанию

Входной параметр второй фукции у тебя число, а ты записываешь туда строку.
Результат, компилятор должен матерится на несоответствие типо String & Integer
Тем более что возвращаемое значение у тя тоже стринг, а ты обявиляешь "i: Integer;"

Последний раз редактировалось VIR, 19.12.2007 в 16:07.
Ответить с цитированием
  #5  
Старый 19.12.2007, 16:18
AlexVMK111 AlexVMK111 вне форума
Прохожий
 
Регистрация: 18.12.2007
Сообщения: 4
Репутация: 10
По умолчанию

Спасибо!
Ответить с цитированием
  #6  
Старый 19.12.2007, 16:35
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Это у вас для .NET? Меня вот эта конструкция смущает "Str.Chars[i]".
Но я хочу вот что сказать. Начиная с древнего какого-то Паскаля в нем есть такая функция Pos. Она возвращает позицию заданного символа в строке. Это то, что делает ваша первая функция (FindCharInStr), т.е. она не нужна. Что делает вторая - я не понял, поэтому сказать тут ничего не могу. Вообще, советую прежде чем начинать писать своё, посмотреть среди стандартных функций, их очень много написано, тем более для таких элементарных операций.

Ну и раз уж я начал советы раздавать : не вызывайте в цикле Length(S). Запишите эту длину строки в переменную и используйте ее в качестве границы цикла:
Код:
L := Length(S);
for i := 1 to L - 1 do begin
...

Строки - они длинные бывают, зачем вам миллион раз вызывать функцию, которая миллион раз возвратит одно и то же значение.
Ответить с цитированием
  #7  
Старый 19.12.2007, 17:26
AlexVMK111 AlexVMK111 вне форума
Прохожий
 
Регистрация: 18.12.2007
Сообщения: 4
Репутация: 10
По умолчанию

Цитата:
Сообщение от Rosenkrantz
Это у вас для .NET? Меня вот эта конструкция смущает "Str.Chars[i]".
Но я хочу вот что сказать. Начиная с древнего какого-то Паскаля в нем есть такая функция Pos. Она возвращает позицию заданного символа в строке. Это то, что делает ваша первая функция (FindCharInStr), т.е. она не нужна. Что делает вторая - я не понял, поэтому сказать тут ничего не могу. Вообще, советую прежде чем начинать писать своё, посмотреть среди стандартных функций, их очень много написано, тем более для таких элементарных операций.

Ну и раз уж я начал советы раздавать : не вызывайте в цикле Length(S). Запишите эту длину строки в переменную и используйте ее в качестве границы цикла:
Код:
L := Length(S);
for i := 1 to L - 1 do begin
...

Строки - они длинные бывают, зачем вам миллион раз вызывать функцию, которая миллион раз возвратит одно и то же значение.

Да, это на Borland .Net.

А вообще перешел на старый знакомы Delphi 7.

Насчет Length Вы правы - 2.5 года не программировал!!!
Ответить с цитированием
  #8  
Старый 23.12.2007, 09:40
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Хм, а чем Pos не подходит?
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:52.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025