Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Delphi: Общие вопросы > Is not valid integer value / Delphi XE |
Автор: Kirilis2018 23.04.18, 20:33 |
Программа меняет все значения, со знаком (=), в порядке убывания. А когда ввожу без знака (=) то возникает ошибка. И вот вопрос: Как, место сообщения Is not valid integer value - Вывести свой текст. К примеру, сообщение: "Внимание, вы ввели неправильные - значения". <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> function MySort(L: TStringList; ind1, ind2: integer): integer; var i1, i2: integer; begin i1 := StrToInt(L.ValueFromIndex[ind1]); i2 := StrToInt(L.ValueFromIndex[ind2]); if i1 = i2 then result := 0 else if i1 > i2 then result := 1 else result := -1; end; procedure TForm1.Button2Click(Sender: TObject); var L: TStringList; begin L := TStringList.Create; L.Text := Memo1.Text; L.CustomSort(MySort); Memo2.Text := L.Text; L.Free; end; |
Автор: Shaggy 23.04.18, 22:29 |
по поводу сообщения: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> if TryStrToInt(L.ValueFromIndex[ind1], i1) then // выводим своё сообщение или делаем какие-то другие действия по поводу причины возникновения ошибки: TStringList является списком строк определённого формата: name=value знак '=' является разделителем по умолчанию и когда мы берём значение таким способом L.ValueFromIndex[ind1] отбрасывается строки =1, =2 и т.д. трактуются как параметры без имени, но со значением строки 1, 2, и т.д. трактуются как параметры с именем, но без значения соответственно беря значение любого такого параметра (L.ValueFromIndex[ind1]) мы получаем '' (пустую строку) конвертировать её в число, конечно, не получается |
Автор: ^D^ima 24.04.18, 08:21 |
А так не катит? <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Var SL:TStringList; I:Integer; begin SL:=TStringList.Create; SL.Sorted:=true; SL.Text:=Memo1.Text; For I:=SL.Count-1 downto 0 do memo2.Lines.Add(SL.Strings[I]); SL.Free; end; |
Автор: Kirilis2018 24.04.18, 08:23 |
Так вообще идеально. Но просто хотелось посмотреть на работу самой функции MySort. |
Автор: ^D^ima 24.04.18, 11:14 |
Kirilis2018 Формально твою задачу можно решить так: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> function MySort(L: TStringList; ind1, ind2: integer): integer; var i1, i2: integer; begin if TryStrToInt(L.Strings[ind1],i1) then i1 := StrToInt(L.Strings[ind1]) else i1 := StrToInt(L.ValueFromIndex[ind1]); if TryStrToInt(L.Strings[ind2],i2) then i2 := StrToInt(L.Strings[ind2]) else i2 := StrToInt(L.ValueFromIndex[ind2]); if i1 = i2 then result := 0 else if i1 < i2 then result := 1 else result := -1; end; |