![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Создал свой модуль 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
|
|||
|
|||
|
Покажите текст unit`а.
|
|
#3
|
|||
|
|||
|
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
|
|||
|
|||
|
Входной параметр второй фукции у тебя число, а ты записываешь туда строку.
Результат, компилятор должен матерится на несоответствие типо String & Integer Тем более что возвращаемое значение у тя тоже стринг, а ты обявиляешь "i: Integer;" Последний раз редактировалось VIR, 19.12.2007 в 16:07. |
|
#5
|
|||
|
|||
|
Спасибо!
![]() |
|
#6
|
|||
|
|||
|
Это у вас для .NET? Меня вот эта конструкция смущает "Str.Chars[i]".
Но я хочу вот что сказать. Начиная с древнего какого-то Паскаля в нем есть такая функция Pos. Она возвращает позицию заданного символа в строке. Это то, что делает ваша первая функция (FindCharInStr), т.е. она не нужна. Что делает вторая - я не понял, поэтому сказать тут ничего не могу. Вообще, советую прежде чем начинать писать своё, посмотреть среди стандартных функций, их очень много написано, тем более для таких элементарных операций. Ну и раз уж я начал советы раздавать : не вызывайте в цикле Length(S). Запишите эту длину строки в переменную и используйте ее в качестве границы цикла:Код:
L := Length(S); for i := 1 to L - 1 do begin ... Строки - они длинные бывают, зачем вам миллион раз вызывать функцию, которая миллион раз возвратит одно и то же значение. |
|
#7
|
|||
|
|||
|
Цитата:
Да, это на Borland .Net. А вообще перешел на старый знакомы Delphi 7. Насчет Length Вы правы - 2.5 года не программировал!!! |
|
#8
|
||||
|
||||
|
Хм, а чем Pos не подходит?
|