Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.141.195.128] |
|
Сообщ.
#1
,
|
|
|
Программа меняет все значения, со знаком (=), в порядке убывания. А когда ввожу без знака (=) то возникает ошибка.
И вот вопрос: Как, место сообщения Is not valid integer value - Вывести свой текст. К примеру, сообщение: "Внимание, вы ввели неправильные - значения". 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; |
Сообщ.
#2
,
|
|
|
по поводу сообщения:
if TryStrToInt(L.ValueFromIndex[ind1], i1) then // выводим своё сообщение или делаем какие-то другие действия по поводу причины возникновения ошибки: TStringList является списком строк определённого формата: name=value знак '=' является разделителем по умолчанию и когда мы берём значение таким способом L.ValueFromIndex[ind1] отбрасывается строки =1, =2 и т.д. трактуются как параметры без имени, но со значением строки 1, 2, и т.д. трактуются как параметры с именем, но без значения соответственно беря значение любого такого параметра (L.ValueFromIndex[ind1]) мы получаем '' (пустую строку) конвертировать её в число, конечно, не получается |
Сообщ.
#3
,
|
|
|
А так не катит?
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; |
Сообщ.
#4
,
|
|
|
Цитата ^D^ima @ А так не катит? Так вообще идеально. Но просто хотелось посмотреть на работу самой функции MySort. |
Сообщ.
#5
,
|
|
|
Kirilis2018
Формально твою задачу можно решить так: 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; |